[
  {
    "path": ".gitignore",
    "content": "node_modules\nclient-build\nbuild.txt\nconfig_build.json\nconfig_local*\nclient/audio/music\n.DS_Store\n*.swp\n"
  },
  {
    "path": "LICENSE",
    "content": "* Code is MPL licensed:\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this file,\nYou can obtain one at http://mozilla.org/MPL/2.0/.\n\n\n* Content is licensed under CC-BY-SA 3.0: \nhttp://creativecommons.org/licenses/by-sa/3.0/"
  },
  {
    "path": "README.md",
    "content": "BrowserQuest\n============\n\nBrowserQuest is a HTML5/JavaScript multiplayer game experiment.\n\n\nDocumentation\n-------------\n\nDocumentation is located in client and server directories.\n\n\nLicense\n-------\n\nCode is licensed under MPL 2.0. Content is licensed under CC-BY-SA 3.0.\nSee the LICENSE file for details.\n\n\nCredits\n-------\nCreated by [Little Workshop](http://www.littleworkshop.fr):\n\n* Franck Lecollinet - [@whatthefranck](http://twitter.com/whatthefranck)\n* Guillaume Lecollinet - [@glecollinet](http://twitter.com/glecollinet)"
  },
  {
    "path": "bin/build.sh",
    "content": "#!/bin/bash\n\n# Script to generate an optimized client build of BrowserQuest\n\nBUILDDIR=\"../client-build\"\nPROJECTDIR=\"../client/js\"\nCURDIR=$(pwd)\n\n\necho \"Deleting previous build directory\"\nrm -rf $BUILDDIR\n\necho \"Building client with RequireJS\"\ncd $PROJECTDIR\nnode ../../bin/r.js -o build.js\ncd $CURDIR\n\necho \"Removing unnecessary js files from the build directory\"\nfind $BUILDDIR/js -type f -not \\( -name \"game.js\" -o -name \"home.js\" -o -name \"log.js\" -o -name \"require-jquery.js\" -o -name \"modernizr.js\" -o -name \"css3-mediaqueries.js\" -o -name \"mapworker.js\" -o -name \"detect.js\" -o -name \"underscore.min.js\" -o -name \"text.js\" \\) -delete\n\necho \"Removing sprites directory\"\nrm -rf $BUILDDIR/sprites\n\necho \"Removing config directory\"\nrm -rf $BUILDDIR/config\n\necho \"Moving build.txt to current dir\"\nmv $BUILDDIR/build.txt $CURDIR\n\necho \"Build complete\""
  },
  {
    "path": "bin/r.js",
    "content": "/**\n * @license r.js 0.26.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*\n * This is a bootstrap script to allow running RequireJS in the command line\n * in either a Java/Rhino or Node environment. It is modified by the top-level\n * dist.js file to inject other files to completely enable this file. It is\n * the shell of the r.js file.\n */\n\n/*jslint strict: false, evil: true, nomen: false */\n/*global readFile: true, process: false, Packages: false, print: false,\nconsole: false, java: false, module: false */\n\nvar requirejs, require, define;\n(function (console, args, readFileFunc) {\n\n    var fileName, env, fs, vm, path, exec, rhinoContext, dir, nodeRequire,\n        nodeDefine, exists, reqMain, loadedOptimizedLib,\n        version = '0.26.0',\n        jsSuffixRegExp = /\\.js$/,\n        commandOption = '',\n        //Used by jslib/rhino/args.js\n        rhinoArgs = args,\n        readFile = typeof readFileFunc !== 'undefined' ? readFileFunc : null;\n\n    function showHelp() {\n        console.log('See https://github.com/jrburke/r.js for usage.');\n    }\n\n    if (typeof Packages !== 'undefined') {\n        env = 'rhino';\n\n        fileName = args[0];\n\n        if (fileName && fileName.indexOf('-') === 0) {\n            commandOption = fileName.substring(1);\n            fileName = args[1];\n        }\n\n        //Set up execution context.\n        rhinoContext = Packages.org.mozilla.javascript.ContextFactory.getGlobal().enterContext();\n\n        exec = function (string, name) {\n            return rhinoContext.evaluateString(this, string, name, 0, null);\n        };\n\n        exists = function (fileName) {\n            return (new java.io.File(fileName)).exists();\n        };\n\n        //Define a console.log for easier logging. Don't\n        //get fancy though.\n        if (typeof console === 'undefined') {\n            console = {\n                log: function () {\n                    print.apply(undefined, arguments);\n                }\n            };\n        }\n    } else if (typeof process !== 'undefined') {\n        env = 'node';\n\n        //Get the fs module via Node's require before it\n        //gets replaced. Used in require/node.js\n        fs = require('fs');\n        vm = require('vm');\n        path = require('path');\n        nodeRequire = require;\n        nodeDefine = define;\n        reqMain = require.main;\n\n        //Temporarily hide require and define to allow require.js to define\n        //them.\n        require = undefined;\n        define = undefined;\n\n        readFile = function (path) {\n            return fs.readFileSync(path, 'utf8');\n        };\n\n        exec = function (string, name) {\n            return vm.runInThisContext(this.requirejsVars.require.makeNodeWrapper(string),\n                                       name ? fs.realpathSync(name) : '');\n        };\n\n        exists = function (fileName) {\n            return path.existsSync(fileName);\n        };\n\n\n        fileName = process.argv[2];\n\n        if (fileName && fileName.indexOf('-') === 0) {\n            commandOption = fileName.substring(1);\n            fileName = process.argv[3];\n        }\n    }\n\n    /** vim: et:ts=4:sw=4:sts=4\n * @license RequireJS 0.26.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n/*jslint strict: false, plusplus: false */\n/*global window: false, navigator: false, document: false, importScripts: false,\n  jQuery: false, clearInterval: false, setInterval: false, self: false,\n  setTimeout: false, opera: false */\n\n\n(function () {\n    //Change this version number for each release.\n    var version = \"0.26.0\",\n        commentRegExp = /(\\/\\*([\\s\\S]*?)\\*\\/|\\/\\/(.*)$)/mg,\n        cjsRequireRegExp = /require\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,\n        currDirRegExp = /^\\.\\//,\n        jsSuffixRegExp = /\\.js$/,\n        ostring = Object.prototype.toString,\n        ap = Array.prototype,\n        aps = ap.slice,\n        apsp = ap.splice,\n        isBrowser = !!(typeof window !== \"undefined\" && navigator && document),\n        isWebWorker = !isBrowser && typeof importScripts !== \"undefined\",\n        //PS3 indicates loaded and complete, but need to wait for complete\n        //specifically. Sequence is \"loading\", \"loaded\", execution,\n        // then \"complete\". The UA check is unfortunate, but not sure how\n        //to feature test w/o causing perf issues.\n        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?\n                      /^complete$/ : /^(complete|loaded)$/,\n        defContextName = \"_\",\n        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.\n        isOpera = typeof opera !== \"undefined\" && opera.toString() === \"[object Opera]\",\n        reqWaitIdPrefix = \"_r@@\",\n        empty = {},\n        contexts = {},\n        globalDefQueue = [],\n        interactiveScript = null,\n        isDone = false,\n        checkLoadedDepth = 0,\n        useInteractive = false,\n        req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script,\n        src, subPath, mainScript, dataMain, i, scrollIntervalId, setReadyState, ctx,\n        jQueryCheck, checkLoadedTimeoutId;\n\n    function isFunction(it) {\n        return ostring.call(it) === \"[object Function]\";\n    }\n\n    function isArray(it) {\n        return ostring.call(it) === \"[object Array]\";\n    }\n\n    /**\n     * Simple function to mix in properties from source into target,\n     * but only if target does not already have a property of the same name.\n     * This is not robust in IE for transferring methods that match\n     * Object.prototype names, but the uses of mixin here seem unlikely to\n     * trigger a problem related to that.\n     */\n    function mixin(target, source, force) {\n        for (var prop in source) {\n            if (!(prop in empty) && (!(prop in target) || force)) {\n                target[prop] = source[prop];\n            }\n        }\n        return req;\n    }\n\n    /**\n     * Constructs an error with a pointer to an URL with more information.\n     * @param {String} id the error ID that maps to an ID on a web page.\n     * @param {String} message human readable error.\n     * @param {Error} [err] the original error, if there is one.\n     *\n     * @returns {Error}\n     */\n    function makeError(id, msg, err) {\n        var e = new Error(msg + '\\nhttp://requirejs.org/docs/errors.html#' + id);\n        if (err) {\n            e.originalError = err;\n        }\n        return e;\n    }\n\n    /**\n     * Used to set up package paths from a packagePaths or packages config object.\n     * @param {Object} pkgs the object to store the new package config\n     * @param {Array} currentPackages an array of packages to configure\n     * @param {String} [dir] a prefix dir to use.\n     */\n    function configurePackageDir(pkgs, currentPackages, dir) {\n        var i, location, pkgObj;\n\n        for (i = 0; (pkgObj = currentPackages[i]); i++) {\n            pkgObj = typeof pkgObj === \"string\" ? { name: pkgObj } : pkgObj;\n            location = pkgObj.location;\n\n            //Add dir to the path, but avoid paths that start with a slash\n            //or have a colon (indicates a protocol)\n            if (dir && (!location || (location.indexOf(\"/\") !== 0 && location.indexOf(\":\") === -1))) {\n                location = dir + \"/\" + (location || pkgObj.name);\n            }\n\n            //Create a brand new object on pkgs, since currentPackages can\n            //be passed in again, and config.pkgs is the internal transformed\n            //state for all package configs.\n            pkgs[pkgObj.name] = {\n                name: pkgObj.name,\n                location: location || pkgObj.name,\n                //Remove leading dot in main, so main paths are normalized,\n                //and remove any trailing .js, since different package\n                //envs have different conventions: some use a module name,\n                //some use a file name.\n                main: (pkgObj.main || \"main\")\n                      .replace(currDirRegExp, '')\n                      .replace(jsSuffixRegExp, '')\n            };\n        }\n    }\n\n    /**\n     * jQuery 1.4.3-1.5.x use a readyWait/ready() pairing to hold DOM\n     * ready callbacks, but jQuery 1.6 supports a holdReady() API instead.\n     * At some point remove the readyWait/ready() support and just stick\n     * with using holdReady.\n     */\n    function jQueryHoldReady($, shouldHold) {\n        if ($.holdReady) {\n            $.holdReady(shouldHold);\n        } else if (shouldHold) {\n            $.readyWait += 1;\n        } else {\n            $.ready(true);\n        }\n    }\n\n    if (typeof define !== \"undefined\") {\n        //If a define is already in play via another AMD loader,\n        //do not overwrite.\n        return;\n    }\n\n    if (typeof requirejs !== \"undefined\") {\n        if (isFunction(requirejs)) {\n            //Do not overwrite and existing requirejs instance.\n            return;\n        } else {\n            cfg = requirejs;\n            requirejs = undefined;\n        }\n    }\n\n    //Allow for a require config object\n    if (typeof require !== \"undefined\" && !isFunction(require)) {\n        //assume it is a config object.\n        cfg = require;\n        require = undefined;\n    }\n\n    /**\n     * Creates a new context for use in require and define calls.\n     * Handle most of the heavy lifting. Do not want to use an object\n     * with prototype here to avoid using \"this\" in require, in case it\n     * needs to be used in more super secure envs that do not want this.\n     * Also there should not be that many contexts in the page. Usually just\n     * one for the default context, but could be extra for multiversion cases\n     * or if a package needs a special context for a dependency that conflicts\n     * with the standard context.\n     */\n    function newContext(contextName) {\n        var context, resume,\n            config = {\n                waitSeconds: 7,\n                baseUrl: s.baseUrl || \"./\",\n                paths: {},\n                pkgs: {},\n                catchError: {}\n            },\n            defQueue = [],\n            specified = {\n                \"require\": true,\n                \"exports\": true,\n                \"module\": true\n            },\n            urlMap = {},\n            defined = {},\n            loaded = {},\n            waiting = {},\n            waitAry = [],\n            waitIdCounter = 0,\n            managerCallbacks = {},\n            plugins = {},\n            pluginsQueue = {},\n            resumeDepth = 0,\n            normalizedWaiting = {};\n\n        /**\n         * Trims the . and .. from an array of path segments.\n         * It will keep a leading path segment if a .. will become\n         * the first path segment, to help with module name lookups,\n         * which act like paths, but can be remapped. But the end result,\n         * all paths that use this function should look normalized.\n         * NOTE: this method MODIFIES the input array.\n         * @param {Array} ary the array of path segments.\n         */\n        function trimDots(ary) {\n            var i, part;\n            for (i = 0; (part = ary[i]); i++) {\n                if (part === \".\") {\n                    ary.splice(i, 1);\n                    i -= 1;\n                } else if (part === \"..\") {\n                    if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {\n                        //End of the line. Keep at least one non-dot\n                        //path segment at the front so it can be mapped\n                        //correctly to disk. Otherwise, there is likely\n                        //no path mapping for a path starting with '..'.\n                        //This can still fail, but catches the most reasonable\n                        //uses of ..\n                        break;\n                    } else if (i > 0) {\n                        ary.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n        }\n\n        /**\n         * Given a relative module name, like ./something, normalize it to\n         * a real name that can be mapped to a path.\n         * @param {String} name the relative name\n         * @param {String} baseName a real name that the name arg is relative\n         * to.\n         * @returns {String} normalized name\n         */\n        function normalize(name, baseName) {\n            var pkgName, pkgConfig;\n\n            //Adjust any relative paths.\n            if (name && name.charAt(0) === \".\") {\n                //If have a base name, try to normalize against it,\n                //otherwise, assume it is a top-level require that will\n                //be relative to baseUrl in the end.\n                if (baseName) {\n                    if (config.pkgs[baseName]) {\n                        //If the baseName is a package name, then just treat it as one\n                        //name to concat the name with.\n                        baseName = [baseName];\n                    } else {\n                        //Convert baseName to array, and lop off the last part,\n                        //so that . matches that \"directory\" and not name of the baseName's\n                        //module. For instance, baseName of \"one/two/three\", maps to\n                        //\"one/two/three.js\", but we want the directory, \"one/two\" for\n                        //this normalization.\n                        baseName = baseName.split(\"/\");\n                        baseName = baseName.slice(0, baseName.length - 1);\n                    }\n\n                    name = baseName.concat(name.split(\"/\"));\n                    trimDots(name);\n\n                    //Some use of packages may use a . path to reference the\n                    //\"main\" module name, so normalize for that.\n                    pkgConfig = config.pkgs[(pkgName = name[0])];\n                    name = name.join(\"/\");\n                    if (pkgConfig && name === pkgName + '/' + pkgConfig.main) {\n                        name = pkgName;\n                    }\n                }\n            }\n            return name;\n        }\n\n        /**\n         * Creates a module mapping that includes plugin prefix, module\n         * name, and path. If parentModuleMap is provided it will\n         * also normalize the name via require.normalize()\n         *\n         * @param {String} name the module name\n         * @param {String} [parentModuleMap] parent module map\n         * for the module name, used to resolve relative names.\n         *\n         * @returns {Object}\n         */\n        function makeModuleMap(name, parentModuleMap) {\n            var index = name ? name.indexOf(\"!\") : -1,\n                prefix = null,\n                parentName = parentModuleMap ? parentModuleMap.name : null,\n                originalName = name,\n                normalizedName, url, pluginModule;\n\n            if (index !== -1) {\n                prefix = name.substring(0, index);\n                name = name.substring(index + 1, name.length);\n            }\n\n            if (prefix) {\n                prefix = normalize(prefix, parentName);\n            }\n\n            //Account for relative paths if there is a base name.\n            if (name) {\n                if (prefix) {\n                    pluginModule = defined[prefix];\n                    if (pluginModule) {\n                        //Plugin is loaded, use its normalize method, otherwise,\n                        //normalize name as usual.\n                        if (pluginModule.normalize) {\n                            normalizedName = pluginModule.normalize(name, function (name) {\n                                return normalize(name, parentName);\n                            });\n                        } else {\n                            normalizedName = normalize(name, parentName);\n                        }\n                    } else {\n                        //Plugin is not loaded yet, so do not normalize\n                        //the name, wait for plugin to load to see if\n                        //it has a normalize method. To avoid possible\n                        //ambiguity with relative names loaded from another\n                        //plugin, use the parent's name as part of this name.\n                        normalizedName = '__$p' + parentName + '@' + (name || '');\n                    }\n                } else {\n                    normalizedName = normalize(name, parentName);\n                }\n\n                url = urlMap[normalizedName];\n                if (!url) {\n                    //Calculate url for the module, if it has a name.\n                    if (req.toModuleUrl) {\n                        //Special logic required for a particular engine,\n                        //like Node.\n                        url = req.toModuleUrl(context, normalizedName, parentModuleMap);\n                    } else {\n                        url = context.nameToUrl(normalizedName, null, parentModuleMap);\n                    }\n\n                    //Store the URL mapping for later.\n                    urlMap[normalizedName] = url;\n                }\n            }\n\n            return {\n                prefix: prefix,\n                name: normalizedName,\n                parentMap: parentModuleMap,\n                url: url,\n                originalName: originalName,\n                fullName: prefix ? prefix + \"!\" + (normalizedName || '') : normalizedName\n            };\n        }\n\n        /**\n         * Determine if priority loading is done. If so clear the priorityWait\n         */\n        function isPriorityDone() {\n            var priorityDone = true,\n                priorityWait = config.priorityWait,\n                priorityName, i;\n            if (priorityWait) {\n                for (i = 0; (priorityName = priorityWait[i]); i++) {\n                    if (!loaded[priorityName]) {\n                        priorityDone = false;\n                        break;\n                    }\n                }\n                if (priorityDone) {\n                    delete config.priorityWait;\n                }\n            }\n            return priorityDone;\n        }\n\n        /**\n         * Helper function that creates a setExports function for a \"module\"\n         * CommonJS dependency. Do this here to avoid creating a closure that\n         * is part of a loop.\n         */\n        function makeSetExports(moduleObj) {\n            return function (exports) {\n                moduleObj.exports = exports;\n            };\n        }\n\n        function makeContextModuleFunc(func, relModuleMap, enableBuildCallback) {\n            return function () {\n                //A version of a require function that passes a moduleName\n                //value for items that may need to\n                //look up paths relative to the moduleName\n                var args = [].concat(aps.call(arguments, 0)), lastArg;\n                if (enableBuildCallback &&\n                    isFunction((lastArg = args[args.length - 1]))) {\n                    lastArg.__requireJsBuild = true;\n                }\n                args.push(relModuleMap);\n                return func.apply(null, args);\n            };\n        }\n\n        /**\n         * Helper function that creates a require function object to give to\n         * modules that ask for it as a dependency. It needs to be specific\n         * per module because of the implication of path mappings that may\n         * need to be relative to the module name.\n         */\n        function makeRequire(relModuleMap, enableBuildCallback) {\n            var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback);\n\n            mixin(modRequire, {\n                nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap),\n                toUrl: makeContextModuleFunc(context.toUrl, relModuleMap),\n                defined: makeContextModuleFunc(context.requireDefined, relModuleMap),\n                specified: makeContextModuleFunc(context.requireSpecified, relModuleMap),\n                ready: req.ready,\n                isBrowser: req.isBrowser\n            });\n            //Something used by node.\n            if (req.paths) {\n                modRequire.paths = req.paths;\n            }\n            return modRequire;\n        }\n\n        /**\n         * Used to update the normalized name for plugin-based dependencies\n         * after a plugin loads, since it can have its own normalization structure.\n         * @param {String} pluginName the normalized plugin module name.\n         */\n        function updateNormalizedNames(pluginName) {\n\n            var oldFullName, oldModuleMap, moduleMap, fullName, callbacks,\n                i, j, k, depArray, existingCallbacks,\n                maps = normalizedWaiting[pluginName];\n\n            if (maps) {\n                for (i = 0; (oldModuleMap = maps[i]); i++) {\n                    oldFullName = oldModuleMap.fullName;\n                    moduleMap = makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap);\n                    fullName = moduleMap.fullName;\n                    //Callbacks could be undefined if the same plugin!name was\n                    //required twice in a row, so use empty array in that case.\n                    callbacks = managerCallbacks[oldFullName] || [];\n                    existingCallbacks = managerCallbacks[fullName];\n\n                    if (fullName !== oldFullName) {\n                        //Update the specified object, but only if it is already\n                        //in there. In sync environments, it may not be yet.\n                        if (oldFullName in specified) {\n                            delete specified[oldFullName];\n                            specified[fullName] = true;\n                        }\n\n                        //Update managerCallbacks to use the correct normalized name.\n                        //If there are already callbacks for the normalized name,\n                        //just add to them.\n                        if (existingCallbacks) {\n                            managerCallbacks[fullName] = existingCallbacks.concat(callbacks);\n                        } else {\n                            managerCallbacks[fullName] = callbacks;\n                        }\n                        delete managerCallbacks[oldFullName];\n\n                        //In each manager callback, update the normalized name in the depArray.\n                        for (j = 0; j < callbacks.length; j++) {\n                            depArray = callbacks[j].depArray;\n                            for (k = 0; k < depArray.length; k++) {\n                                if (depArray[k] === oldFullName) {\n                                    depArray[k] = fullName;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n\n            delete normalizedWaiting[pluginName];\n        }\n\n        /*\n         * Queues a dependency for checking after the loader is out of a\n         * \"paused\" state, for example while a script file is being loaded\n         * in the browser, where it may have many modules defined in it.\n         *\n         * depName will be fully qualified, no relative . or .. path.\n         */\n        function queueDependency(dep) {\n            //Make sure to load any plugin and associate the dependency\n            //with that plugin.\n            var prefix = dep.prefix,\n                fullName = dep.fullName;\n\n            //Do not bother if the depName is already in transit\n            if (specified[fullName] || fullName in defined) {\n                return;\n            }\n\n            if (prefix && !plugins[prefix]) {\n                //Queue up loading of the dependency, track it\n                //via context.plugins. Mark it as a plugin so\n                //that the build system will know to treat it\n                //special.\n                plugins[prefix] = undefined;\n\n                //Remember this dep that needs to have normaliztion done\n                //after the plugin loads.\n                (normalizedWaiting[prefix] || (normalizedWaiting[prefix] = []))\n                    .push(dep);\n\n                //Register an action to do once the plugin loads, to update\n                //all managerCallbacks to use a properly normalized module\n                //name.\n                (managerCallbacks[prefix] ||\n                (managerCallbacks[prefix] = [])).push({\n                    onDep: function (name, value) {\n                        if (name === prefix) {\n                            updateNormalizedNames(prefix);\n                        }\n                    }\n                });\n\n                queueDependency(makeModuleMap(prefix));\n            }\n\n            context.paused.push(dep);\n        }\n\n        function execManager(manager) {\n            var i, ret, waitingCallbacks, err, errFile,\n                cb = manager.callback,\n                fullName = manager.fullName,\n                args = [],\n                ary = manager.depArray;\n\n            //Call the callback to define the module, if necessary.\n            if (cb && isFunction(cb)) {\n                //Pull out the defined dependencies and pass the ordered\n                //values to the callback.\n                if (ary) {\n                    for (i = 0; i < ary.length; i++) {\n                        args.push(manager.deps[ary[i]]);\n                    }\n                }\n\n                if (config.catchError.define) {\n                    try {\n                        ret = req.execCb(fullName, manager.callback, args, defined[fullName]);\n                    } catch (e) {\n                        err = e;\n                    }\n                } else {\n                    ret = req.execCb(fullName, manager.callback, args, defined[fullName]);\n                }\n\n                if (fullName) {\n                    //If setting exports via \"module\" is in play,\n                    //favor that over return value and exports. After that,\n                    //favor a non-undefined return value over exports use.\n                    if (manager.cjsModule && manager.cjsModule.exports !== undefined) {\n                        ret = defined[fullName] = manager.cjsModule.exports;\n                    } else if (ret === undefined && manager.usingExports) {\n                        //exports already set the defined value.\n                        ret = defined[fullName];\n                    } else {\n                        //Use the return value from the function.\n                        defined[fullName] = ret;\n                    }\n                }\n            } else if (fullName) {\n                //May just be an object definition for the module. Only\n                //worry about defining if have a module name.\n                ret = defined[fullName] = cb;\n            }\n\n            //Clean up waiting. Do this before error calls, and before\n            //calling back waitingCallbacks, so that bookkeeping is correct\n            //in the event of an error and error is reported in correct order,\n            //since the waitingCallbacks will likely have errors if the\n            //onError function does not throw.\n            if (waiting[manager.waitId]) {\n                delete waiting[manager.waitId];\n                manager.isDone = true;\n                context.waitCount -= 1;\n                if (context.waitCount === 0) {\n                    //Clear the wait array used for cycles.\n                    waitAry = [];\n                }\n            }\n\n            if (err) {\n                errFile = (fullName ? makeModuleMap(fullName).url : '') ||\n                           err.fileName || err.sourceURL;\n                err = makeError('defineerror', 'Error evaluating ' +\n                                'module \"' + fullName + '\" at location \"' +\n                                errFile + '\":\\n' +\n                                err + '\\nfileName:' + errFile +\n                                '\\nlineNumber: ' + (err.lineNumber || err.line), err);\n                err.moduleName = fullName;\n                return req.onError(err);\n            }\n\n            if (fullName) {\n                //If anything was waiting for this module to be defined,\n                //notify them now.\n                waitingCallbacks = managerCallbacks[fullName];\n                if (waitingCallbacks) {\n                    for (i = 0; i < waitingCallbacks.length; i++) {\n                        waitingCallbacks[i].onDep(fullName, ret);\n                    }\n                    delete managerCallbacks[fullName];\n                }\n            }\n\n            return undefined;\n        }\n\n        function main(inName, depArray, callback, relModuleMap) {\n            var moduleMap = makeModuleMap(inName, relModuleMap),\n                name = moduleMap.name,\n                fullName = moduleMap.fullName,\n                uniques = {},\n                manager = {\n                    //Use a wait ID because some entries are anon\n                    //async require calls.\n                    waitId: name || reqWaitIdPrefix + (waitIdCounter++),\n                    depCount: 0,\n                    depMax: 0,\n                    prefix: moduleMap.prefix,\n                    name: name,\n                    fullName: fullName,\n                    deps: {},\n                    depArray: depArray,\n                    callback: callback,\n                    onDep: function (depName, value) {\n                        if (!(depName in manager.deps)) {\n                            manager.deps[depName] = value;\n                            manager.depCount += 1;\n                            if (manager.depCount === manager.depMax) {\n                                //All done, execute!\n                                execManager(manager);\n                            }\n                        }\n                    }\n                },\n                i, depArg, depName, cjsMod;\n\n            if (fullName) {\n                //If module already defined for context, or already loaded,\n                //then leave. Also leave if jQuery is registering but it does\n                //not match the desired version number in the config.\n                if (fullName in defined || loaded[fullName] === true ||\n                    (fullName === \"jquery\" && config.jQuery &&\n                     config.jQuery !== callback().fn.jquery)) {\n                    return;\n                }\n\n                //Set specified/loaded here for modules that are also loaded\n                //as part of a layer, where onScriptLoad is not fired\n                //for those cases. Do this after the inline define and\n                //dependency tracing is done.\n                specified[fullName] = true;\n                loaded[fullName] = true;\n\n                //If module is jQuery set up delaying its dom ready listeners.\n                if (fullName === \"jquery\" && callback) {\n                    jQueryCheck(callback());\n                }\n            }\n\n            //Add the dependencies to the deps field, and register for callbacks\n            //on the dependencies.\n            for (i = 0; i < depArray.length; i++) {\n                depArg = depArray[i];\n                //There could be cases like in IE, where a trailing comma will\n                //introduce a null dependency, so only treat a real dependency\n                //value as a dependency.\n                if (depArg) {\n                    //Split the dependency name into plugin and name parts\n                    depArg = makeModuleMap(depArg, (name ? moduleMap : relModuleMap));\n                    depName = depArg.fullName;\n\n                    //Fix the name in depArray to be just the name, since\n                    //that is how it will be called back later.\n                    depArray[i] = depName;\n\n                    //Fast path CommonJS standard dependencies.\n                    if (depName === \"require\") {\n                        manager.deps[depName] = makeRequire(moduleMap);\n                    } else if (depName === \"exports\") {\n                        //CommonJS module spec 1.1\n                        manager.deps[depName] = defined[fullName] = {};\n                        manager.usingExports = true;\n                    } else if (depName === \"module\") {\n                        //CommonJS module spec 1.1\n                        manager.cjsModule = cjsMod = manager.deps[depName] = {\n                            id: name,\n                            uri: name ? context.nameToUrl(name, null, relModuleMap) : undefined,\n                            exports: defined[fullName]\n                        };\n                        cjsMod.setExports = makeSetExports(cjsMod);\n                    } else if (depName in defined && !(depName in waiting)) {\n                        //Module already defined, no need to wait for it.\n                        manager.deps[depName] = defined[depName];\n                    } else if (!uniques[depName]) {\n\n                        //A dynamic dependency.\n                        manager.depMax += 1;\n\n                        queueDependency(depArg);\n\n                        //Register to get notification when dependency loads.\n                        (managerCallbacks[depName] ||\n                        (managerCallbacks[depName] = [])).push(manager);\n\n                        uniques[depName] = true;\n                    }\n                }\n            }\n\n            //Do not bother tracking the manager if it is all done.\n            if (manager.depCount === manager.depMax) {\n                //All done, execute!\n                execManager(manager);\n            } else {\n                waiting[manager.waitId] = manager;\n                waitAry.push(manager);\n                context.waitCount += 1;\n            }\n        }\n\n        /**\n         * Convenience method to call main for a define call that was put on\n         * hold in the defQueue.\n         */\n        function callDefMain(args) {\n            main.apply(null, args);\n            //Mark the module loaded. Must do it here in addition\n            //to doing it in define in case a script does\n            //not call define\n            loaded[args[0]] = true;\n        }\n\n        /**\n         * jQuery 1.4.3+ supports ways to hold off calling\n         * calling jQuery ready callbacks until all scripts are loaded. Be sure\n         * to track it if the capability exists.. Also, since jQuery 1.4.3 does\n         * not register as a module, need to do some global inference checking.\n         * Even if it does register as a module, not guaranteed to be the precise\n         * name of the global. If a jQuery is tracked for this context, then go\n         * ahead and register it as a module too, if not already in process.\n         */\n        jQueryCheck = function (jqCandidate) {\n            if (!context.jQuery) {\n                var $ = jqCandidate || (typeof jQuery !== \"undefined\" ? jQuery : null);\n\n                if ($) {\n                    //If a specific version of jQuery is wanted, make sure to only\n                    //use this jQuery if it matches.\n                    if (config.jQuery && $.fn.jquery !== config.jQuery) {\n                        return;\n                    }\n\n                    if (\"holdReady\" in $ || \"readyWait\" in $) {\n                        context.jQuery = $;\n\n                        //Manually create a \"jquery\" module entry if not one already\n                        //or in process. Note this could trigger an attempt at\n                        //a second jQuery registration, but does no harm since\n                        //the first one wins, and it is the same value anyway.\n                        callDefMain([\"jquery\", [], function () {\n                            return jQuery;\n                        }]);\n\n                        //Ask jQuery to hold DOM ready callbacks.\n                        if (context.scriptCount) {\n                            jQueryHoldReady($, true);\n                            context.jQueryIncremented = true;\n                        }\n                    }\n                }\n            }\n        };\n\n        function forceExec(manager, traced) {\n            if (manager.isDone) {\n                return undefined;\n            }\n\n            var fullName = manager.fullName,\n                depArray = manager.depArray,\n                depName, i;\n            if (fullName) {\n                if (traced[fullName]) {\n                    return defined[fullName];\n                }\n\n                traced[fullName] = true;\n            }\n\n            //forceExec all of its dependencies.\n            for (i = 0; i < depArray.length; i++) {\n                //Some array members may be null, like if a trailing comma\n                //IE, so do the explicit [i] access and check if it has a value.\n                depName = depArray[i];\n                if (depName) {\n                    if (!manager.deps[depName] && waiting[depName]) {\n                        manager.onDep(depName, forceExec(waiting[depName], traced));\n                    }\n                }\n            }\n\n            return fullName ? defined[fullName] : undefined;\n        }\n\n        /**\n         * Checks if all modules for a context are loaded, and if so, evaluates the\n         * new ones in right dependency order.\n         *\n         * @private\n         */\n        function checkLoaded() {\n            var waitInterval = config.waitSeconds * 1000,\n                //It is possible to disable the wait interval by using waitSeconds of 0.\n                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),\n                noLoads = \"\", hasLoadedProp = false, stillLoading = false, prop,\n                err, manager;\n\n            //If there are items still in the paused queue processing wait.\n            //This is particularly important in the sync case where each paused\n            //item is processed right away but there may be more waiting.\n            if (context.pausedCount > 0) {\n                return undefined;\n            }\n\n            //Determine if priority loading is done. If so clear the priority. If\n            //not, then do not check\n            if (config.priorityWait) {\n                if (isPriorityDone()) {\n                    //Call resume, since it could have\n                    //some waiting dependencies to trace.\n                    resume();\n                } else {\n                    return undefined;\n                }\n            }\n\n            //See if anything is still in flight.\n            for (prop in loaded) {\n                if (!(prop in empty)) {\n                    hasLoadedProp = true;\n                    if (!loaded[prop]) {\n                        if (expired) {\n                            noLoads += prop + \" \";\n                        } else {\n                            stillLoading = true;\n                            break;\n                        }\n                    }\n                }\n            }\n\n            //Check for exit conditions.\n            if (!hasLoadedProp && !context.waitCount) {\n                //If the loaded object had no items, then the rest of\n                //the work below does not need to be done.\n                return undefined;\n            }\n            if (expired && noLoads) {\n                //If wait time expired, throw error of unloaded modules.\n                err = makeError(\"timeout\", \"Load timeout for modules: \" + noLoads);\n                err.requireType = \"timeout\";\n                err.requireModules = noLoads;\n                return req.onError(err);\n            }\n            if (stillLoading || context.scriptCount) {\n                //Something is still waiting to load. Wait for it, but only\n                //if a timeout is not already in effect.\n                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {\n                    checkLoadedTimeoutId = setTimeout(function () {\n                        checkLoadedTimeoutId = 0;\n                        checkLoaded();\n                    }, 50);\n                }\n                return undefined;\n            }\n\n            //If still have items in the waiting cue, but all modules have\n            //been loaded, then it means there are some circular dependencies\n            //that need to be broken.\n            //However, as a waiting thing is fired, then it can add items to\n            //the waiting cue, and those items should not be fired yet, so\n            //make sure to redo the checkLoaded call after breaking a single\n            //cycle, if nothing else loaded then this logic will pick it up\n            //again.\n            if (context.waitCount) {\n                //Cycle through the waitAry, and call items in sequence.\n                for (i = 0; (manager = waitAry[i]); i++) {\n                    forceExec(manager, {});\n                }\n\n                //Only allow this recursion to a certain depth. Only\n                //triggered by errors in calling a module in which its\n                //modules waiting on it cannot finish loading, or some circular\n                //dependencies that then may add more dependencies.\n                //The value of 5 is a bit arbitrary. Hopefully just one extra\n                //pass, or two for the case of circular dependencies generating\n                //more work that gets resolved in the sync node case.\n                if (checkLoadedDepth < 5) {\n                    checkLoadedDepth += 1;\n                    checkLoaded();\n                }\n            }\n\n            checkLoadedDepth = 0;\n\n            //Check for DOM ready, and nothing is waiting across contexts.\n            req.checkReadyState();\n\n            return undefined;\n        }\n\n        function callPlugin(pluginName, dep) {\n            var name = dep.name,\n                fullName = dep.fullName,\n                load;\n\n            //Do not bother if plugin is already defined or being loaded.\n            if (fullName in defined || fullName in loaded) {\n                return;\n            }\n\n            if (!plugins[pluginName]) {\n                plugins[pluginName] = defined[pluginName];\n            }\n\n            //Only set loaded to false for tracking if it has not already been set.\n            if (!loaded[fullName]) {\n                loaded[fullName] = false;\n            }\n\n            load = function (ret) {\n                //Allow the build process to register plugin-loaded dependencies.\n                if (req.onPluginLoad) {\n                    req.onPluginLoad(context, pluginName, name, ret);\n                }\n\n                execManager({\n                    prefix: dep.prefix,\n                    name: dep.name,\n                    fullName: dep.fullName,\n                    callback: function () {\n                        return ret;\n                    }\n                });\n                loaded[fullName] = true;\n            };\n\n            //Allow plugins to load other code without having to know the\n            //context or how to \"complete\" the load.\n            load.fromText = function (moduleName, text) {\n                /*jslint evil: true */\n                var hasInteractive = useInteractive;\n\n                //Indicate a the module is in process of loading.\n                context.loaded[moduleName] = false;\n                context.scriptCount += 1;\n\n                //Turn off interactive script matching for IE for any define\n                //calls in the text, then turn it back on at the end.\n                if (hasInteractive) {\n                    useInteractive = false;\n                }\n\n                req.exec(text);\n\n                if (hasInteractive) {\n                    useInteractive = true;\n                }\n\n                //Support anonymous modules.\n                context.completeLoad(moduleName);\n            };\n\n            //Use parentName here since the plugin's name is not reliable,\n            //could be some weird string with no path that actually wants to\n            //reference the parentName's path.\n            plugins[pluginName].load(name, makeRequire(dep.parentMap, true), load, config);\n        }\n\n        function loadPaused(dep) {\n            //Renormalize dependency if its name was waiting on a plugin\n            //to load, which as since loaded.\n            if (dep.prefix && dep.name && dep.name.indexOf('__$p') === 0 && defined[dep.prefix]) {\n                dep = makeModuleMap(dep.originalName, dep.parentMap);\n            }\n\n            var pluginName = dep.prefix,\n                fullName = dep.fullName,\n                urlFetched = context.urlFetched;\n\n            //Do not bother if the dependency has already been specified.\n            if (specified[fullName] || loaded[fullName]) {\n                return;\n            } else {\n                specified[fullName] = true;\n            }\n\n            if (pluginName) {\n                //If plugin not loaded, wait for it.\n                //set up callback list. if no list, then register\n                //managerCallback for that plugin.\n                if (defined[pluginName]) {\n                    callPlugin(pluginName, dep);\n                } else {\n                    if (!pluginsQueue[pluginName]) {\n                        pluginsQueue[pluginName] = [];\n                        (managerCallbacks[pluginName] ||\n                        (managerCallbacks[pluginName] = [])).push({\n                            onDep: function (name, value) {\n                                if (name === pluginName) {\n                                    var i, oldModuleMap, ary = pluginsQueue[pluginName];\n\n                                    //Now update all queued plugin actions.\n                                    for (i = 0; i < ary.length; i++) {\n                                        oldModuleMap = ary[i];\n                                        //Update the moduleMap since the\n                                        //module name may be normalized\n                                        //differently now.\n                                        callPlugin(pluginName,\n                                                   makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap));\n                                    }\n                                    delete pluginsQueue[pluginName];\n                                }\n                            }\n                        });\n                    }\n                    pluginsQueue[pluginName].push(dep);\n                }\n            } else {\n                if (!urlFetched[dep.url]) {\n                    req.load(context, fullName, dep.url);\n                    urlFetched[dep.url] = true;\n                }\n            }\n        }\n\n        /**\n         * Resumes tracing of dependencies and then checks if everything is loaded.\n         */\n        resume = function () {\n            var args, i, p;\n\n            resumeDepth += 1;\n\n            if (context.scriptCount <= 0) {\n                //Synchronous envs will push the number below zero with the\n                //decrement above, be sure to set it back to zero for good measure.\n                //require() calls that also do not end up loading scripts could\n                //push the number negative too.\n                context.scriptCount = 0;\n            }\n\n            //Make sure any remaining defQueue items get properly processed.\n            while (defQueue.length) {\n                args = defQueue.shift();\n                if (args[0] === null) {\n                    return req.onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));\n                } else {\n                    callDefMain(args);\n                }\n            }\n\n            //Skip the resume of paused dependencies\n            //if current context is in priority wait.\n            if (!config.priorityWait || isPriorityDone()) {\n                while (context.paused.length) {\n                    p = context.paused;\n                    context.pausedCount += p.length;\n                    //Reset paused list\n                    context.paused = [];\n\n                    for (i = 0; (args = p[i]); i++) {\n                        loadPaused(args);\n                    }\n                    //Move the start time for timeout forward.\n                    context.startTime = (new Date()).getTime();\n                    context.pausedCount -= p.length;\n                }\n            }\n\n            //Only check if loaded when resume depth is 1. It is likely that\n            //it is only greater than 1 in sync environments where a factory\n            //function also then calls the callback-style require. In those\n            //cases, the checkLoaded should not occur until the resume\n            //depth is back at the top level.\n            if (resumeDepth === 1) {\n                checkLoaded();\n            }\n\n            resumeDepth -= 1;\n\n            return undefined;\n        };\n\n        //Define the context object. Many of these fields are on here\n        //just to make debugging easier.\n        context = {\n            contextName: contextName,\n            config: config,\n            defQueue: defQueue,\n            waiting: waiting,\n            waitCount: 0,\n            specified: specified,\n            loaded: loaded,\n            urlMap: urlMap,\n            scriptCount: 0,\n            urlFetched: {},\n            defined: defined,\n            paused: [],\n            pausedCount: 0,\n            plugins: plugins,\n            managerCallbacks: managerCallbacks,\n            makeModuleMap: makeModuleMap,\n            normalize: normalize,\n            /**\n             * Set a configuration for the context.\n             * @param {Object} cfg config object to integrate.\n             */\n            configure: function (cfg) {\n                var paths, prop, packages, pkgs, packagePaths, requireWait;\n\n                //Make sure the baseUrl ends in a slash.\n                if (cfg.baseUrl) {\n                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== \"/\") {\n                        cfg.baseUrl += \"/\";\n                    }\n                }\n\n                //Save off the paths and packages since they require special processing,\n                //they are additive.\n                paths = config.paths;\n                packages = config.packages;\n                pkgs = config.pkgs;\n\n                //Mix in the config values, favoring the new values over\n                //existing ones in context.config.\n                mixin(config, cfg, true);\n\n                //Adjust paths if necessary.\n                if (cfg.paths) {\n                    for (prop in cfg.paths) {\n                        if (!(prop in empty)) {\n                            paths[prop] = cfg.paths[prop];\n                        }\n                    }\n                    config.paths = paths;\n                }\n\n                packagePaths = cfg.packagePaths;\n                if (packagePaths || cfg.packages) {\n                    //Convert packagePaths into a packages config.\n                    if (packagePaths) {\n                        for (prop in packagePaths) {\n                            if (!(prop in empty)) {\n                                configurePackageDir(pkgs, packagePaths[prop], prop);\n                            }\n                        }\n                    }\n\n                    //Adjust packages if necessary.\n                    if (cfg.packages) {\n                        configurePackageDir(pkgs, cfg.packages);\n                    }\n\n                    //Done with modifications, assing packages back to context config\n                    config.pkgs = pkgs;\n                }\n\n                //If priority loading is in effect, trigger the loads now\n                if (cfg.priority) {\n                    //Hold on to requireWait value, and reset it after done\n                    requireWait = context.requireWait;\n\n                    //Allow tracing some require calls to allow the fetching\n                    //of the priority config.\n                    context.requireWait = false;\n\n                    //But first, call resume to register any defined modules that may\n                    //be in a data-main built file before the priority config\n                    //call. Also grab any waiting define calls for this context.\n                    context.takeGlobalQueue();\n                    resume();\n\n                    context.require(cfg.priority);\n\n                    //Trigger a resume right away, for the case when\n                    //the script with the priority load is done as part\n                    //of a data-main call. In that case the normal resume\n                    //call will not happen because the scriptCount will be\n                    //at 1, since the script for data-main is being processed.\n                    resume();\n\n                    //Restore previous state.\n                    context.requireWait = requireWait;\n                    config.priorityWait = cfg.priority;\n                }\n\n                //If a deps array or a config callback is specified, then call\n                //require with those args. This is useful when require is defined as a\n                //config object before require.js is loaded.\n                if (cfg.deps || cfg.callback) {\n                    context.require(cfg.deps || [], cfg.callback);\n                }\n\n                //Set up ready callback, if asked. Useful when require is defined as a\n                //config object before require.js is loaded.\n                if (cfg.ready) {\n                    req.ready(cfg.ready);\n                }\n            },\n\n            requireDefined: function (moduleName, relModuleMap) {\n                return makeModuleMap(moduleName, relModuleMap).fullName in defined;\n            },\n\n            requireSpecified: function (moduleName, relModuleMap) {\n                return makeModuleMap(moduleName, relModuleMap).fullName in specified;\n            },\n\n            require: function (deps, callback, relModuleMap) {\n                var moduleName, fullName, moduleMap;\n                if (typeof deps === \"string\") {\n                    //Synchronous access to one module. If require.get is\n                    //available (as in the Node adapter), prefer that.\n                    //In this case deps is the moduleName and callback is\n                    //the relModuleMap\n                    if (req.get) {\n                        return req.get(context, deps, callback);\n                    }\n\n                    //Just return the module wanted. In this scenario, the\n                    //second arg (if passed) is just the relModuleMap.\n                    moduleName = deps;\n                    relModuleMap = callback;\n\n                    //Normalize module name, if it contains . or ..\n                    moduleMap = makeModuleMap(moduleName, relModuleMap);\n                    fullName = moduleMap.fullName;\n\n                    if (!(fullName in defined)) {\n                        return req.onError(makeError(\"notloaded\", \"Module name '\" +\n                                    moduleMap.fullName +\n                                    \"' has not been loaded yet for context: \" +\n                                    contextName));\n                    }\n                    return defined[fullName];\n                }\n\n                main(null, deps, callback, relModuleMap);\n\n                //If the require call does not trigger anything new to load,\n                //then resume the dependency processing.\n                if (!context.requireWait) {\n                    while (!context.scriptCount && context.paused.length) {\n                        //For built layers, there can be some defined\n                        //modules waiting for intake into the context,\n                        //in particular module plugins. Take them.\n                        context.takeGlobalQueue();\n                        resume();\n                    }\n                }\n                return context.require;\n            },\n\n            /**\n             * Internal method to transfer globalQueue items to this context's\n             * defQueue.\n             */\n            takeGlobalQueue: function () {\n                //Push all the globalDefQueue items into the context's defQueue\n                if (globalDefQueue.length) {\n                    //Array splice in the values since the context code has a\n                    //local var ref to defQueue, so cannot just reassign the one\n                    //on context.\n                    apsp.apply(context.defQueue,\n                               [context.defQueue.length - 1, 0].concat(globalDefQueue));\n                    globalDefQueue = [];\n                }\n            },\n\n            /**\n             * Internal method used by environment adapters to complete a load event.\n             * A load event could be a script load or just a load pass from a synchronous\n             * load call.\n             * @param {String} moduleName the name of the module to potentially complete.\n             */\n            completeLoad: function (moduleName) {\n                var args;\n\n                context.takeGlobalQueue();\n\n                while (defQueue.length) {\n                    args = defQueue.shift();\n\n                    if (args[0] === null) {\n                        args[0] = moduleName;\n                        break;\n                    } else if (args[0] === moduleName) {\n                        //Found matching define call for this script!\n                        break;\n                    } else {\n                        //Some other named define call, most likely the result\n                        //of a build layer that included many define calls.\n                        callDefMain(args);\n                        args = null;\n                    }\n                }\n                if (args) {\n                    callDefMain(args);\n                } else {\n                    //A script that does not call define(), so just simulate\n                    //the call for it. Special exception for jQuery dynamic load.\n                    callDefMain([moduleName, [],\n                                moduleName === \"jquery\" && typeof jQuery !== \"undefined\" ?\n                                function () {\n                                    return jQuery;\n                                } : null]);\n                }\n\n                //Mark the script as loaded. Note that this can be different from a\n                //moduleName that maps to a define call. This line is important\n                //for traditional browser scripts.\n                loaded[moduleName] = true;\n\n                //If a global jQuery is defined, check for it. Need to do it here\n                //instead of main() since stock jQuery does not register as\n                //a module via define.\n                jQueryCheck();\n\n                //Doing this scriptCount decrement branching because sync envs\n                //need to decrement after resume, otherwise it looks like\n                //loading is complete after the first dependency is fetched.\n                //For browsers, it works fine to decrement after, but it means\n                //the checkLoaded setTimeout 50 ms cost is taken. To avoid\n                //that cost, decrement beforehand.\n                if (req.isAsync) {\n                    context.scriptCount -= 1;\n                }\n                resume();\n                if (!req.isAsync) {\n                    context.scriptCount -= 1;\n                }\n            },\n\n            /**\n             * Converts a module name + .extension into an URL path.\n             * *Requires* the use of a module name. It does not support using\n             * plain URLs like nameToUrl.\n             */\n            toUrl: function (moduleNamePlusExt, relModuleMap) {\n                var index = moduleNamePlusExt.lastIndexOf(\".\"),\n                    ext = null;\n\n                if (index !== -1) {\n                    ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);\n                    moduleNamePlusExt = moduleNamePlusExt.substring(0, index);\n                }\n\n                return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap);\n            },\n\n            /**\n             * Converts a module name to a file path. Supports cases where\n             * moduleName may actually be just an URL.\n             */\n            nameToUrl: function (moduleName, ext, relModuleMap) {\n                var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url,\n                    config = context.config;\n\n                //Normalize module name if have a base relative module name to work from.\n                moduleName = normalize(moduleName, relModuleMap && relModuleMap.fullName);\n\n                //If a colon is in the URL, it indicates a protocol is used and it is just\n                //an URL to a file, or if it starts with a slash or ends with .js, it is just a plain file.\n                //The slash is important for protocol-less URLs as well as full paths.\n                if (req.jsExtRegExp.test(moduleName)) {\n                    //Just a plain path, not module name lookup, so just return it.\n                    //Add extension if it is included. This is a bit wonky, only non-.js things pass\n                    //an extension, this method probably needs to be reworked.\n                    url = moduleName + (ext ? ext : \"\");\n                } else {\n                    //A module that needs to be converted to a path.\n                    paths = config.paths;\n                    pkgs = config.pkgs;\n\n                    syms = moduleName.split(\"/\");\n                    //For each module name segment, see if there is a path\n                    //registered for it. Start with most specific name\n                    //and work up from it.\n                    for (i = syms.length; i > 0; i--) {\n                        parentModule = syms.slice(0, i).join(\"/\");\n                        if (paths[parentModule]) {\n                            syms.splice(0, i, paths[parentModule]);\n                            break;\n                        } else if ((pkg = pkgs[parentModule])) {\n                            //If module name is just the package name, then looking\n                            //for the main module.\n                            if (moduleName === pkg.name) {\n                                pkgPath = pkg.location + '/' + pkg.main;\n                            } else {\n                                pkgPath = pkg.location;\n                            }\n                            syms.splice(0, i, pkgPath);\n                            break;\n                        }\n                    }\n\n                    //Join the path parts together, then figure out if baseUrl is needed.\n                    url = syms.join(\"/\") + (ext || \".js\");\n                    url = (url.charAt(0) === '/' || url.match(/^\\w+:/) ? \"\" : config.baseUrl) + url;\n                }\n\n                return config.urlArgs ? url +\n                                        ((url.indexOf('?') === -1 ? '?' : '&') +\n                                         config.urlArgs) : url;\n            }\n        };\n\n        //Make these visible on the context so can be called at the very\n        //end of the file to bootstrap\n        context.jQueryCheck = jQueryCheck;\n        context.resume = resume;\n\n        return context;\n    }\n\n    /**\n     * Main entry point.\n     *\n     * If the only argument to require is a string, then the module that\n     * is represented by that string is fetched for the appropriate context.\n     *\n     * If the first argument is an array, then it will be treated as an array\n     * of dependency string names to fetch. An optional function callback can\n     * be specified to execute when all of those dependencies are available.\n     *\n     * Make a local req variable to help Caja compliance (it assumes things\n     * on a require that are not standardized), and to give a short\n     * name for minification/local scope use.\n     */\n    req = requirejs = function (deps, callback) {\n\n        //Find the right context, use default\n        var contextName = defContextName,\n            context, config;\n\n        // Determine if have config object in the call.\n        if (!isArray(deps) && typeof deps !== \"string\") {\n            // deps is a config object\n            config = deps;\n            if (isArray(callback)) {\n                // Adjust args if there are dependencies\n                deps = callback;\n                callback = arguments[2];\n            } else {\n                deps = [];\n            }\n        }\n\n        if (config && config.context) {\n            contextName = config.context;\n        }\n\n        context = contexts[contextName] ||\n                  (contexts[contextName] = newContext(contextName));\n\n        if (config) {\n            context.configure(config);\n        }\n\n        return context.require(deps, callback);\n    };\n\n    /**\n     * Support require.config() to make it easier to cooperate with other\n     * AMD loaders on globally agreed names.\n     */\n    req.config = function (config) {\n        return req(config);\n    };\n\n    /**\n     * Export require as a global, but only if it does not already exist.\n     */\n    if (typeof require === \"undefined\") {\n        require = req;\n    }\n\n    /**\n     * Global require.toUrl(), to match global require, mostly useful\n     * for debugging/work in the global space.\n     */\n    req.toUrl = function (moduleNamePlusExt) {\n        return contexts[defContextName].toUrl(moduleNamePlusExt);\n    };\n\n    req.version = version;\n    req.isArray = isArray;\n    req.isFunction = isFunction;\n    req.mixin = mixin;\n    //Used to filter out dependencies that are already paths.\n    req.jsExtRegExp = /^\\/|:|\\?|\\.js$/;\n    s = req.s = {\n        contexts: contexts,\n        //Stores a list of URLs that should not get async script tag treatment.\n        skipAsync: {},\n        isPageLoaded: !isBrowser,\n        readyCalls: []\n    };\n\n    req.isAsync = req.isBrowser = isBrowser;\n    if (isBrowser) {\n        head = s.head = document.getElementsByTagName(\"head\")[0];\n        //If BASE tag is in play, using appendChild is a problem for IE6.\n        //When that browser dies, this can be removed. Details in this jQuery bug:\n        //http://dev.jquery.com/ticket/2709\n        baseElement = document.getElementsByTagName(\"base\")[0];\n        if (baseElement) {\n            head = s.head = baseElement.parentNode;\n        }\n    }\n\n    /**\n     * Any errors that require explicitly generates will be passed to this\n     * function. Intercept/override it if you want custom error handling.\n     * @param {Error} err the error object.\n     */\n    req.onError = function (err) {\n        throw err;\n    };\n\n    /**\n     * Does the request to load a module for the browser case.\n     * Make this a separate function to allow other environments\n     * to override it.\n     *\n     * @param {Object} context the require context to find state.\n     * @param {String} moduleName the name of the module.\n     * @param {Object} url the URL to the module.\n     */\n    req.load = function (context, moduleName, url) {\n        var loaded = context.loaded;\n\n        isDone = false;\n\n        //Only set loaded to false for tracking if it has not already been set.\n        if (!loaded[moduleName]) {\n            loaded[moduleName] = false;\n        }\n\n        context.scriptCount += 1;\n        req.attach(url, context, moduleName);\n\n        //If tracking a jQuery, then make sure its ready callbacks\n        //are put on hold to prevent its ready callbacks from\n        //triggering too soon.\n        if (context.jQuery && !context.jQueryIncremented) {\n            jQueryHoldReady(context.jQuery, true);\n            context.jQueryIncremented = true;\n        }\n    };\n\n    function getInteractiveScript() {\n        var scripts, i, script;\n        if (interactiveScript && interactiveScript.readyState === 'interactive') {\n            return interactiveScript;\n        }\n\n        scripts = document.getElementsByTagName('script');\n        for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) {\n            if (script.readyState === 'interactive') {\n                return (interactiveScript = script);\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * The function that handles definitions of modules. Differs from\n     * require() in that a string for the module should be the first argument,\n     * and the function to execute after dependencies are loaded should\n     * return a value to define the module corresponding to the first argument's\n     * name.\n     */\n    define = req.def = function (name, deps, callback) {\n        var node, context;\n\n        //Allow for anonymous functions\n        if (typeof name !== 'string') {\n            //Adjust args appropriately\n            callback = deps;\n            deps = name;\n            name = null;\n        }\n\n        //This module may not have dependencies\n        if (!req.isArray(deps)) {\n            callback = deps;\n            deps = [];\n        }\n\n        //If no name, and callback is a function, then figure out if it a\n        //CommonJS thing with dependencies.\n        if (!name && !deps.length && req.isFunction(callback)) {\n            //Remove comments from the callback string,\n            //look for require calls, and pull them into the dependencies,\n            //but only if there are function args.\n            if (callback.length) {\n                callback\n                    .toString()\n                    .replace(commentRegExp, \"\")\n                    .replace(cjsRequireRegExp, function (match, dep) {\n                        deps.push(dep);\n                    });\n\n                //May be a CommonJS thing even without require calls, but still\n                //could use exports, and module. Avoid doing exports and module\n                //work though if it just needs require.\n                //REQUIRES the function to expect the CommonJS variables in the\n                //order listed below.\n                deps = (callback.length === 1 ? [\"require\"] : [\"require\", \"exports\", \"module\"]).concat(deps);\n            }\n        }\n\n        //If in IE 6-8 and hit an anonymous define() call, do the interactive\n        //work.\n        if (useInteractive) {\n            node = currentlyAddingScript || getInteractiveScript();\n            if (node) {\n                if (!name) {\n                    name = node.getAttribute(\"data-requiremodule\");\n                }\n                context = contexts[node.getAttribute(\"data-requirecontext\")];\n            }\n        }\n\n        //Always save off evaluating the def call until the script onload handler.\n        //This allows multiple modules to be in a file without prematurely\n        //tracing dependencies, and allows for anonymous module support,\n        //where the module name is not known until the script onload event\n        //occurs. If no context, use the global queue, and get it processed\n        //in the onscript load callback.\n        (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);\n\n        return undefined;\n    };\n\n    define.amd = {\n        multiversion: true,\n        plugins: true,\n        jQuery: true\n    };\n\n    /**\n     * Executes the text. Normally just uses eval, but can be modified\n     * to use a more environment specific call.\n     * @param {String} text the text to execute/evaluate.\n     */\n    req.exec = function (text) {\n        return eval(text);\n    };\n\n    /**\n     * Executes a module callack function. Broken out as a separate function\n     * solely to allow the build system to sequence the files in the built\n     * layer in the right sequence.\n     *\n     * @private\n     */\n    req.execCb = function (name, callback, args, exports) {\n        return callback.apply(exports, args);\n    };\n\n    /**\n     * callback for script loads, used to check status of loading.\n     *\n     * @param {Event} evt the event from the browser for the script\n     * that was loaded.\n     *\n     * @private\n     */\n    req.onScriptLoad = function (evt) {\n        //Using currentTarget instead of target for Firefox 2.0's sake. Not\n        //all old browsers will be supported, but this one was easy enough\n        //to support and still makes sense.\n        var node = evt.currentTarget || evt.srcElement, contextName, moduleName,\n            context;\n\n        if (evt.type === \"load\" || readyRegExp.test(node.readyState)) {\n            //Reset interactive script so a script node is not held onto for\n            //to long.\n            interactiveScript = null;\n\n            //Pull out the name of the module and the context.\n            contextName = node.getAttribute(\"data-requirecontext\");\n            moduleName = node.getAttribute(\"data-requiremodule\");\n            context = contexts[contextName];\n\n            contexts[contextName].completeLoad(moduleName);\n\n            //Clean up script binding. Favor detachEvent because of IE9\n            //issue, see attachEvent/addEventListener comment elsewhere\n            //in this file.\n            if (node.detachEvent && !isOpera) {\n                //Probably IE. If not it will throw an error, which will be\n                //useful to know.\n                node.detachEvent(\"onreadystatechange\", req.onScriptLoad);\n            } else {\n                node.removeEventListener(\"load\", req.onScriptLoad, false);\n            }\n        }\n    };\n\n    /**\n     * Attaches the script represented by the URL to the current\n     * environment. Right now only supports browser loading,\n     * but can be redefined in other environments to do the right thing.\n     * @param {String} url the url of the script to attach.\n     * @param {Object} context the context that wants the script.\n     * @param {moduleName} the name of the module that is associated with the script.\n     * @param {Function} [callback] optional callback, defaults to require.onScriptLoad\n     * @param {String} [type] optional type, defaults to text/javascript\n     */\n    req.attach = function (url, context, moduleName, callback, type) {\n        var node, loaded;\n        if (isBrowser) {\n            //In the browser so use a script tag\n            callback = callback || req.onScriptLoad;\n            node = context && context.config && context.config.xhtml ?\n                    document.createElementNS(\"http://www.w3.org/1999/xhtml\", \"html:script\") :\n                    document.createElement(\"script\");\n            node.type = type || \"text/javascript\";\n            node.charset = \"utf-8\";\n            //Use async so Gecko does not block on executing the script if something\n            //like a long-polling comet tag is being run first. Gecko likes\n            //to evaluate scripts in DOM order, even for dynamic scripts.\n            //It will fetch them async, but only evaluate the contents in DOM\n            //order, so a long-polling script tag can delay execution of scripts\n            //after it. But telling Gecko we expect async gets us the behavior\n            //we want -- execute it whenever it is finished downloading. Only\n            //Helps Firefox 3.6+\n            //Allow some URLs to not be fetched async. Mostly helps the order!\n            //plugin\n            node.async = !s.skipAsync[url];\n\n            if (context) {\n                node.setAttribute(\"data-requirecontext\", context.contextName);\n            }\n            node.setAttribute(\"data-requiremodule\", moduleName);\n\n            //Set up load listener. Test attachEvent first because IE9 has\n            //a subtle issue in its addEventListener and script onload firings\n            //that do not match the behavior of all other browsers with\n            //addEventListener support, which fire the onload event for a\n            //script right after the script execution. See:\n            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution\n            //UNFORTUNATELY Opera implements attachEvent but does not follow the script\n            //script execution mode.\n            if (node.attachEvent && !isOpera) {\n                //Probably IE. IE (at least 6-8) do not fire\n                //script onload right after executing the script, so\n                //we cannot tie the anonymous define call to a name.\n                //However, IE reports the script as being in \"interactive\"\n                //readyState at the time of the define call.\n                useInteractive = true;\n                node.attachEvent(\"onreadystatechange\", callback);\n            } else {\n                node.addEventListener(\"load\", callback, false);\n            }\n            node.src = url;\n\n            //For some cache cases in IE 6-8, the script executes before the end\n            //of the appendChild execution, so to tie an anonymous define\n            //call to the module name (which is stored on the node), hold on\n            //to a reference to this node, but clear after the DOM insertion.\n            currentlyAddingScript = node;\n            if (baseElement) {\n                head.insertBefore(node, baseElement);\n            } else {\n                head.appendChild(node);\n            }\n            currentlyAddingScript = null;\n            return node;\n        } else if (isWebWorker) {\n            //In a web worker, use importScripts. This is not a very\n            //efficient use of importScripts, importScripts will block until\n            //its script is downloaded and evaluated. However, if web workers\n            //are in play, the expectation that a build has been done so that\n            //only one script needs to be loaded anyway. This may need to be\n            //reevaluated if other use cases become common.\n            loaded = context.loaded;\n            loaded[moduleName] = false;\n\n            importScripts(url);\n\n            //Account for anonymous modules\n            context.completeLoad(moduleName);\n        }\n        return null;\n    };\n\n    //Look for a data-main script attribute, which could also adjust the baseUrl.\n    if (isBrowser) {\n        //Figure out baseUrl. Get it from the script tag with require.js in it.\n        scripts = document.getElementsByTagName(\"script\");\n\n        for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) {\n            //Set the \"head\" where we can append children by\n            //using the script's parent.\n            if (!head) {\n                head = script.parentNode;\n            }\n\n            //Look for a data-main attribute to set main script for the page\n            //to load. If it is there, the path to data main becomes the\n            //baseUrl, if it is not already set.\n            if ((dataMain = script.getAttribute('data-main'))) {\n                if (!cfg.baseUrl) {\n                    //Pull off the directory of data-main for use as the\n                    //baseUrl.\n                    src = dataMain.split('/');\n                    mainScript = src.pop();\n                    subPath = src.length ? src.join('/')  + '/' : './';\n\n                    //Set final config.\n                    cfg.baseUrl = subPath;\n                    //Strip off any trailing .js since dataMain is now\n                    //like a module name.\n                    dataMain = mainScript.replace(jsSuffixRegExp, '');\n                }\n\n                //Put the data-main script in the files to load.\n                cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain];\n\n                break;\n            }\n        }\n    }\n\n    //Set baseUrl based on config.\n    s.baseUrl = cfg.baseUrl;\n\n    //****** START page load functionality ****************\n    /**\n     * Sets the page as loaded and triggers check for all modules loaded.\n     */\n    req.pageLoaded = function () {\n        if (!s.isPageLoaded) {\n            s.isPageLoaded = true;\n            if (scrollIntervalId) {\n                clearInterval(scrollIntervalId);\n            }\n\n            //Part of a fix for FF < 3.6 where readyState was not set to\n            //complete so libraries like jQuery that check for readyState\n            //after page load where not getting initialized correctly.\n            //Original approach suggested by Andrea Giammarchi:\n            //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\n            //see other setReadyState reference for the rest of the fix.\n            if (setReadyState) {\n                document.readyState = \"complete\";\n            }\n\n            req.callReady();\n        }\n    };\n\n    //See if there is nothing waiting across contexts, and if not, trigger\n    //callReady.\n    req.checkReadyState = function () {\n        var contexts = s.contexts, prop;\n        for (prop in contexts) {\n            if (!(prop in empty)) {\n                if (contexts[prop].waitCount) {\n                    return;\n                }\n            }\n        }\n        s.isDone = true;\n        req.callReady();\n    };\n\n    /**\n     * Internal function that calls back any ready functions. If you are\n     * integrating RequireJS with another library without require.ready support,\n     * you can define this method to call your page ready code instead.\n     */\n    req.callReady = function () {\n        var callbacks = s.readyCalls, i, callback, contexts, context, prop;\n\n        if (s.isPageLoaded && s.isDone) {\n            if (callbacks.length) {\n                s.readyCalls = [];\n                for (i = 0; (callback = callbacks[i]); i++) {\n                    callback();\n                }\n            }\n\n            //If jQuery with DOM ready delayed, release it now.\n            contexts = s.contexts;\n            for (prop in contexts) {\n                if (!(prop in empty)) {\n                    context = contexts[prop];\n                    if (context.jQueryIncremented) {\n                        jQueryHoldReady(context.jQuery, false);\n                        context.jQueryIncremented = false;\n                    }\n                }\n            }\n        }\n    };\n\n    /**\n     * Registers functions to call when the page is loaded\n     */\n    req.ready = function (callback) {\n        if (s.isPageLoaded && s.isDone) {\n            callback();\n        } else {\n            s.readyCalls.push(callback);\n        }\n        return req;\n    };\n\n    if (isBrowser) {\n        if (document.addEventListener) {\n            //Standards. Hooray! Assumption here that if standards based,\n            //it knows about DOMContentLoaded.\n            document.addEventListener(\"DOMContentLoaded\", req.pageLoaded, false);\n            window.addEventListener(\"load\", req.pageLoaded, false);\n            //Part of FF < 3.6 readystate fix (see setReadyState refs for more info)\n            if (!document.readyState) {\n                setReadyState = true;\n                document.readyState = \"loading\";\n            }\n        } else if (window.attachEvent) {\n            window.attachEvent(\"onload\", req.pageLoaded);\n\n            //DOMContentLoaded approximation, as found by Diego Perini:\n            //http://javascript.nwbox.com/IEContentLoaded/\n            if (self === self.top) {\n                scrollIntervalId = setInterval(function () {\n                    try {\n                        //From this ticket:\n                        //http://bugs.dojotoolkit.org/ticket/11106,\n                        //In IE HTML Application (HTA), such as in a selenium test,\n                        //javascript in the iframe can't see anything outside\n                        //of it, so self===self.top is true, but the iframe is\n                        //not the top window and doScroll will be available\n                        //before document.body is set. Test document.body\n                        //before trying the doScroll trick.\n                        if (document.body) {\n                            document.documentElement.doScroll(\"left\");\n                            req.pageLoaded();\n                        }\n                    } catch (e) {}\n                }, 30);\n            }\n        }\n\n        //Check if document already complete, and if so, just trigger page load\n        //listeners. NOTE: does not work with Firefox before 3.6. To support\n        //those browsers, manually call require.pageLoaded().\n        if (document.readyState === \"complete\") {\n            req.pageLoaded();\n        }\n    }\n    //****** END page load functionality ****************\n\n    //Set up default context. If require was a configuration object, use that as base config.\n    req(cfg);\n\n    //If modules are built into require.js, then need to make sure dependencies are\n    //traced. Use a setTimeout in the browser world, to allow all the modules to register\n    //themselves. In a non-browser env, assume that modules are not built into require.js,\n    //which seems odd to do on the server.\n    if (req.isAsync && typeof setTimeout !== \"undefined\") {\n        ctx = s.contexts[(cfg.context || defContextName)];\n        //Indicate that the script that includes require() is still loading,\n        //so that require()'d dependencies are not traced until the end of the\n        //file is parsed (approximated via the setTimeout call).\n        ctx.requireWait = true;\n        setTimeout(function () {\n            ctx.requireWait = false;\n\n            //Any modules included with the require.js file will be in the\n            //global queue, assign them to this context.\n            ctx.takeGlobalQueue();\n\n            //Allow for jQuery to be loaded/already in the page, and if jQuery 1.4.3,\n            //make sure to hold onto it for readyWait triggering.\n            ctx.jQueryCheck();\n\n            if (!ctx.scriptCount) {\n                ctx.resume();\n            }\n            req.checkReadyState();\n        }, 0);\n    }\n}());\n\n\n    if (env === 'rhino') {\n        /**\n * @license RequireJS rhino Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false */\n/*global require: false, java: false, load: false */\n\n(function () {\n\n    require.load = function (context, moduleName, url) {\n        //isDone is used by require.ready()\n        require.s.isDone = false;\n\n        //Indicate a the module is in process of loading.\n        context.loaded[moduleName] = false;\n        context.scriptCount += 1;\n\n        load(url);\n\n        //Support anonymous modules.\n        context.completeLoad(moduleName);\n    };\n\n}());\n    } else if (env === 'node') {\n        this.requirejsVars = {\n            require: require,\n            define: define,\n            nodeRequire: nodeRequire\n        };\n        require.nodeRequire = nodeRequire;\n\n        /**\n * @license RequireJS node Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint regexp: false, strict: false */\n/*global require: false, define: false, requirejsVars: false, process: false */\n\n/**\n * This adapter assumes that x.js has loaded it and set up\n * some variables. This adapter just allows limited RequireJS\n * usage from within the requirejs directory. The general\n * node adapater is r.js.\n */\n\n(function () {\n    var nodeReq = requirejsVars.nodeRequire,\n        req = requirejsVars.require,\n        def = requirejsVars.define,\n        fs = nodeReq('fs'),\n        path = nodeReq('path'),\n        vm = nodeReq('vm');\n\n    //Supply an implementation that allows synchronous get of a module.\n    req.get = function (context, moduleName, relModuleMap) {\n        if (moduleName === \"require\" || moduleName === \"exports\" || moduleName === \"module\") {\n            req.onError(new Error(\"Explicit require of \" + moduleName + \" is not allowed.\"));\n        }\n\n        var ret,\n            moduleMap = context.makeModuleMap(moduleName, relModuleMap);\n\n        //Normalize module name, if it contains . or ..\n        moduleName = moduleMap.fullName;\n\n        if (moduleName in context.defined) {\n            ret = context.defined[moduleName];\n        } else {\n            if (ret === undefined) {\n                //Try to dynamically fetch it.\n                req.load(context, moduleName, moduleMap.url);\n                //The above call is sync, so can do the next thing safely.\n                ret = context.defined[moduleName];\n            }\n        }\n\n        return ret;\n    };\n\n    //Add wrapper around the code so that it gets the requirejs\n    //API instead of the Node API, and it is done lexically so\n    //that it survives later execution.\n    req.makeNodeWrapper = function (contents) {\n        return '(function (require, define) { ' +\n                contents +\n                '\\n}(requirejsVars.require, requirejsVars.define));';\n    };\n\n    req.load = function (context, moduleName, url) {\n        var contents, err;\n\n        //isDone is used by require.ready()\n        req.s.isDone = false;\n\n        //Indicate a the module is in process of loading.\n        context.loaded[moduleName] = false;\n        context.scriptCount += 1;\n\n        if (path.existsSync(url)) {\n            contents = fs.readFileSync(url, 'utf8');\n\n            contents = req.makeNodeWrapper(contents);\n            try {\n                vm.runInThisContext(contents, fs.realpathSync(url));\n            } catch (e) {\n                err = new Error('Evaluating ' + url + ' as module \"' +\n                                moduleName + '\" failed with error: ' + e);\n                err.originalError = e;\n                err.moduleName = moduleName;\n                err.fileName = url;\n                return req.onError(err);\n            }\n        } else {\n            def(moduleName, function () {\n                try {\n                    return (context.config.nodeRequire || req.nodeRequire)(moduleName);\n                } catch (e) {\n                    err = new Error('Calling node\\'s require(\"' +\n                                        moduleName + '\") failed with error: ' + e);\n                    err.originalError = e;\n                    err.moduleName = moduleName;\n                    return req.onError(err);\n                }\n            });\n        }\n\n        //Support anonymous modules.\n        context.completeLoad(moduleName);\n\n        return undefined;\n    };\n\n    //Override to provide the function wrapper for define/require.\n    req.exec = function (text) {\n        /*jslint evil: true */\n        text = req.makeNodeWrapper(text);\n        return eval(text);\n    };\n}());\n\n    }\n\n    //Support a default file name to execute. Useful for hosted envs\n    //like Joyent where it defaults to a server.js as the only executed\n    //script. But only do it if this is not an optimization run.\n    if (commandOption !== 'o' && (!fileName || !jsSuffixRegExp.test(fileName))) {\n        fileName = 'main.js';\n    }\n\n    /**\n     * Loads the library files that can be used for the optimizer, or for other\n     * tasks.\n     */\n    function loadLib() {\n        /**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false */\n/*global Packages: false, process: false, window: false, navigator: false,\n  document: false, define: false */\n\n/**\n * A plugin that modifies any /env/ path to be the right path based on\n * the host environment. Right now only works for Node, Rhino and browser.\n */\n(function () {\n    var pathRegExp = /(\\/|^)env\\/|\\{env\\}/,\n        env = 'unknown';\n\n    if (typeof Packages !== 'undefined') {\n        env = 'rhino';\n    } else if (typeof process !== 'undefined') {\n        env = 'node';\n    } else if (typeof window !== \"undefined\" && navigator && document) {\n        env = 'browser';\n    }\n\n    define('env', {\n        load: function (name, req, load, config) {\n            //Allow override in the config.\n            if (config.env) {\n                env = config.env;\n            }\n\n            name = name.replace(pathRegExp, function (match, prefix) {\n                if (match.indexOf('{') === -1) {\n                    return prefix + env + '/';\n                } else {\n                    return env;\n                }\n            });\n\n            req([name], function (mod) {\n                load(mod);\n            });\n        }\n    });\n}());\nif(env === 'node') {\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false */\n/*global define: false, process: false */\n\ndefine('node/args', function () {\n    //Do not return the \"node\" or \"r.js\" arguments\n    var args = process.argv.slice(2);\n\n    //Ignore any command option used for rq.js\n    if (args[0] && args[0].indexOf('-' === 0)) {\n        args = args.slice(1);\n    }\n\n    return args;\n});\n\n}\n\nif(env === 'rhino') {\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false */\n/*global define: false, process: false */\n\nvar jsLibRhinoArgs = (typeof rhinoArgs !== 'undefined' && rhinoArgs) || [].concat(Array.prototype.slice.call(arguments, 0));\n\ndefine('rhino/args', function () {\n    var args = jsLibRhinoArgs;\n\n    //Ignore any command option used for rq.js\n    if (args[0] && args[0].indexOf('-' === 0)) {\n        args = args.slice(1);\n    }\n\n    return args;\n});\n\n}\n\nif(env === 'node') {\n/**\n * @license RequireJS Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false */\n/*global define: false, console: false */\n\ndefine('node/load', ['fs'], function (fs) {\n    function load(fileName) {\n        var contents = fs.readFileSync(fileName, 'utf8');\n        process.compile(contents, fileName);\n    }\n\n    return load;\n});\n\n}\n\nif(env === 'rhino') {\n/**\n * @license RequireJS Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false */\n/*global define: false, load: false */\n\ndefine('rhino/load', function () {\n    return load;\n});\n\n}\n\nif(env === 'node') {\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint plusplus: false, octal:false, strict: false */\n/*global define: false, process: false */\n\ndefine('node/file', ['fs', 'path'], function (fs, path) {\n\n    var isWindows = process.platform === 'win32',\n        file;\n\n    function frontSlash(path) {\n        return path.replace(/\\\\/g, '/');\n    }\n\n    function exists(path) {\n        if (isWindows && path.charAt(path.length - 1) === '/' &&\n            path.charAt(path.length - 2) !== ':') {\n            path = path.substring(0, path.length - 1);\n        }\n\n        try {\n            fs.statSync(path);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    function mkDir(dir) {\n        if (!exists(dir)) {\n            fs.mkdirSync(dir, 0777);\n        }\n    }\n\n    function mkFullDir(dir) {\n        var parts = dir.split('/'),\n            currDir = '',\n            first = true;\n\n        parts.forEach(function (part) {\n            //First part may be empty string if path starts with a slash.\n            currDir += part + '/';\n            first = false;\n\n            if (part) {\n                mkDir(currDir);\n            }\n        });\n    }\n\n    file = {\n        backSlashRegExp: /\\\\/g,\n        getLineSeparator: function () {\n            return '/';\n        },\n\n        exists: function (fileName) {\n            return exists(fileName);\n        },\n\n        parent: function (fileName) {\n            var parts = fileName.split('/');\n            parts.pop();\n            return parts.join('/');\n        },\n\n        /**\n         * Gets the absolute file path as a string, normalized\n         * to using front slashes for path separators.\n         * @param {String} fileName\n         */\n        absPath: function (fileName) {\n            return frontSlash(path.normalize(frontSlash(fs.realpathSync(fileName))));\n        },\n\n        normalize: function (fileName) {\n            return frontSlash(path.normalize(fileName));\n        },\n\n        isFile: function (path) {\n            return fs.statSync(path).isFile();\n        },\n\n        isDirectory: function (path) {\n            return fs.statSync(path).isDirectory();\n        },\n\n        getFilteredFileList: function (/*String*/startDir, /*RegExp*/regExpFilters, /*boolean?*/makeUnixPaths) {\n            //summary: Recurses startDir and finds matches to the files that match regExpFilters.include\n            //and do not match regExpFilters.exclude. Or just one regexp can be passed in for regExpFilters,\n            //and it will be treated as the \"include\" case.\n            //Ignores files/directories that start with a period (.).\n            var files = [], topDir, regExpInclude, regExpExclude, dirFileArray,\n                i, stat, filePath, ok, dirFiles, fileName;\n\n            topDir = startDir;\n\n            regExpInclude = regExpFilters.include || regExpFilters;\n            regExpExclude = regExpFilters.exclude || null;\n\n            if (file.exists(topDir)) {\n                dirFileArray = fs.readdirSync(topDir);\n                for (i = 0; i < dirFileArray.length; i++) {\n                    fileName = dirFileArray[i];\n                    filePath = path.join(topDir, fileName);\n                    stat = fs.statSync(filePath);\n                    if (stat.isFile()) {\n                        if (makeUnixPaths) {\n                            //Make sure we have a JS string.\n                            if (filePath.indexOf(\"/\") === -1) {\n                                filePath = frontSlash(filePath);\n                            }\n                        }\n\n                        ok = true;\n                        if (regExpInclude) {\n                            ok = filePath.match(regExpInclude);\n                        }\n                        if (ok && regExpExclude) {\n                            ok = !filePath.match(regExpExclude);\n                        }\n\n                        if (ok && !fileName.match(/^\\./)) {\n                            files.push(filePath);\n                        }\n                    } else if (stat.isDirectory() && !fileName.match(/^\\./)) {\n                        dirFiles = this.getFilteredFileList(filePath, regExpFilters, makeUnixPaths);\n                        files.push.apply(files, dirFiles);\n                    }\n                }\n            }\n\n            return files; //Array\n        },\n\n        copyDir: function (/*String*/srcDir, /*String*/destDir, /*RegExp?*/regExpFilter, /*boolean?*/onlyCopyNew) {\n            //summary: copies files from srcDir to destDir using the regExpFilter to determine if the\n            //file should be copied. Returns a list file name strings of the destinations that were copied.\n            regExpFilter = regExpFilter || /\\w/;\n\n            var fileNames = file.getFilteredFileList(srcDir, regExpFilter, true),\n            copiedFiles = [], i, srcFileName, destFileName;\n\n            for (i = 0; i < fileNames.length; i++) {\n                srcFileName = fileNames[i];\n                destFileName = srcFileName.replace(srcDir, destDir);\n\n                if (file.copyFile(srcFileName, destFileName, onlyCopyNew)) {\n                    copiedFiles.push(destFileName);\n                }\n            }\n\n            return copiedFiles.length ? copiedFiles : null; //Array or null\n        },\n\n        copyFile: function (/*String*/srcFileName, /*String*/destFileName, /*boolean?*/onlyCopyNew) {\n            //summary: copies srcFileName to destFileName. If onlyCopyNew is set, it only copies the file if\n            //srcFileName is newer than destFileName. Returns a boolean indicating if the copy occurred.\n            var parentDir;\n\n            //logger.trace(\"Src filename: \" + srcFileName);\n            //logger.trace(\"Dest filename: \" + destFileName);\n\n            //If onlyCopyNew is true, then compare dates and only copy if the src is newer\n            //than dest.\n            if (onlyCopyNew) {\n                if (file.exists(destFileName) && fs.statSync(destFileName).mtime.getTime() >= fs.statSync(srcFileName).mtime.getTime()) {\n                    return false; //Boolean\n                }\n            }\n\n            //Make sure destination dir exists.\n            parentDir = path.dirname(destFileName);\n            if (!file.exists(parentDir)) {\n                mkFullDir(parentDir);\n            }\n\n            fs.writeFileSync(destFileName, fs.readFileSync(srcFileName, 'binary'), 'binary');\n\n            return true; //Boolean\n        },\n\n        /**\n         * Reads a *text* file.\n         */\n        readFile: function (/*String*/path, /*String?*/encoding) {\n            if (encoding === 'utf-8') {\n                encoding = 'utf8';\n            }\n            if (!encoding) {\n                encoding = 'utf8';\n            }\n\n            var text = fs.readFileSync(path, encoding);\n\n            //Looks like a weird bug in the native node.exe for windows,\n            //at least in 0.5.3, where UTF-8 BOM is being fed back.\n            //May be able to remove this after more node releases.\n            if (isWindows && text.indexOf('\\uFEFF') === 0) {\n                text = text.substring(1, text.length);\n            }\n\n            return text;\n        },\n\n        saveUtf8File: function (/*String*/fileName, /*String*/fileContents) {\n            //summary: saves a *text* file using UTF-8 encoding.\n            file.saveFile(fileName, fileContents, \"utf8\");\n        },\n\n        saveFile: function (/*String*/fileName, /*String*/fileContents, /*String?*/encoding) {\n            //summary: saves a *text* file.\n            var parentDir;\n\n            if (encoding === 'utf-8') {\n                encoding = 'utf8';\n            }\n            if (!encoding) {\n                encoding = 'utf8';\n            }\n\n            //Make sure destination directories exist.\n            parentDir = path.dirname(fileName);\n            if (!file.exists(parentDir)) {\n                mkFullDir(parentDir);\n            }\n\n            fs.writeFileSync(fileName, fileContents, encoding);\n        },\n\n        deleteFile: function (/*String*/fileName) {\n            //summary: deletes a file or directory if it exists.\n            var files, i, stat;\n            if (file.exists(fileName)) {\n                stat = fs.statSync(fileName);\n                if (stat.isDirectory()) {\n                    files = fs.readdirSync(fileName);\n                    for (i = 0; i < files.length; i++) {\n                        this.deleteFile(path.join(fileName, files[i]));\n                    }\n                    fs.rmdirSync(fileName);\n                } else {\n                    fs.unlinkSync(fileName);\n                }\n            }\n        }\n    };\n\n    return file;\n\n});\n\n}\n\nif(env === 'rhino') {\n/**\n * @license RequireJS Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n//Helper functions to deal with file I/O.\n\n/*jslint plusplus: false, strict: false */\n/*global java: false, define: false */\n\ndefine('rhino/file', function () {\n    var file = {\n        backSlashRegExp: /\\\\/g,\n\n        getLineSeparator: function () {\n            return file.lineSeparator;\n        },\n\n        lineSeparator: java.lang.System.getProperty(\"line.separator\"), //Java String\n\n        exists: function (fileName) {\n            return (new java.io.File(fileName)).exists();\n        },\n\n        parent: function (fileName) {\n            return file.absPath((new java.io.File(fileName)).getParentFile());\n        },\n\n        normalize: function (fileName) {\n            return file.absPath(fileName);\n        },\n\n        isFile: function (path) {\n            return (new java.io.File(path)).isFile();\n        },\n\n        isDirectory: function (path) {\n            return (new java.io.File(path)).isDirectory();\n        },\n\n        /**\n         * Gets the absolute file path as a string, normalized\n         * to using front slashes for path separators.\n         * @param {java.io.File||String} file\n         */\n        absPath: function (fileObj) {\n            if (typeof fileObj === \"string\") {\n                fileObj = new java.io.File(fileObj);\n            }\n            return (fileObj.getAbsolutePath() + \"\").replace(file.backSlashRegExp, \"/\");\n        },\n\n        getFilteredFileList: function (/*String*/startDir, /*RegExp*/regExpFilters, /*boolean?*/makeUnixPaths, /*boolean?*/startDirIsJavaObject) {\n            //summary: Recurses startDir and finds matches to the files that match regExpFilters.include\n            //and do not match regExpFilters.exclude. Or just one regexp can be passed in for regExpFilters,\n            //and it will be treated as the \"include\" case.\n            //Ignores files/directories that start with a period (.).\n            var files = [], topDir, regExpInclude, regExpExclude, dirFileArray,\n                i, fileObj, filePath, ok, dirFiles;\n\n            topDir = startDir;\n            if (!startDirIsJavaObject) {\n                topDir = new java.io.File(startDir);\n            }\n\n            regExpInclude = regExpFilters.include || regExpFilters;\n            regExpExclude = regExpFilters.exclude || null;\n\n            if (topDir.exists()) {\n                dirFileArray = topDir.listFiles();\n                for (i = 0; i < dirFileArray.length; i++) {\n                    fileObj = dirFileArray[i];\n                    if (fileObj.isFile()) {\n                        filePath = fileObj.getPath();\n                        if (makeUnixPaths) {\n                            //Make sure we have a JS string.\n                            filePath = String(filePath);\n                            if (filePath.indexOf(\"/\") === -1) {\n                                filePath = filePath.replace(/\\\\/g, \"/\");\n                            }\n                        }\n\n                        ok = true;\n                        if (regExpInclude) {\n                            ok = filePath.match(regExpInclude);\n                        }\n                        if (ok && regExpExclude) {\n                            ok = !filePath.match(regExpExclude);\n                        }\n\n                        if (ok && !fileObj.getName().match(/^\\./)) {\n                            files.push(filePath);\n                        }\n                    } else if (fileObj.isDirectory() && !fileObj.getName().match(/^\\./)) {\n                        dirFiles = this.getFilteredFileList(fileObj, regExpFilters, makeUnixPaths, true);\n                        files.push.apply(files, dirFiles);\n                    }\n                }\n            }\n\n            return files; //Array\n        },\n\n        copyDir: function (/*String*/srcDir, /*String*/destDir, /*RegExp?*/regExpFilter, /*boolean?*/onlyCopyNew) {\n            //summary: copies files from srcDir to destDir using the regExpFilter to determine if the\n            //file should be copied. Returns a list file name strings of the destinations that were copied.\n            regExpFilter = regExpFilter || /\\w/;\n\n            var fileNames = file.getFilteredFileList(srcDir, regExpFilter, true),\n            copiedFiles = [], i, srcFileName, destFileName;\n\n            for (i = 0; i < fileNames.length; i++) {\n                srcFileName = fileNames[i];\n                destFileName = srcFileName.replace(srcDir, destDir);\n\n                if (file.copyFile(srcFileName, destFileName, onlyCopyNew)) {\n                    copiedFiles.push(destFileName);\n                }\n            }\n\n            return copiedFiles.length ? copiedFiles : null; //Array or null\n        },\n\n        copyFile: function (/*String*/srcFileName, /*String*/destFileName, /*boolean?*/onlyCopyNew) {\n            //summary: copies srcFileName to destFileName. If onlyCopyNew is set, it only copies the file if\n            //srcFileName is newer than destFileName. Returns a boolean indicating if the copy occurred.\n            var destFile = new java.io.File(destFileName), srcFile, parentDir,\n            srcChannel, destChannel;\n\n            //logger.trace(\"Src filename: \" + srcFileName);\n            //logger.trace(\"Dest filename: \" + destFileName);\n\n            //If onlyCopyNew is true, then compare dates and only copy if the src is newer\n            //than dest.\n            if (onlyCopyNew) {\n                srcFile = new java.io.File(srcFileName);\n                if (destFile.exists() && destFile.lastModified() >= srcFile.lastModified()) {\n                    return false; //Boolean\n                }\n            }\n\n            //Make sure destination dir exists.\n            parentDir = destFile.getParentFile();\n            if (!parentDir.exists()) {\n                if (!parentDir.mkdirs()) {\n                    throw \"Could not create directory: \" + parentDir.getAbsolutePath();\n                }\n            }\n\n            //Java's version of copy file.\n            srcChannel = new java.io.FileInputStream(srcFileName).getChannel();\n            destChannel = new java.io.FileOutputStream(destFileName).getChannel();\n            destChannel.transferFrom(srcChannel, 0, srcChannel.size());\n            srcChannel.close();\n            destChannel.close();\n\n            return true; //Boolean\n        },\n\n        readFile: function (/*String*/path, /*String?*/encoding) {\n            //A file read function that can deal with BOMs\n            encoding = encoding || \"utf-8\";\n            var fileObj = new java.io.File(path),\n                    input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(fileObj), encoding)),\n                    stringBuffer, line;\n            try {\n                stringBuffer = new java.lang.StringBuffer();\n                line = input.readLine();\n\n                // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324\n                // http://www.unicode.org/faq/utf_bom.html\n\n                // Note that when we use utf-8, the BOM should appear as \"EF BB BF\", but it doesn't due to this bug in the JDK:\n                // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058\n                if (line && line.length() && line.charAt(0) === 0xfeff) {\n                    // Eat the BOM, since we've already found the encoding on this file,\n                    // and we plan to concatenating this buffer with others; the BOM should\n                    // only appear at the top of a file.\n                    line = line.substring(1);\n                }\n                while (line !== null) {\n                    stringBuffer.append(line);\n                    stringBuffer.append(file.lineSeparator);\n                    line = input.readLine();\n                }\n                //Make sure we return a JavaScript string and not a Java string.\n                return String(stringBuffer.toString()); //String\n            } finally {\n                input.close();\n            }\n        },\n\n        saveUtf8File: function (/*String*/fileName, /*String*/fileContents) {\n            //summary: saves a file using UTF-8 encoding.\n            file.saveFile(fileName, fileContents, \"utf-8\");\n        },\n\n        saveFile: function (/*String*/fileName, /*String*/fileContents, /*String?*/encoding) {\n            //summary: saves a file.\n            var outFile = new java.io.File(fileName), outWriter, parentDir, os;\n\n            parentDir = outFile.getAbsoluteFile().getParentFile();\n            if (!parentDir.exists()) {\n                if (!parentDir.mkdirs()) {\n                    throw \"Could not create directory: \" + parentDir.getAbsolutePath();\n                }\n            }\n\n            if (encoding) {\n                outWriter = new java.io.OutputStreamWriter(new java.io.FileOutputStream(outFile), encoding);\n            } else {\n                outWriter = new java.io.OutputStreamWriter(new java.io.FileOutputStream(outFile));\n            }\n\n            os = new java.io.BufferedWriter(outWriter);\n            try {\n                os.write(fileContents);\n            } finally {\n                os.close();\n            }\n        },\n\n        deleteFile: function (/*String*/fileName) {\n            //summary: deletes a file or directory if it exists.\n            var fileObj = new java.io.File(fileName), files, i;\n            if (fileObj.exists()) {\n                if (fileObj.isDirectory()) {\n                    files = fileObj.listFiles();\n                    for (i = 0; i < files.length; i++) {\n                        this.deleteFile(files[i]);\n                    }\n                }\n                fileObj[\"delete\"]();\n            }\n        }\n    };\n\n    return file;\n});\n\n}\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint plusplus: false, strict: false */\n/*global define: false */\n\ndefine('lang', function () {\n    var lang = {\n        backSlashRegExp: /\\\\/g,\n        ostring: Object.prototype.toString,\n\n        isArray: Array.isArray ? Array.isArray : function (it) {\n            return lang.ostring.call(it) === \"[object Array]\";\n        },\n\n        /**\n         * Simple function to mix in properties from source into target,\n         * but only if target does not already have a property of the same name.\n         */\n        mixin: function (target, source, override) {\n            //Use an empty object to avoid other bad JS code that modifies\n            //Object.prototype.\n            var empty = {}, prop;\n            for (prop in source) {\n                if (override || !(prop in target)) {\n                    target[prop] = source[prop];\n                }\n            }\n        },\n\n        delegate: (function () {\n            // boodman/crockford delegation w/ cornford optimization\n            function TMP() {}\n            return function (obj, props) {\n                TMP.prototype = obj;\n                var tmp = new TMP();\n                TMP.prototype = null;\n                if (props) {\n                    lang.mixin(tmp, props);\n                }\n                return tmp; // Object\n            };\n        }())\n    };\n    return lang;\n});\n\nif(env === 'node') {\n/**\n * @license RequireJS Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false */\n/*global define: false, console: false */\n\ndefine('node/print', function () {\n    function print(msg) {\n        console.log(msg);\n    }\n\n    return print;\n});\n\n}\n\nif(env === 'rhino') {\n/**\n * @license RequireJS Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false */\n/*global define: false, print: false */\n\ndefine('rhino/print', function () {\n    return print;\n});\n\n}\n/**\n * @license RequireJS Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint nomen: false, strict: false */\n/*global define: false */\n\ndefine('logger', ['env!env/print'], function (print) {\n    var logger = {\n        TRACE: 0,\n        INFO: 1,\n        WARN: 2,\n        ERROR: 3,\n        SILENT: 4,\n        level: 0,\n        logPrefix: \"\",\n\n        logLevel: function( level ) {\n            this.level = level;\n        },\n\n        trace: function (message) {\n            if (this.level <= this.TRACE) {\n                this._print(message);\n            }\n        },\n\n        info: function (message) {\n            if (this.level <= this.INFO) {\n                this._print(message);\n            }\n        },\n\n        warn: function (message) {\n            if (this.level <= this.WARN) {\n                this._print(message);\n            }\n        },\n\n        error: function (message) {\n            if (this.level <= this.ERROR) {\n                this._print(message);\n            }\n        },\n\n        _print: function (message) {\n            this._sysPrint((this.logPrefix ? (this.logPrefix + \" \") : \"\") + message);\n        },\n\n        _sysPrint: function (message) {\n            print(message);\n        }\n    };\n\n    return logger;\n});\n//Just a blank file to use when building the optimizer with the optimizer,\n//so that the build does not attempt to inline some env modules,\n//like Node's fs and path.\n\n//Just a blank file to use when building the optimizer with the optimizer,\n//so that the build does not attempt to inline some env modules,\n//like Node's fs and path.\n\ndefine('uglifyjs/parse-js', [\"require\", \"exports\", \"module\"], function(require, exports, module) {\n\n/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n\n  This version is suitable for Node.js.  With minimal changes (the\n  exports stuff) it should work on any JS platform.\n\n  This file contains the tokenizer/parser.  It is a port to JavaScript\n  of parse-js [1], a JavaScript parser library written in Common Lisp\n  by Marijn Haverbeke.  Thank you Marijn!\n\n  [1] http://marijn.haverbeke.nl/parse-js/\n\n  Exported functions:\n\n    - tokenizer(code) -- returns a function.  Call the returned\n      function to fetch the next token.\n\n    - parse(code) -- returns an AST of the given JavaScript code.\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>\n    Based on parse-js (http://marijn.haverbeke.nl/parse-js/).\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n/* -----[ Tokenizer (constants) ]----- */\n\nvar KEYWORDS = array_to_hash([\n        \"break\",\n        \"case\",\n        \"catch\",\n        \"const\",\n        \"continue\",\n        \"default\",\n        \"delete\",\n        \"do\",\n        \"else\",\n        \"finally\",\n        \"for\",\n        \"function\",\n        \"if\",\n        \"in\",\n        \"instanceof\",\n        \"new\",\n        \"return\",\n        \"switch\",\n        \"throw\",\n        \"try\",\n        \"typeof\",\n        \"var\",\n        \"void\",\n        \"while\",\n        \"with\"\n]);\n\nvar RESERVED_WORDS = array_to_hash([\n        \"abstract\",\n        \"boolean\",\n        \"byte\",\n        \"char\",\n        \"class\",\n        \"debugger\",\n        \"double\",\n        \"enum\",\n        \"export\",\n        \"extends\",\n        \"final\",\n        \"float\",\n        \"goto\",\n        \"implements\",\n        \"import\",\n        \"int\",\n        \"interface\",\n        \"long\",\n        \"native\",\n        \"package\",\n        \"private\",\n        \"protected\",\n        \"public\",\n        \"short\",\n        \"static\",\n        \"super\",\n        \"synchronized\",\n        \"throws\",\n        \"transient\",\n        \"volatile\"\n]);\n\nvar KEYWORDS_BEFORE_EXPRESSION = array_to_hash([\n        \"return\",\n        \"new\",\n        \"delete\",\n        \"throw\",\n        \"else\",\n        \"case\"\n]);\n\nvar KEYWORDS_ATOM = array_to_hash([\n        \"false\",\n        \"null\",\n        \"true\",\n        \"undefined\"\n]);\n\nvar OPERATOR_CHARS = array_to_hash(characters(\"+-*&%=<>!?|~^\"));\n\nvar RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;\nvar RE_OCT_NUMBER = /^0[0-7]+$/;\nvar RE_DEC_NUMBER = /^\\d*\\.?\\d*(?:e[+-]?\\d*(?:\\d\\.?|\\.?\\d)\\d*)?$/i;\n\nvar OPERATORS = array_to_hash([\n        \"in\",\n        \"instanceof\",\n        \"typeof\",\n        \"new\",\n        \"void\",\n        \"delete\",\n        \"++\",\n        \"--\",\n        \"+\",\n        \"-\",\n        \"!\",\n        \"~\",\n        \"&\",\n        \"|\",\n        \"^\",\n        \"*\",\n        \"/\",\n        \"%\",\n        \">>\",\n        \"<<\",\n        \">>>\",\n        \"<\",\n        \">\",\n        \"<=\",\n        \">=\",\n        \"==\",\n        \"===\",\n        \"!=\",\n        \"!==\",\n        \"?\",\n        \"=\",\n        \"+=\",\n        \"-=\",\n        \"/=\",\n        \"*=\",\n        \"%=\",\n        \">>=\",\n        \"<<=\",\n        \">>>=\",\n        \"|=\",\n        \"^=\",\n        \"&=\",\n        \"&&\",\n        \"||\"\n]);\n\nvar WHITESPACE_CHARS = array_to_hash(characters(\" \\u00a0\\n\\r\\t\\f\\v\\u200b\"));\n\nvar PUNC_BEFORE_EXPRESSION = array_to_hash(characters(\"[{}(,.;:\"));\n\nvar PUNC_CHARS = array_to_hash(characters(\"[]{}(),;:\"));\n\nvar REGEXP_MODIFIERS = array_to_hash(characters(\"gmsiy\"));\n\n/* -----[ Tokenizer ]----- */\n\n// regexps adapted from http://xregexp.com/plugins/#unicode\nvar UNICODE = {\n        letter: new RegExp(\"[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u0523\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0621-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971\\\\u0972\\\\u097B-\\\\u097F\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C33\\\\u0C35-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D28\\\\u0D2A-\\\\u0D39\\\\u0D3D\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC\\\\u0EDD\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8B\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10D0-\\\\u10FA\\\\u10FC\\\\u1100-\\\\u1159\\\\u115F-\\\\u11A2\\\\u11A8-\\\\u11F9\\\\u1200-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u1676\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u1900-\\\\u191C\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19A9\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u2094\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2183\\\\u2184\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2C6F\\\\u2C71-\\\\u2C7D\\\\u2C80-\\\\u2CE4\\\\u2D00-\\\\u2D25\\\\u2D30-\\\\u2D65\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005\\\\u3006\\\\u3031-\\\\u3035\\\\u303B\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31B7\\\\u31F0-\\\\u31FF\\\\u3400\\\\u4DB5\\\\u4E00\\\\u9FC3\\\\uA000-\\\\uA48C\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA65F\\\\uA662-\\\\uA66E\\\\uA67F-\\\\uA697\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B\\\\uA78C\\\\uA7FB-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAC00\\\\uD7A3\\\\uF900-\\\\uFA2D\\\\uFA30-\\\\uFA6A\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\"),\n        non_spacing_mark: new RegExp(\"[\\\\u0300-\\\\u036F\\\\u0483-\\\\u0487\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0610-\\\\u061A\\\\u064B-\\\\u065E\\\\u0670\\\\u06D6-\\\\u06DC\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0900-\\\\u0902\\\\u093C\\\\u0941-\\\\u0948\\\\u094D\\\\u0951-\\\\u0955\\\\u0962\\\\u0963\\\\u0981\\\\u09BC\\\\u09C1-\\\\u09C4\\\\u09CD\\\\u09E2\\\\u09E3\\\\u0A01\\\\u0A02\\\\u0A3C\\\\u0A41\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81\\\\u0A82\\\\u0ABC\\\\u0AC1-\\\\u0AC5\\\\u0AC7\\\\u0AC8\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0B01\\\\u0B3C\\\\u0B3F\\\\u0B41-\\\\u0B44\\\\u0B4D\\\\u0B56\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BC0\\\\u0BCD\\\\u0C3E-\\\\u0C40\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0CBC\\\\u0CBF\\\\u0CC6\\\\u0CCC\\\\u0CCD\\\\u0CE2\\\\u0CE3\\\\u0D41-\\\\u0D44\\\\u0D4D\\\\u0D62\\\\u0D63\\\\u0DCA\\\\u0DD2-\\\\u0DD4\\\\u0DD6\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EB9\\\\u0EBB\\\\u0EBC\\\\u0EC8-\\\\u0ECD\\\\u0F18\\\\u0F19\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F71-\\\\u0F7E\\\\u0F80-\\\\u0F84\\\\u0F86\\\\u0F87\\\\u0F90-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u102D-\\\\u1030\\\\u1032-\\\\u1037\\\\u1039\\\\u103A\\\\u103D\\\\u103E\\\\u1058\\\\u1059\\\\u105E-\\\\u1060\\\\u1071-\\\\u1074\\\\u1082\\\\u1085\\\\u1086\\\\u108D\\\\u109D\\\\u135F\\\\u1712-\\\\u1714\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B7-\\\\u17BD\\\\u17C6\\\\u17C9-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u18A9\\\\u1920-\\\\u1922\\\\u1927\\\\u1928\\\\u1932\\\\u1939-\\\\u193B\\\\u1A17\\\\u1A18\\\\u1A56\\\\u1A58-\\\\u1A5E\\\\u1A60\\\\u1A62\\\\u1A65-\\\\u1A6C\\\\u1A73-\\\\u1A7C\\\\u1A7F\\\\u1B00-\\\\u1B03\\\\u1B34\\\\u1B36-\\\\u1B3A\\\\u1B3C\\\\u1B42\\\\u1B6B-\\\\u1B73\\\\u1B80\\\\u1B81\\\\u1BA2-\\\\u1BA5\\\\u1BA8\\\\u1BA9\\\\u1C2C-\\\\u1C33\\\\u1C36\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE0\\\\u1CE2-\\\\u1CE8\\\\u1CED\\\\u1DC0-\\\\u1DE6\\\\u1DFD-\\\\u1DFF\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F\\\\uA67C\\\\uA67D\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA825\\\\uA826\\\\uA8C4\\\\uA8E0-\\\\uA8F1\\\\uA926-\\\\uA92D\\\\uA947-\\\\uA951\\\\uA980-\\\\uA982\\\\uA9B3\\\\uA9B6-\\\\uA9B9\\\\uA9BC\\\\uAA29-\\\\uAA2E\\\\uAA31\\\\uAA32\\\\uAA35\\\\uAA36\\\\uAA43\\\\uAA4C\\\\uAAB0\\\\uAAB2-\\\\uAAB4\\\\uAAB7\\\\uAAB8\\\\uAABE\\\\uAABF\\\\uAAC1\\\\uABE5\\\\uABE8\\\\uABED\\\\uFB1E\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE26]\"),\n        space_combining_mark: new RegExp(\"[\\\\u0903\\\\u093E-\\\\u0940\\\\u0949-\\\\u094C\\\\u094E\\\\u0982\\\\u0983\\\\u09BE-\\\\u09C0\\\\u09C7\\\\u09C8\\\\u09CB\\\\u09CC\\\\u09D7\\\\u0A03\\\\u0A3E-\\\\u0A40\\\\u0A83\\\\u0ABE-\\\\u0AC0\\\\u0AC9\\\\u0ACB\\\\u0ACC\\\\u0B02\\\\u0B03\\\\u0B3E\\\\u0B40\\\\u0B47\\\\u0B48\\\\u0B4B\\\\u0B4C\\\\u0B57\\\\u0BBE\\\\u0BBF\\\\u0BC1\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCC\\\\u0BD7\\\\u0C01-\\\\u0C03\\\\u0C41-\\\\u0C44\\\\u0C82\\\\u0C83\\\\u0CBE\\\\u0CC0-\\\\u0CC4\\\\u0CC7\\\\u0CC8\\\\u0CCA\\\\u0CCB\\\\u0CD5\\\\u0CD6\\\\u0D02\\\\u0D03\\\\u0D3E-\\\\u0D40\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4C\\\\u0D57\\\\u0D82\\\\u0D83\\\\u0DCF-\\\\u0DD1\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0F3E\\\\u0F3F\\\\u0F7F\\\\u102B\\\\u102C\\\\u1031\\\\u1038\\\\u103B\\\\u103C\\\\u1056\\\\u1057\\\\u1062-\\\\u1064\\\\u1067-\\\\u106D\\\\u1083\\\\u1084\\\\u1087-\\\\u108C\\\\u108F\\\\u109A-\\\\u109C\\\\u17B6\\\\u17BE-\\\\u17C5\\\\u17C7\\\\u17C8\\\\u1923-\\\\u1926\\\\u1929-\\\\u192B\\\\u1930\\\\u1931\\\\u1933-\\\\u1938\\\\u19B0-\\\\u19C0\\\\u19C8\\\\u19C9\\\\u1A19-\\\\u1A1B\\\\u1A55\\\\u1A57\\\\u1A61\\\\u1A63\\\\u1A64\\\\u1A6D-\\\\u1A72\\\\u1B04\\\\u1B35\\\\u1B3B\\\\u1B3D-\\\\u1B41\\\\u1B43\\\\u1B44\\\\u1B82\\\\u1BA1\\\\u1BA6\\\\u1BA7\\\\u1BAA\\\\u1C24-\\\\u1C2B\\\\u1C34\\\\u1C35\\\\u1CE1\\\\u1CF2\\\\uA823\\\\uA824\\\\uA827\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C3\\\\uA952\\\\uA953\\\\uA983\\\\uA9B4\\\\uA9B5\\\\uA9BA\\\\uA9BB\\\\uA9BD-\\\\uA9C0\\\\uAA2F\\\\uAA30\\\\uAA33\\\\uAA34\\\\uAA4D\\\\uAA7B\\\\uABE3\\\\uABE4\\\\uABE6\\\\uABE7\\\\uABE9\\\\uABEA\\\\uABEC]\"),\n        connector_punctuation: new RegExp(\"[\\\\u005F\\\\u203F\\\\u2040\\\\u2054\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFF3F]\")\n};\n\nfunction is_letter(ch) {\n        return UNICODE.letter.test(ch);\n};\n\nfunction is_digit(ch) {\n        ch = ch.charCodeAt(0);\n        return ch >= 48 && ch <= 57; //XXX: find out if \"UnicodeDigit\" means something else than 0..9\n};\n\nfunction is_alphanumeric_char(ch) {\n        return is_digit(ch) || is_letter(ch);\n};\n\nfunction is_unicode_combining_mark(ch) {\n        return UNICODE.non_spacing_mark.test(ch) || UNICODE.space_combining_mark.test(ch);\n};\n\nfunction is_unicode_connector_punctuation(ch) {\n        return UNICODE.connector_punctuation.test(ch);\n};\n\nfunction is_identifier_start(ch) {\n        return ch == \"$\" || ch == \"_\" || is_letter(ch);\n};\n\nfunction is_identifier_char(ch) {\n        return is_identifier_start(ch)\n                || is_unicode_combining_mark(ch)\n                || is_digit(ch)\n                || is_unicode_connector_punctuation(ch)\n                || ch == \"\\u200c\" // zero-width non-joiner <ZWNJ>\n                || ch == \"\\u200d\" // zero-width joiner <ZWJ> (in my ECMA-262 PDF, this is also 200c)\n        ;\n};\n\nfunction parse_js_number(num) {\n        if (RE_HEX_NUMBER.test(num)) {\n                return parseInt(num.substr(2), 16);\n        } else if (RE_OCT_NUMBER.test(num)) {\n                return parseInt(num.substr(1), 8);\n        } else if (RE_DEC_NUMBER.test(num)) {\n                return parseFloat(num);\n        }\n};\n\nfunction JS_Parse_Error(message, line, col, pos) {\n        this.message = message;\n        this.line = line;\n        this.col = col;\n        this.pos = pos;\n        /*\n        try {\n                ({})();\n        } catch(ex) {\n                this.stack = ex.stack;\n        };\n        */\n};\n\nJS_Parse_Error.prototype.toString = function() {\n        return this.message + \" (line: \" + this.line + \", col: \" + this.col + \", pos: \" + this.pos + \")\" + \"\\n\\n\" + this.stack;\n};\n\nfunction js_error(message, line, col, pos) {\n        throw new JS_Parse_Error(message, line, col, pos);\n};\n\nfunction is_token(token, type, val) {\n        return token.type == type && (val == null || token.value == val);\n};\n\nvar EX_EOF = {};\n\nfunction tokenizer($TEXT) {\n\n        var S = {\n                text            : $TEXT.replace(/\\r\\n?|[\\n\\u2028\\u2029]/g, \"\\n\").replace(/^\\uFEFF/, ''),\n                pos             : 0,\n                tokpos          : 0,\n                line            : 0,\n                tokline         : 0,\n                col             : 0,\n                tokcol          : 0,\n                newline_before  : false,\n                regex_allowed   : false,\n                comments_before : []\n        };\n\n        function peek() { return S.text.charAt(S.pos); };\n\n        function next(signal_eof) {\n                var ch = S.text.charAt(S.pos++);\n                if (signal_eof && !ch)\n                        throw EX_EOF;\n                if (ch == \"\\n\") {\n                        S.newline_before = true;\n                        ++S.line;\n                        S.col = 0;\n                } else {\n                        ++S.col;\n                }\n                return ch;\n        };\n\n        function eof() {\n                return !S.peek();\n        };\n\n        function find(what, signal_eof) {\n                var pos = S.text.indexOf(what, S.pos);\n                if (signal_eof && pos == -1) throw EX_EOF;\n                return pos;\n        };\n\n        function start_token() {\n                S.tokline = S.line;\n                S.tokcol = S.col;\n                S.tokpos = S.pos;\n        };\n\n        function token(type, value, is_comment) {\n                S.regex_allowed = ((type == \"operator\" && !HOP(UNARY_POSTFIX, value)) ||\n                                   (type == \"keyword\" && HOP(KEYWORDS_BEFORE_EXPRESSION, value)) ||\n                                   (type == \"punc\" && HOP(PUNC_BEFORE_EXPRESSION, value)));\n                var ret = {\n                        type  : type,\n                        value : value,\n                        line  : S.tokline,\n                        col   : S.tokcol,\n                        pos   : S.tokpos,\n                        nlb   : S.newline_before\n                };\n                if (!is_comment) {\n                        ret.comments_before = S.comments_before;\n                        S.comments_before = [];\n                }\n                S.newline_before = false;\n                return ret;\n        };\n\n        function skip_whitespace() {\n                while (HOP(WHITESPACE_CHARS, peek()))\n                        next();\n        };\n\n        function read_while(pred) {\n                var ret = \"\", ch = peek(), i = 0;\n                while (ch && pred(ch, i++)) {\n                        ret += next();\n                        ch = peek();\n                }\n                return ret;\n        };\n\n        function parse_error(err) {\n                js_error(err, S.tokline, S.tokcol, S.tokpos);\n        };\n\n        function read_num(prefix) {\n                var has_e = false, after_e = false, has_x = false, has_dot = prefix == \".\";\n                var num = read_while(function(ch, i){\n                        if (ch == \"x\" || ch == \"X\") {\n                                if (has_x) return false;\n                                return has_x = true;\n                        }\n                        if (!has_x && (ch == \"E\" || ch == \"e\")) {\n                                if (has_e) return false;\n                                return has_e = after_e = true;\n                        }\n                        if (ch == \"-\") {\n                                if (after_e || (i == 0 && !prefix)) return true;\n                                return false;\n                        }\n                        if (ch == \"+\") return after_e;\n                        after_e = false;\n                        if (ch == \".\") {\n                                if (!has_dot && !has_x)\n                                        return has_dot = true;\n                                return false;\n                        }\n                        return is_alphanumeric_char(ch);\n                });\n                if (prefix)\n                        num = prefix + num;\n                var valid = parse_js_number(num);\n                if (!isNaN(valid)) {\n                        return token(\"num\", valid);\n                } else {\n                        parse_error(\"Invalid syntax: \" + num);\n                }\n        };\n\n        function read_escaped_char() {\n                var ch = next(true);\n                switch (ch) {\n                    case \"n\" : return \"\\n\";\n                    case \"r\" : return \"\\r\";\n                    case \"t\" : return \"\\t\";\n                    case \"b\" : return \"\\b\";\n                    case \"v\" : return \"\\v\";\n                    case \"f\" : return \"\\f\";\n                    case \"0\" : return \"\\0\";\n                    case \"x\" : return String.fromCharCode(hex_bytes(2));\n                    case \"u\" : return String.fromCharCode(hex_bytes(4));\n                    default  : return ch;\n                }\n        };\n\n        function hex_bytes(n) {\n                var num = 0;\n                for (; n > 0; --n) {\n                        var digit = parseInt(next(true), 16);\n                        if (isNaN(digit))\n                                parse_error(\"Invalid hex-character pattern in string\");\n                        num = (num << 4) | digit;\n                }\n                return num;\n        };\n\n        function read_string() {\n                return with_eof_error(\"Unterminated string constant\", function(){\n                        var quote = next(), ret = \"\";\n                        for (;;) {\n                                var ch = next(true);\n                                if (ch == \"\\\\\") {\n                                        // read OctalEscapeSequence (XXX: deprecated if \"strict mode\")\n                                        // https://github.com/mishoo/UglifyJS/issues/178\n                                        var octal_len = 0, first = null;\n                                        ch = read_while(function(ch){\n                                                if (ch >= \"0\" && ch <= \"7\") {\n                                                        if (!first) {\n                                                                first = ch;\n                                                                return ++octal_len;\n                                                        }\n                                                        else if (first <= \"3\" && octal_len <= 2) return ++octal_len;\n                                                        else if (first >= \"4\" && octal_len <= 1) return ++octal_len;\n                                                }\n                                                return false;\n                                        });\n                                        if (octal_len > 0) ch = String.fromCharCode(parseInt(ch, 8));\n                                        else ch = read_escaped_char();\n                                }\n                                else if (ch == quote) break;\n                                ret += ch;\n                        }\n                        return token(\"string\", ret);\n                });\n        };\n\n        function read_line_comment() {\n                next();\n                var i = find(\"\\n\"), ret;\n                if (i == -1) {\n                        ret = S.text.substr(S.pos);\n                        S.pos = S.text.length;\n                } else {\n                        ret = S.text.substring(S.pos, i);\n                        S.pos = i;\n                }\n                return token(\"comment1\", ret, true);\n        };\n\n        function read_multiline_comment() {\n                next();\n                return with_eof_error(\"Unterminated multiline comment\", function(){\n                        var i = find(\"*/\", true),\n                            text = S.text.substring(S.pos, i),\n                            tok = token(\"comment2\", text, true);\n                        S.pos = i + 2;\n                        S.line += text.split(\"\\n\").length - 1;\n                        S.newline_before = text.indexOf(\"\\n\") >= 0;\n\n                        // https://github.com/mishoo/UglifyJS/issues/#issue/100\n                        if (/^@cc_on/i.test(text)) {\n                                warn(\"WARNING: at line \" + S.line);\n                                warn(\"*** Found \\\"conditional comment\\\": \" + text);\n                                warn(\"*** UglifyJS DISCARDS ALL COMMENTS.  This means your code might no longer work properly in Internet Explorer.\");\n                        }\n\n                        return tok;\n                });\n        };\n\n        function read_name() {\n                var backslash = false, name = \"\", ch;\n                while ((ch = peek()) != null) {\n                        if (!backslash) {\n                                if (ch == \"\\\\\") backslash = true, next();\n                                else if (is_identifier_char(ch)) name += next();\n                                else break;\n                        }\n                        else {\n                                if (ch != \"u\") parse_error(\"Expecting UnicodeEscapeSequence -- uXXXX\");\n                                ch = read_escaped_char();\n                                if (!is_identifier_char(ch)) parse_error(\"Unicode char: \" + ch.charCodeAt(0) + \" is not valid in identifier\");\n                                name += ch;\n                                backslash = false;\n                        }\n                }\n                return name;\n        };\n\n        function read_regexp() {\n                return with_eof_error(\"Unterminated regular expression\", function(){\n                        var prev_backslash = false, regexp = \"\", ch, in_class = false;\n                        while ((ch = next(true))) if (prev_backslash) {\n                                regexp += \"\\\\\" + ch;\n                                prev_backslash = false;\n                        } else if (ch == \"[\") {\n                                in_class = true;\n                                regexp += ch;\n                        } else if (ch == \"]\" && in_class) {\n                                in_class = false;\n                                regexp += ch;\n                        } else if (ch == \"/\" && !in_class) {\n                                break;\n                        } else if (ch == \"\\\\\") {\n                                prev_backslash = true;\n                        } else {\n                                regexp += ch;\n                        }\n                        var mods = read_name();\n                        return token(\"regexp\", [ regexp, mods ]);\n                });\n        };\n\n        function read_operator(prefix) {\n                function grow(op) {\n                        if (!peek()) return op;\n                        var bigger = op + peek();\n                        if (HOP(OPERATORS, bigger)) {\n                                next();\n                                return grow(bigger);\n                        } else {\n                                return op;\n                        }\n                };\n                return token(\"operator\", grow(prefix || next()));\n        };\n\n        function handle_slash() {\n                next();\n                var regex_allowed = S.regex_allowed;\n                switch (peek()) {\n                    case \"/\":\n                        S.comments_before.push(read_line_comment());\n                        S.regex_allowed = regex_allowed;\n                        return next_token();\n                    case \"*\":\n                        S.comments_before.push(read_multiline_comment());\n                        S.regex_allowed = regex_allowed;\n                        return next_token();\n                }\n                return S.regex_allowed ? read_regexp() : read_operator(\"/\");\n        };\n\n        function handle_dot() {\n                next();\n                return is_digit(peek())\n                        ? read_num(\".\")\n                        : token(\"punc\", \".\");\n        };\n\n        function read_word() {\n                var word = read_name();\n                return !HOP(KEYWORDS, word)\n                        ? token(\"name\", word)\n                        : HOP(OPERATORS, word)\n                        ? token(\"operator\", word)\n                        : HOP(KEYWORDS_ATOM, word)\n                        ? token(\"atom\", word)\n                        : token(\"keyword\", word);\n        };\n\n        function with_eof_error(eof_error, cont) {\n                try {\n                        return cont();\n                } catch(ex) {\n                        if (ex === EX_EOF) parse_error(eof_error);\n                        else throw ex;\n                }\n        };\n\n        function next_token(force_regexp) {\n                if (force_regexp)\n                        return read_regexp();\n                skip_whitespace();\n                start_token();\n                var ch = peek();\n                if (!ch) return token(\"eof\");\n                if (is_digit(ch)) return read_num();\n                if (ch == '\"' || ch == \"'\") return read_string();\n                if (HOP(PUNC_CHARS, ch)) return token(\"punc\", next());\n                if (ch == \".\") return handle_dot();\n                if (ch == \"/\") return handle_slash();\n                if (HOP(OPERATOR_CHARS, ch)) return read_operator();\n                if (ch == \"\\\\\" || is_identifier_start(ch)) return read_word();\n                parse_error(\"Unexpected character '\" + ch + \"'\");\n        };\n\n        next_token.context = function(nc) {\n                if (nc) S = nc;\n                return S;\n        };\n\n        return next_token;\n\n};\n\n/* -----[ Parser (constants) ]----- */\n\nvar UNARY_PREFIX = array_to_hash([\n        \"typeof\",\n        \"void\",\n        \"delete\",\n        \"--\",\n        \"++\",\n        \"!\",\n        \"~\",\n        \"-\",\n        \"+\"\n]);\n\nvar UNARY_POSTFIX = array_to_hash([ \"--\", \"++\" ]);\n\nvar ASSIGNMENT = (function(a, ret, i){\n        while (i < a.length) {\n                ret[a[i]] = a[i].substr(0, a[i].length - 1);\n                i++;\n        }\n        return ret;\n})(\n        [\"+=\", \"-=\", \"/=\", \"*=\", \"%=\", \">>=\", \"<<=\", \">>>=\", \"|=\", \"^=\", \"&=\"],\n        { \"=\": true },\n        0\n);\n\nvar PRECEDENCE = (function(a, ret){\n        for (var i = 0, n = 1; i < a.length; ++i, ++n) {\n                var b = a[i];\n                for (var j = 0; j < b.length; ++j) {\n                        ret[b[j]] = n;\n                }\n        }\n        return ret;\n})(\n        [\n                [\"||\"],\n                [\"&&\"],\n                [\"|\"],\n                [\"^\"],\n                [\"&\"],\n                [\"==\", \"===\", \"!=\", \"!==\"],\n                [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n                [\">>\", \"<<\", \">>>\"],\n                [\"+\", \"-\"],\n                [\"*\", \"/\", \"%\"]\n        ],\n        {}\n);\n\nvar STATEMENTS_WITH_LABELS = array_to_hash([ \"for\", \"do\", \"while\", \"switch\" ]);\n\nvar ATOMIC_START_TOKEN = array_to_hash([ \"atom\", \"num\", \"string\", \"regexp\", \"name\" ]);\n\n/* -----[ Parser ]----- */\n\nfunction NodeWithToken(str, start, end) {\n        this.name = str;\n        this.start = start;\n        this.end = end;\n};\n\nNodeWithToken.prototype.toString = function() { return this.name; };\n\nfunction parse($TEXT, exigent_mode, embed_tokens) {\n\n        var S = {\n                input       : typeof $TEXT == \"string\" ? tokenizer($TEXT, true) : $TEXT,\n                token       : null,\n                prev        : null,\n                peeked      : null,\n                in_function : 0,\n                in_loop     : 0,\n                labels      : []\n        };\n\n        S.token = next();\n\n        function is(type, value) {\n                return is_token(S.token, type, value);\n        };\n\n        function peek() { return S.peeked || (S.peeked = S.input()); };\n\n        function next() {\n                S.prev = S.token;\n                if (S.peeked) {\n                        S.token = S.peeked;\n                        S.peeked = null;\n                } else {\n                        S.token = S.input();\n                }\n                return S.token;\n        };\n\n        function prev() {\n                return S.prev;\n        };\n\n        function croak(msg, line, col, pos) {\n                var ctx = S.input.context();\n                js_error(msg,\n                         line != null ? line : ctx.tokline,\n                         col != null ? col : ctx.tokcol,\n                         pos != null ? pos : ctx.tokpos);\n        };\n\n        function token_error(token, msg) {\n                croak(msg, token.line, token.col);\n        };\n\n        function unexpected(token) {\n                if (token == null)\n                        token = S.token;\n                token_error(token, \"Unexpected token: \" + token.type + \" (\" + token.value + \")\");\n        };\n\n        function expect_token(type, val) {\n                if (is(type, val)) {\n                        return next();\n                }\n                token_error(S.token, \"Unexpected token \" + S.token.type + \", expected \" + type);\n        };\n\n        function expect(punc) { return expect_token(\"punc\", punc); };\n\n        function can_insert_semicolon() {\n                return !exigent_mode && (\n                        S.token.nlb || is(\"eof\") || is(\"punc\", \"}\")\n                );\n        };\n\n        function semicolon() {\n                if (is(\"punc\", \";\")) next();\n                else if (!can_insert_semicolon()) unexpected();\n        };\n\n        function as() {\n                return slice(arguments);\n        };\n\n        function parenthesised() {\n                expect(\"(\");\n                var ex = expression();\n                expect(\")\");\n                return ex;\n        };\n\n        function add_tokens(str, start, end) {\n                return str instanceof NodeWithToken ? str : new NodeWithToken(str, start, end);\n        };\n\n        function maybe_embed_tokens(parser) {\n                if (embed_tokens) return function() {\n                        var start = S.token;\n                        var ast = parser.apply(this, arguments);\n                        ast[0] = add_tokens(ast[0], start, prev());\n                        return ast;\n                };\n                else return parser;\n        };\n\n        var statement = maybe_embed_tokens(function() {\n                if (is(\"operator\", \"/\")) {\n                        S.peeked = null;\n                        S.token = S.input(true); // force regexp\n                }\n                switch (S.token.type) {\n                    case \"num\":\n                    case \"string\":\n                    case \"regexp\":\n                    case \"operator\":\n                    case \"atom\":\n                        return simple_statement();\n\n                    case \"name\":\n                        return is_token(peek(), \"punc\", \":\")\n                                ? labeled_statement(prog1(S.token.value, next, next))\n                                : simple_statement();\n\n                    case \"punc\":\n                        switch (S.token.value) {\n                            case \"{\":\n                                return as(\"block\", block_());\n                            case \"[\":\n                            case \"(\":\n                                return simple_statement();\n                            case \";\":\n                                next();\n                                return as(\"block\");\n                            default:\n                                unexpected();\n                        }\n\n                    case \"keyword\":\n                        switch (prog1(S.token.value, next)) {\n                            case \"break\":\n                                return break_cont(\"break\");\n\n                            case \"continue\":\n                                return break_cont(\"continue\");\n\n                            case \"debugger\":\n                                semicolon();\n                                return as(\"debugger\");\n\n                            case \"do\":\n                                return (function(body){\n                                        expect_token(\"keyword\", \"while\");\n                                        return as(\"do\", prog1(parenthesised, semicolon), body);\n                                })(in_loop(statement));\n\n                            case \"for\":\n                                return for_();\n\n                            case \"function\":\n                                return function_(true);\n\n                            case \"if\":\n                                return if_();\n\n                            case \"return\":\n                                if (S.in_function == 0)\n                                        croak(\"'return' outside of function\");\n                                return as(\"return\",\n                                          is(\"punc\", \";\")\n                                          ? (next(), null)\n                                          : can_insert_semicolon()\n                                          ? null\n                                          : prog1(expression, semicolon));\n\n                            case \"switch\":\n                                return as(\"switch\", parenthesised(), switch_block_());\n\n                            case \"throw\":\n                                return as(\"throw\", prog1(expression, semicolon));\n\n                            case \"try\":\n                                return try_();\n\n                            case \"var\":\n                                return prog1(var_, semicolon);\n\n                            case \"const\":\n                                return prog1(const_, semicolon);\n\n                            case \"while\":\n                                return as(\"while\", parenthesised(), in_loop(statement));\n\n                            case \"with\":\n                                return as(\"with\", parenthesised(), statement());\n\n                            default:\n                                unexpected();\n                        }\n                }\n        });\n\n        function labeled_statement(label) {\n                S.labels.push(label);\n                var start = S.token, stat = statement();\n                if (exigent_mode && !HOP(STATEMENTS_WITH_LABELS, stat[0]))\n                        unexpected(start);\n                S.labels.pop();\n                return as(\"label\", label, stat);\n        };\n\n        function simple_statement() {\n                return as(\"stat\", prog1(expression, semicolon));\n        };\n\n        function break_cont(type) {\n                var name;\n                if (!can_insert_semicolon()) {\n                        name = is(\"name\") ? S.token.value : null;\n                }\n                if (name != null) {\n                        next();\n                        if (!member(name, S.labels))\n                                croak(\"Label \" + name + \" without matching loop or statement\");\n                }\n                else if (S.in_loop == 0)\n                        croak(type + \" not inside a loop or switch\");\n                semicolon();\n                return as(type, name);\n        };\n\n        function for_() {\n                expect(\"(\");\n                var init = null;\n                if (!is(\"punc\", \";\")) {\n                        init = is(\"keyword\", \"var\")\n                                ? (next(), var_(true))\n                                : expression(true, true);\n                        if (is(\"operator\", \"in\"))\n                                return for_in(init);\n                }\n                return regular_for(init);\n        };\n\n        function regular_for(init) {\n                expect(\";\");\n                var test = is(\"punc\", \";\") ? null : expression();\n                expect(\";\");\n                var step = is(\"punc\", \")\") ? null : expression();\n                expect(\")\");\n                return as(\"for\", init, test, step, in_loop(statement));\n        };\n\n        function for_in(init) {\n                var lhs = init[0] == \"var\" ? as(\"name\", init[1][0]) : init;\n                next();\n                var obj = expression();\n                expect(\")\");\n                return as(\"for-in\", init, lhs, obj, in_loop(statement));\n        };\n\n        var function_ = maybe_embed_tokens(function(in_statement) {\n                var name = is(\"name\") ? prog1(S.token.value, next) : null;\n                if (in_statement && !name)\n                        unexpected();\n                expect(\"(\");\n                return as(in_statement ? \"defun\" : \"function\",\n                          name,\n                          // arguments\n                          (function(first, a){\n                                  while (!is(\"punc\", \")\")) {\n                                          if (first) first = false; else expect(\",\");\n                                          if (!is(\"name\")) unexpected();\n                                          a.push(S.token.value);\n                                          next();\n                                  }\n                                  next();\n                                  return a;\n                          })(true, []),\n                          // body\n                          (function(){\n                                  ++S.in_function;\n                                  var loop = S.in_loop;\n                                  S.in_loop = 0;\n                                  var a = block_();\n                                  --S.in_function;\n                                  S.in_loop = loop;\n                                  return a;\n                          })());\n        });\n\n        function if_() {\n                var cond = parenthesised(), body = statement(), belse;\n                if (is(\"keyword\", \"else\")) {\n                        next();\n                        belse = statement();\n                }\n                return as(\"if\", cond, body, belse);\n        };\n\n        function block_() {\n                expect(\"{\");\n                var a = [];\n                while (!is(\"punc\", \"}\")) {\n                        if (is(\"eof\")) unexpected();\n                        a.push(statement());\n                }\n                next();\n                return a;\n        };\n\n        var switch_block_ = curry(in_loop, function(){\n                expect(\"{\");\n                var a = [], cur = null;\n                while (!is(\"punc\", \"}\")) {\n                        if (is(\"eof\")) unexpected();\n                        if (is(\"keyword\", \"case\")) {\n                                next();\n                                cur = [];\n                                a.push([ expression(), cur ]);\n                                expect(\":\");\n                        }\n                        else if (is(\"keyword\", \"default\")) {\n                                next();\n                                expect(\":\");\n                                cur = [];\n                                a.push([ null, cur ]);\n                        }\n                        else {\n                                if (!cur) unexpected();\n                                cur.push(statement());\n                        }\n                }\n                next();\n                return a;\n        });\n\n        function try_() {\n                var body = block_(), bcatch, bfinally;\n                if (is(\"keyword\", \"catch\")) {\n                        next();\n                        expect(\"(\");\n                        if (!is(\"name\"))\n                                croak(\"Name expected\");\n                        var name = S.token.value;\n                        next();\n                        expect(\")\");\n                        bcatch = [ name, block_() ];\n                }\n                if (is(\"keyword\", \"finally\")) {\n                        next();\n                        bfinally = block_();\n                }\n                if (!bcatch && !bfinally)\n                        croak(\"Missing catch/finally blocks\");\n                return as(\"try\", body, bcatch, bfinally);\n        };\n\n        function vardefs(no_in) {\n                var a = [];\n                for (;;) {\n                        if (!is(\"name\"))\n                                unexpected();\n                        var name = S.token.value;\n                        next();\n                        if (is(\"operator\", \"=\")) {\n                                next();\n                                a.push([ name, expression(false, no_in) ]);\n                        } else {\n                                a.push([ name ]);\n                        }\n                        if (!is(\"punc\", \",\"))\n                                break;\n                        next();\n                }\n                return a;\n        };\n\n        function var_(no_in) {\n                return as(\"var\", vardefs(no_in));\n        };\n\n        function const_() {\n                return as(\"const\", vardefs());\n        };\n\n        function new_() {\n                var newexp = expr_atom(false), args;\n                if (is(\"punc\", \"(\")) {\n                        next();\n                        args = expr_list(\")\");\n                } else {\n                        args = [];\n                }\n                return subscripts(as(\"new\", newexp, args), true);\n        };\n\n        var expr_atom = maybe_embed_tokens(function(allow_calls) {\n                if (is(\"operator\", \"new\")) {\n                        next();\n                        return new_();\n                }\n                if (is(\"punc\")) {\n                        switch (S.token.value) {\n                            case \"(\":\n                                next();\n                                return subscripts(prog1(expression, curry(expect, \")\")), allow_calls);\n                            case \"[\":\n                                next();\n                                return subscripts(array_(), allow_calls);\n                            case \"{\":\n                                next();\n                                return subscripts(object_(), allow_calls);\n                        }\n                        unexpected();\n                }\n                if (is(\"keyword\", \"function\")) {\n                        next();\n                        return subscripts(function_(false), allow_calls);\n                }\n                if (HOP(ATOMIC_START_TOKEN, S.token.type)) {\n                        var atom = S.token.type == \"regexp\"\n                                ? as(\"regexp\", S.token.value[0], S.token.value[1])\n                                : as(S.token.type, S.token.value);\n                        return subscripts(prog1(atom, next), allow_calls);\n                }\n                unexpected();\n        });\n\n        function expr_list(closing, allow_trailing_comma, allow_empty) {\n                var first = true, a = [];\n                while (!is(\"punc\", closing)) {\n                        if (first) first = false; else expect(\",\");\n                        if (allow_trailing_comma && is(\"punc\", closing)) break;\n                        if (is(\"punc\", \",\") && allow_empty) {\n                                a.push([ \"atom\", \"undefined\" ]);\n                        } else {\n                                a.push(expression(false));\n                        }\n                }\n                next();\n                return a;\n        };\n\n        function array_() {\n                return as(\"array\", expr_list(\"]\", !exigent_mode, true));\n        };\n\n        function object_() {\n                var first = true, a = [];\n                while (!is(\"punc\", \"}\")) {\n                        if (first) first = false; else expect(\",\");\n                        if (!exigent_mode && is(\"punc\", \"}\"))\n                                // allow trailing comma\n                                break;\n                        var type = S.token.type;\n                        var name = as_property_name();\n                        if (type == \"name\" && (name == \"get\" || name == \"set\") && !is(\"punc\", \":\")) {\n                                a.push([ as_name(), function_(false), name ]);\n                        } else {\n                                expect(\":\");\n                                a.push([ name, expression(false) ]);\n                        }\n                }\n                next();\n                return as(\"object\", a);\n        };\n\n        function as_property_name() {\n                switch (S.token.type) {\n                    case \"num\":\n                    case \"string\":\n                        return prog1(S.token.value, next);\n                }\n                return as_name();\n        };\n\n        function as_name() {\n                switch (S.token.type) {\n                    case \"name\":\n                    case \"operator\":\n                    case \"keyword\":\n                    case \"atom\":\n                        return prog1(S.token.value, next);\n                    default:\n                        unexpected();\n                }\n        };\n\n        function subscripts(expr, allow_calls) {\n                if (is(\"punc\", \".\")) {\n                        next();\n                        return subscripts(as(\"dot\", expr, as_name()), allow_calls);\n                }\n                if (is(\"punc\", \"[\")) {\n                        next();\n                        return subscripts(as(\"sub\", expr, prog1(expression, curry(expect, \"]\"))), allow_calls);\n                }\n                if (allow_calls && is(\"punc\", \"(\")) {\n                        next();\n                        return subscripts(as(\"call\", expr, expr_list(\")\")), true);\n                }\n                return expr;\n        };\n\n        function maybe_unary(allow_calls) {\n                if (is(\"operator\") && HOP(UNARY_PREFIX, S.token.value)) {\n                        return make_unary(\"unary-prefix\",\n                                          prog1(S.token.value, next),\n                                          maybe_unary(allow_calls));\n                }\n                var val = expr_atom(allow_calls);\n                while (is(\"operator\") && HOP(UNARY_POSTFIX, S.token.value) && !S.token.nlb) {\n                        val = make_unary(\"unary-postfix\", S.token.value, val);\n                        next();\n                }\n                return val;\n        };\n\n        function make_unary(tag, op, expr) {\n                if ((op == \"++\" || op == \"--\") && !is_assignable(expr))\n                        croak(\"Invalid use of \" + op + \" operator\");\n                return as(tag, op, expr);\n        };\n\n        function expr_op(left, min_prec, no_in) {\n                var op = is(\"operator\") ? S.token.value : null;\n                if (op && op == \"in\" && no_in) op = null;\n                var prec = op != null ? PRECEDENCE[op] : null;\n                if (prec != null && prec > min_prec) {\n                        next();\n                        var right = expr_op(maybe_unary(true), prec, no_in);\n                        return expr_op(as(\"binary\", op, left, right), min_prec, no_in);\n                }\n                return left;\n        };\n\n        function expr_ops(no_in) {\n                return expr_op(maybe_unary(true), 0, no_in);\n        };\n\n        function maybe_conditional(no_in) {\n                var expr = expr_ops(no_in);\n                if (is(\"operator\", \"?\")) {\n                        next();\n                        var yes = expression(false);\n                        expect(\":\");\n                        return as(\"conditional\", expr, yes, expression(false, no_in));\n                }\n                return expr;\n        };\n\n        function is_assignable(expr) {\n                if (!exigent_mode) return true;\n                switch (expr[0]) {\n                    case \"dot\":\n                    case \"sub\":\n                    case \"new\":\n                    case \"call\":\n                        return true;\n                    case \"name\":\n                        return expr[1] != \"this\";\n                }\n        };\n\n        function maybe_assign(no_in) {\n                var left = maybe_conditional(no_in), val = S.token.value;\n                if (is(\"operator\") && HOP(ASSIGNMENT, val)) {\n                        if (is_assignable(left)) {\n                                next();\n                                return as(\"assign\", ASSIGNMENT[val], left, maybe_assign(no_in));\n                        }\n                        croak(\"Invalid assignment\");\n                }\n                return left;\n        };\n\n        var expression = maybe_embed_tokens(function(commas, no_in) {\n                if (arguments.length == 0)\n                        commas = true;\n                var expr = maybe_assign(no_in);\n                if (commas && is(\"punc\", \",\")) {\n                        next();\n                        return as(\"seq\", expr, expression(true, no_in));\n                }\n                return expr;\n        });\n\n        function in_loop(cont) {\n                try {\n                        ++S.in_loop;\n                        return cont();\n                } finally {\n                        --S.in_loop;\n                }\n        };\n\n        return as(\"toplevel\", (function(a){\n                while (!is(\"eof\"))\n                        a.push(statement());\n                return a;\n        })([]));\n\n};\n\n/* -----[ Utilities ]----- */\n\nfunction curry(f) {\n        var args = slice(arguments, 1);\n        return function() { return f.apply(this, args.concat(slice(arguments))); };\n};\n\nfunction prog1(ret) {\n        if (ret instanceof Function)\n                ret = ret();\n        for (var i = 1, n = arguments.length; --n > 0; ++i)\n                arguments[i]();\n        return ret;\n};\n\nfunction array_to_hash(a) {\n        var ret = {};\n        for (var i = 0; i < a.length; ++i)\n                ret[a[i]] = true;\n        return ret;\n};\n\nfunction slice(a, start) {\n        return Array.prototype.slice.call(a, start == null ? 0 : start);\n};\n\nfunction characters(str) {\n        return str.split(\"\");\n};\n\nfunction member(name, array) {\n        for (var i = array.length; --i >= 0;)\n                if (array[i] === name)\n                        return true;\n        return false;\n};\n\nfunction HOP(obj, prop) {\n        return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n\nvar warn = function() {};\n\n/* -----[ Exports ]----- */\n\nexports.tokenizer = tokenizer;\nexports.parse = parse;\nexports.slice = slice;\nexports.curry = curry;\nexports.member = member;\nexports.array_to_hash = array_to_hash;\nexports.PRECEDENCE = PRECEDENCE;\nexports.KEYWORDS_ATOM = KEYWORDS_ATOM;\nexports.RESERVED_WORDS = RESERVED_WORDS;\nexports.KEYWORDS = KEYWORDS;\nexports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN;\nexports.OPERATORS = OPERATORS;\nexports.is_alphanumeric_char = is_alphanumeric_char;\nexports.set_logger = function(logger) {\n        warn = logger;\n};\n\n\n});\ndefine('uglifyjs/squeeze-more', [\"require\", \"exports\", \"module\", \"./parse-js\", \"./process\"], function(require, exports, module) {\n\nvar jsp = require(\"./parse-js\"),\n    pro = require(\"./process\"),\n    slice = jsp.slice,\n    member = jsp.member,\n    PRECEDENCE = jsp.PRECEDENCE,\n    OPERATORS = jsp.OPERATORS;\n\nfunction ast_squeeze_more(ast) {\n        var w = pro.ast_walker(), walk = w.walk;\n        return w.with_walkers({\n                \"call\": function(expr, args) {\n                        if (expr[0] == \"dot\" && expr[2] == \"toString\" && args.length == 0) {\n                                // foo.toString()  ==>  foo+\"\"\n                                return [ \"binary\", \"+\", expr[1], [ \"string\", \"\" ]];\n                        }\n                }\n        }, function() {\n                return walk(ast);\n        });\n};\n\nexports.ast_squeeze_more = ast_squeeze_more;\n\n});define('uglifyjs/process', [\"require\", \"exports\", \"module\", \"./parse-js\", \"./squeeze-more\"], function(require, exports, module) {\n\n/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n\n  This version is suitable for Node.js.  With minimal changes (the\n  exports stuff) it should work on any JS platform.\n\n  This file implements some AST processors.  They work on data built\n  by parse-js.\n\n  Exported functions:\n\n    - ast_mangle(ast, options) -- mangles the variable/function names\n      in the AST.  Returns an AST.\n\n    - ast_squeeze(ast) -- employs various optimizations to make the\n      final generated code even smaller.  Returns an AST.\n\n    - gen_code(ast, options) -- generates JS code from the AST.  Pass\n      true (or an object, see the code for some options) as second\n      argument to get \"pretty\" (indented) code.\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\nvar jsp = require(\"./parse-js\"),\n    slice = jsp.slice,\n    member = jsp.member,\n    PRECEDENCE = jsp.PRECEDENCE,\n    OPERATORS = jsp.OPERATORS;\n\n/* -----[ helper for AST traversal ]----- */\n\nfunction ast_walker(ast) {\n        function _vardefs(defs) {\n                return [ this[0], MAP(defs, function(def){\n                        var a = [ def[0] ];\n                        if (def.length > 1)\n                                a[1] = walk(def[1]);\n                        return a;\n                }) ];\n        };\n        function _block(statements) {\n                var out = [ this[0] ];\n                if (statements != null)\n                        out.push(MAP(statements, walk));\n                return out;\n        };\n        var walkers = {\n                \"string\": function(str) {\n                        return [ this[0], str ];\n                },\n                \"num\": function(num) {\n                        return [ this[0], num ];\n                },\n                \"name\": function(name) {\n                        return [ this[0], name ];\n                },\n                \"toplevel\": function(statements) {\n                        return [ this[0], MAP(statements, walk) ];\n                },\n                \"block\": _block,\n                \"splice\": _block,\n                \"var\": _vardefs,\n                \"const\": _vardefs,\n                \"try\": function(t, c, f) {\n                        return [\n                                this[0],\n                                MAP(t, walk),\n                                c != null ? [ c[0], MAP(c[1], walk) ] : null,\n                                f != null ? MAP(f, walk) : null\n                        ];\n                },\n                \"throw\": function(expr) {\n                        return [ this[0], walk(expr) ];\n                },\n                \"new\": function(ctor, args) {\n                        return [ this[0], walk(ctor), MAP(args, walk) ];\n                },\n                \"switch\": function(expr, body) {\n                        return [ this[0], walk(expr), MAP(body, function(branch){\n                                return [ branch[0] ? walk(branch[0]) : null,\n                                         MAP(branch[1], walk) ];\n                        }) ];\n                },\n                \"break\": function(label) {\n                        return [ this[0], label ];\n                },\n                \"continue\": function(label) {\n                        return [ this[0], label ];\n                },\n                \"conditional\": function(cond, t, e) {\n                        return [ this[0], walk(cond), walk(t), walk(e) ];\n                },\n                \"assign\": function(op, lvalue, rvalue) {\n                        return [ this[0], op, walk(lvalue), walk(rvalue) ];\n                },\n                \"dot\": function(expr) {\n                        return [ this[0], walk(expr) ].concat(slice(arguments, 1));\n                },\n                \"call\": function(expr, args) {\n                        return [ this[0], walk(expr), MAP(args, walk) ];\n                },\n                \"function\": function(name, args, body) {\n                        return [ this[0], name, args.slice(), MAP(body, walk) ];\n                },\n                \"defun\": function(name, args, body) {\n                        return [ this[0], name, args.slice(), MAP(body, walk) ];\n                },\n                \"if\": function(conditional, t, e) {\n                        return [ this[0], walk(conditional), walk(t), walk(e) ];\n                },\n                \"for\": function(init, cond, step, block) {\n                        return [ this[0], walk(init), walk(cond), walk(step), walk(block) ];\n                },\n                \"for-in\": function(vvar, key, hash, block) {\n                        return [ this[0], walk(vvar), walk(key), walk(hash), walk(block) ];\n                },\n                \"while\": function(cond, block) {\n                        return [ this[0], walk(cond), walk(block) ];\n                },\n                \"do\": function(cond, block) {\n                        return [ this[0], walk(cond), walk(block) ];\n                },\n                \"return\": function(expr) {\n                        return [ this[0], walk(expr) ];\n                },\n                \"binary\": function(op, left, right) {\n                        return [ this[0], op, walk(left), walk(right) ];\n                },\n                \"unary-prefix\": function(op, expr) {\n                        return [ this[0], op, walk(expr) ];\n                },\n                \"unary-postfix\": function(op, expr) {\n                        return [ this[0], op, walk(expr) ];\n                },\n                \"sub\": function(expr, subscript) {\n                        return [ this[0], walk(expr), walk(subscript) ];\n                },\n                \"object\": function(props) {\n                        return [ this[0], MAP(props, function(p){\n                                return p.length == 2\n                                        ? [ p[0], walk(p[1]) ]\n                                        : [ p[0], walk(p[1]), p[2] ]; // get/set-ter\n                        }) ];\n                },\n                \"regexp\": function(rx, mods) {\n                        return [ this[0], rx, mods ];\n                },\n                \"array\": function(elements) {\n                        return [ this[0], MAP(elements, walk) ];\n                },\n                \"stat\": function(stat) {\n                        return [ this[0], walk(stat) ];\n                },\n                \"seq\": function() {\n                        return [ this[0] ].concat(MAP(slice(arguments), walk));\n                },\n                \"label\": function(name, block) {\n                        return [ this[0], name, walk(block) ];\n                },\n                \"with\": function(expr, block) {\n                        return [ this[0], walk(expr), walk(block) ];\n                },\n                \"atom\": function(name) {\n                        return [ this[0], name ];\n                }\n        };\n\n        var user = {};\n        var stack = [];\n        function walk(ast) {\n                if (ast == null)\n                        return null;\n                try {\n                        stack.push(ast);\n                        var type = ast[0];\n                        var gen = user[type];\n                        if (gen) {\n                                var ret = gen.apply(ast, ast.slice(1));\n                                if (ret != null)\n                                        return ret;\n                        }\n                        gen = walkers[type];\n                        return gen.apply(ast, ast.slice(1));\n                } finally {\n                        stack.pop();\n                }\n        };\n\n        function with_walkers(walkers, cont){\n                var save = {}, i;\n                for (i in walkers) if (HOP(walkers, i)) {\n                        save[i] = user[i];\n                        user[i] = walkers[i];\n                }\n                var ret = cont();\n                for (i in save) if (HOP(save, i)) {\n                        if (!save[i]) delete user[i];\n                        else user[i] = save[i];\n                }\n                return ret;\n        };\n\n        return {\n                walk: walk,\n                with_walkers: with_walkers,\n                parent: function() {\n                        return stack[stack.length - 2]; // last one is current node\n                },\n                stack: function() {\n                        return stack;\n                }\n        };\n};\n\n/* -----[ Scope and mangling ]----- */\n\nfunction Scope(parent) {\n        this.names = {};        // names defined in this scope\n        this.mangled = {};      // mangled names (orig.name => mangled)\n        this.rev_mangled = {};  // reverse lookup (mangled => orig.name)\n        this.cname = -1;        // current mangled name\n        this.refs = {};         // names referenced from this scope\n        this.uses_with = false; // will become TRUE if with() is detected in this or any subscopes\n        this.uses_eval = false; // will become TRUE if eval() is detected in this or any subscopes\n        this.parent = parent;   // parent scope\n        this.children = [];     // sub-scopes\n        if (parent) {\n                this.level = parent.level + 1;\n                parent.children.push(this);\n        } else {\n                this.level = 0;\n        }\n};\n\nvar base54 = (function(){\n        var DIGITS = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_\";\n        return function(num) {\n                var ret = \"\";\n                do {\n                        ret = DIGITS.charAt(num % 54) + ret;\n                        num = Math.floor(num / 54);\n                } while (num > 0);\n                return ret;\n        };\n})();\n\nScope.prototype = {\n        has: function(name) {\n                for (var s = this; s; s = s.parent)\n                        if (HOP(s.names, name))\n                                return s;\n        },\n        has_mangled: function(mname) {\n                for (var s = this; s; s = s.parent)\n                        if (HOP(s.rev_mangled, mname))\n                                return s;\n        },\n        toJSON: function() {\n                return {\n                        names: this.names,\n                        uses_eval: this.uses_eval,\n                        uses_with: this.uses_with\n                };\n        },\n\n        next_mangled: function() {\n                // we must be careful that the new mangled name:\n                //\n                // 1. doesn't shadow a mangled name from a parent\n                //    scope, unless we don't reference the original\n                //    name from this scope OR from any sub-scopes!\n                //    This will get slow.\n                //\n                // 2. doesn't shadow an original name from a parent\n                //    scope, in the event that the name is not mangled\n                //    in the parent scope and we reference that name\n                //    here OR IN ANY SUBSCOPES!\n                //\n                // 3. doesn't shadow a name that is referenced but not\n                //    defined (possibly global defined elsewhere).\n                for (;;) {\n                        var m = base54(++this.cname), prior;\n\n                        // case 1.\n                        prior = this.has_mangled(m);\n                        if (prior && this.refs[prior.rev_mangled[m]] === prior)\n                                continue;\n\n                        // case 2.\n                        prior = this.has(m);\n                        if (prior && prior !== this && this.refs[m] === prior && !prior.has_mangled(m))\n                                continue;\n\n                        // case 3.\n                        if (HOP(this.refs, m) && this.refs[m] == null)\n                                continue;\n\n                        // I got \"do\" once. :-/\n                        if (!is_identifier(m))\n                                continue;\n\n                        return m;\n                }\n        },\n        set_mangle: function(name, m) {\n                this.rev_mangled[m] = name;\n                return this.mangled[name] = m;\n        },\n        get_mangled: function(name, newMangle) {\n                if (this.uses_eval || this.uses_with) return name; // no mangle if eval or with is in use\n                var s = this.has(name);\n                if (!s) return name; // not in visible scope, no mangle\n                if (HOP(s.mangled, name)) return s.mangled[name]; // already mangled in this scope\n                if (!newMangle) return name;                      // not found and no mangling requested\n                return s.set_mangle(name, s.next_mangled());\n        },\n        define: function(name) {\n                if (name != null)\n                        return this.names[name] = name;\n        }\n};\n\nfunction ast_add_scope(ast) {\n\n        var current_scope = null;\n        var w = ast_walker(), walk = w.walk;\n        var having_eval = [];\n\n        function with_new_scope(cont) {\n                current_scope = new Scope(current_scope);\n                var ret = current_scope.body = cont();\n                ret.scope = current_scope;\n                current_scope = current_scope.parent;\n                return ret;\n        };\n\n        function define(name) {\n                return current_scope.define(name);\n        };\n\n        function reference(name) {\n                current_scope.refs[name] = true;\n        };\n\n        function _lambda(name, args, body) {\n                var is_defun = this[0] == \"defun\";\n                return [ this[0], is_defun ? define(name) : name, args, with_new_scope(function(){\n                        if (!is_defun) define(name);\n                        MAP(args, define);\n                        return MAP(body, walk);\n                })];\n        };\n\n        return with_new_scope(function(){\n                // process AST\n                var ret = w.with_walkers({\n                        \"function\": _lambda,\n                        \"defun\": _lambda,\n                        \"with\": function(expr, block) {\n                                for (var s = current_scope; s; s = s.parent)\n                                        s.uses_with = true;\n                        },\n                        \"var\": function(defs) {\n                                MAP(defs, function(d){ define(d[0]) });\n                        },\n                        \"const\": function(defs) {\n                                MAP(defs, function(d){ define(d[0]) });\n                        },\n                        \"try\": function(t, c, f) {\n                                if (c != null) return [\n                                        this[0],\n                                        MAP(t, walk),\n                                        [ define(c[0]), MAP(c[1], walk) ],\n                                        f != null ? MAP(f, walk) : null\n                                ];\n                        },\n                        \"name\": function(name) {\n                                if (name == \"eval\")\n                                        having_eval.push(current_scope);\n                                reference(name);\n                        }\n                }, function(){\n                        return walk(ast);\n                });\n\n                // the reason why we need an additional pass here is\n                // that names can be used prior to their definition.\n\n                // scopes where eval was detected and their parents\n                // are marked with uses_eval, unless they define the\n                // \"eval\" name.\n                MAP(having_eval, function(scope){\n                        if (!scope.has(\"eval\")) while (scope) {\n                                scope.uses_eval = true;\n                                scope = scope.parent;\n                        }\n                });\n\n                // for referenced names it might be useful to know\n                // their origin scope.  current_scope here is the\n                // toplevel one.\n                function fixrefs(scope, i) {\n                        // do children first; order shouldn't matter\n                        for (i = scope.children.length; --i >= 0;)\n                                fixrefs(scope.children[i]);\n                        for (i in scope.refs) if (HOP(scope.refs, i)) {\n                                // find origin scope and propagate the reference to origin\n                                for (var origin = scope.has(i), s = scope; s; s = s.parent) {\n                                        s.refs[i] = origin;\n                                        if (s === origin) break;\n                                }\n                        }\n                };\n                fixrefs(current_scope);\n\n                return ret;\n        });\n\n};\n\n/* -----[ mangle names ]----- */\n\nfunction ast_mangle(ast, options) {\n        var w = ast_walker(), walk = w.walk, scope;\n        options = options || {};\n\n        function get_mangled(name, newMangle) {\n                if (!options.toplevel && !scope.parent) return name; // don't mangle toplevel\n                if (options.except && member(name, options.except))\n                        return name;\n                return scope.get_mangled(name, newMangle);\n        };\n\n        function get_define(name) {\n                if (options.defines) {\n                        // we always lookup a defined symbol for the current scope FIRST, so declared\n                        // vars trump a DEFINE symbol, but if no such var is found, then match a DEFINE value\n                        if (!scope.has(name)) {\n                                if (HOP(options.defines, name)) {\n                                        return options.defines[name];\n                                }\n                        }\n                        return null;\n                }\n        };\n\n        function _lambda(name, args, body) {\n                var is_defun = this[0] == \"defun\", extra;\n                if (name) {\n                        if (is_defun) name = get_mangled(name);\n                        else {\n                                extra = {};\n                                if (!(scope.uses_eval || scope.uses_with))\n                                        name = extra[name] = scope.next_mangled();\n                                else\n                                        extra[name] = name;\n                        }\n                }\n                body = with_scope(body.scope, function(){\n                        args = MAP(args, function(name){ return get_mangled(name) });\n                        return MAP(body, walk);\n                }, extra);\n                return [ this[0], name, args, body ];\n        };\n\n        function with_scope(s, cont, extra) {\n                var _scope = scope;\n                scope = s;\n                if (extra) for (var i in extra) if (HOP(extra, i)) {\n                        s.set_mangle(i, extra[i]);\n                }\n                for (var i in s.names) if (HOP(s.names, i)) {\n                        get_mangled(i, true);\n                }\n                var ret = cont();\n                ret.scope = s;\n                scope = _scope;\n                return ret;\n        };\n\n        function _vardefs(defs) {\n                return [ this[0], MAP(defs, function(d){\n                        return [ get_mangled(d[0]), walk(d[1]) ];\n                }) ];\n        };\n\n        return w.with_walkers({\n                \"function\": _lambda,\n                \"defun\": function() {\n                        // move function declarations to the top when\n                        // they are not in some block.\n                        var ast = _lambda.apply(this, arguments);\n                        switch (w.parent()[0]) {\n                            case \"toplevel\":\n                            case \"function\":\n                            case \"defun\":\n                                return MAP.at_top(ast);\n                        }\n                        return ast;\n                },\n                \"var\": _vardefs,\n                \"const\": _vardefs,\n                \"name\": function(name) {\n                        return get_define(name) || [ this[0], get_mangled(name) ];\n                },\n                \"try\": function(t, c, f) {\n                        return [ this[0],\n                                 MAP(t, walk),\n                                 c != null ? [ get_mangled(c[0]), MAP(c[1], walk) ] : null,\n                                 f != null ? MAP(f, walk) : null ];\n                },\n                \"toplevel\": function(body) {\n                        var self = this;\n                        return with_scope(self.scope, function(){\n                                return [ self[0], MAP(body, walk) ];\n                        });\n                }\n        }, function() {\n                return walk(ast_add_scope(ast));\n        });\n};\n\n/* -----[\n   - compress foo[\"bar\"] into foo.bar,\n   - remove block brackets {} where possible\n   - join consecutive var declarations\n   - various optimizations for IFs:\n     - if (cond) foo(); else bar();  ==>  cond?foo():bar();\n     - if (cond) foo();  ==>  cond&&foo();\n     - if (foo) return bar(); else return baz();  ==> return foo?bar():baz(); // also for throw\n     - if (foo) return bar(); else something();  ==> {if(foo)return bar();something()}\n   ]----- */\n\nvar warn = function(){};\n\nfunction best_of(ast1, ast2) {\n        return gen_code(ast1).length > gen_code(ast2[0] == \"stat\" ? ast2[1] : ast2).length ? ast2 : ast1;\n};\n\nfunction last_stat(b) {\n        if (b[0] == \"block\" && b[1] && b[1].length > 0)\n                return b[1][b[1].length - 1];\n        return b;\n}\n\nfunction aborts(t) {\n        if (t) {\n                t = last_stat(t);\n                if (t[0] == \"return\" || t[0] == \"break\" || t[0] == \"continue\" || t[0] == \"throw\")\n                        return true;\n        }\n};\n\nfunction boolean_expr(expr) {\n        return ( (expr[0] == \"unary-prefix\"\n                  && member(expr[1], [ \"!\", \"delete\" ])) ||\n\n                 (expr[0] == \"binary\"\n                  && member(expr[1], [ \"in\", \"instanceof\", \"==\", \"!=\", \"===\", \"!==\", \"<\", \"<=\", \">=\", \">\" ])) ||\n\n                 (expr[0] == \"binary\"\n                  && member(expr[1], [ \"&&\", \"||\" ])\n                  && boolean_expr(expr[2])\n                  && boolean_expr(expr[3])) ||\n\n                 (expr[0] == \"conditional\"\n                  && boolean_expr(expr[2])\n                  && boolean_expr(expr[3])) ||\n\n                 (expr[0] == \"assign\"\n                  && expr[1] === true\n                  && boolean_expr(expr[3])) ||\n\n                 (expr[0] == \"seq\"\n                  && boolean_expr(expr[expr.length - 1]))\n               );\n};\n\nfunction make_conditional(c, t, e) {\n    var make_real_conditional = function() {\n        if (c[0] == \"unary-prefix\" && c[1] == \"!\") {\n            return e ? [ \"conditional\", c[2], e, t ] : [ \"binary\", \"||\", c[2], t ];\n        } else {\n            return e ? [ \"conditional\", c, t, e ] : [ \"binary\", \"&&\", c, t ];\n        }\n    };\n    // shortcut the conditional if the expression has a constant value\n    return when_constant(c, function(ast, val){\n        warn_unreachable(val ? e : t);\n        return          (val ? t : e);\n    }, make_real_conditional);\n};\n\nfunction empty(b) {\n        return !b || (b[0] == \"block\" && (!b[1] || b[1].length == 0));\n};\n\nfunction is_string(node) {\n        return (node[0] == \"string\" ||\n                node[0] == \"unary-prefix\" && node[1] == \"typeof\" ||\n                node[0] == \"binary\" && node[1] == \"+\" &&\n                (is_string(node[2]) || is_string(node[3])));\n};\n\nvar when_constant = (function(){\n\n        var $NOT_CONSTANT = {};\n\n        // this can only evaluate constant expressions.  If it finds anything\n        // not constant, it throws $NOT_CONSTANT.\n        function evaluate(expr) {\n                switch (expr[0]) {\n                    case \"string\":\n                    case \"num\":\n                        return expr[1];\n                    case \"name\":\n                    case \"atom\":\n                        switch (expr[1]) {\n                            case \"true\": return true;\n                            case \"false\": return false;\n                        }\n                        break;\n                    case \"unary-prefix\":\n                        switch (expr[1]) {\n                            case \"!\": return !evaluate(expr[2]);\n                            case \"typeof\": return typeof evaluate(expr[2]);\n                            case \"~\": return ~evaluate(expr[2]);\n                            case \"-\": return -evaluate(expr[2]);\n                            case \"+\": return +evaluate(expr[2]);\n                        }\n                        break;\n                    case \"binary\":\n                        var left = expr[2], right = expr[3];\n                        switch (expr[1]) {\n                            case \"&&\"         : return evaluate(left) &&         evaluate(right);\n                            case \"||\"         : return evaluate(left) ||         evaluate(right);\n                            case \"|\"          : return evaluate(left) |          evaluate(right);\n                            case \"&\"          : return evaluate(left) &          evaluate(right);\n                            case \"^\"          : return evaluate(left) ^          evaluate(right);\n                            case \"+\"          : return evaluate(left) +          evaluate(right);\n                            case \"*\"          : return evaluate(left) *          evaluate(right);\n                            case \"/\"          : return evaluate(left) /          evaluate(right);\n                            case \"-\"          : return evaluate(left) -          evaluate(right);\n                            case \"<<\"         : return evaluate(left) <<         evaluate(right);\n                            case \">>\"         : return evaluate(left) >>         evaluate(right);\n                            case \">>>\"        : return evaluate(left) >>>        evaluate(right);\n                            case \"==\"         : return evaluate(left) ==         evaluate(right);\n                            case \"===\"        : return evaluate(left) ===        evaluate(right);\n                            case \"!=\"         : return evaluate(left) !=         evaluate(right);\n                            case \"!==\"        : return evaluate(left) !==        evaluate(right);\n                            case \"<\"          : return evaluate(left) <          evaluate(right);\n                            case \"<=\"         : return evaluate(left) <=         evaluate(right);\n                            case \">\"          : return evaluate(left) >          evaluate(right);\n                            case \">=\"         : return evaluate(left) >=         evaluate(right);\n                            case \"in\"         : return evaluate(left) in         evaluate(right);\n                            case \"instanceof\" : return evaluate(left) instanceof evaluate(right);\n                        }\n                }\n                throw $NOT_CONSTANT;\n        };\n\n        return function(expr, yes, no) {\n                try {\n                        var val = evaluate(expr), ast;\n                        switch (typeof val) {\n                            case \"string\": ast =  [ \"string\", val ]; break;\n                            case \"number\": ast =  [ \"num\", val ]; break;\n                            case \"boolean\": ast =  [ \"name\", String(val) ]; break;\n                            default: throw new Error(\"Can't handle constant of type: \" + (typeof val));\n                        }\n                        return yes.call(expr, ast, val);\n                } catch(ex) {\n                        if (ex === $NOT_CONSTANT) {\n                                if (expr[0] == \"binary\"\n                                    && (expr[1] == \"===\" || expr[1] == \"!==\")\n                                    && ((is_string(expr[2]) && is_string(expr[3]))\n                                        || (boolean_expr(expr[2]) && boolean_expr(expr[3])))) {\n                                        expr[1] = expr[1].substr(0, 2);\n                                }\n                                else if (no && expr[0] == \"binary\"\n                                         && (expr[1] == \"||\" || expr[1] == \"&&\")) {\n                                    // the whole expression is not constant but the lval may be...\n                                    try {\n                                        var lval = evaluate(expr[2]);\n                                        expr = ((expr[1] == \"&&\" && (lval ? expr[3] : lval))    ||\n                                                (expr[1] == \"||\" && (lval ? lval    : expr[3])) ||\n                                                expr);\n                                    } catch(ex2) {\n                                        // IGNORE... lval is not constant\n                                    }\n                                }\n                                return no ? no.call(expr, expr) : null;\n                        }\n                        else throw ex;\n                }\n        };\n\n})();\n\nfunction warn_unreachable(ast) {\n        if (!empty(ast))\n                warn(\"Dropping unreachable code: \" + gen_code(ast, true));\n};\n\nfunction prepare_ifs(ast) {\n        var w = ast_walker(), walk = w.walk;\n        // In this first pass, we rewrite ifs which abort with no else with an\n        // if-else.  For example:\n        //\n        // if (x) {\n        //     blah();\n        //     return y;\n        // }\n        // foobar();\n        //\n        // is rewritten into:\n        //\n        // if (x) {\n        //     blah();\n        //     return y;\n        // } else {\n        //     foobar();\n        // }\n        function redo_if(statements) {\n                statements = MAP(statements, walk);\n\n                for (var i = 0; i < statements.length; ++i) {\n                        var fi = statements[i];\n                        if (fi[0] != \"if\") continue;\n\n                        if (fi[3] && walk(fi[3])) continue;\n\n                        var t = walk(fi[2]);\n                        if (!aborts(t)) continue;\n\n                        var conditional = walk(fi[1]);\n\n                        var e_body = statements.slice(i + 1);\n                        var e;\n                        if (e_body.length == 1) e = e_body[0];\n                        else e = [ \"block\", e_body ];\n\n                        var ret = statements.slice(0, i).concat([ [\n                                fi[0],          // \"if\"\n                                conditional,    // conditional\n                                t,              // then\n                                e               // else\n                        ] ]);\n\n                        return redo_if(ret);\n                }\n\n                return statements;\n        };\n\n        function redo_if_lambda(name, args, body) {\n                body = redo_if(body);\n                return [ this[0], name, args.slice(), body ];\n        };\n\n        function redo_if_block(statements) {\n                var out = [ this[0] ];\n                if (statements != null)\n                        out.push(redo_if(statements));\n                return out;\n        };\n\n        return w.with_walkers({\n                \"defun\": redo_if_lambda,\n                \"function\": redo_if_lambda,\n                \"block\": redo_if_block,\n                \"splice\": redo_if_block,\n                \"toplevel\": function(statements) {\n                        return [ this[0], redo_if(statements) ];\n                },\n                \"try\": function(t, c, f) {\n                        return [\n                                this[0],\n                                redo_if(t),\n                                c != null ? [ c[0], redo_if(c[1]) ] : null,\n                                f != null ? redo_if(f) : null\n                        ];\n                }\n        }, function() {\n                return walk(ast);\n        });\n};\n\nfunction ast_squeeze(ast, options) {\n        options = defaults(options, {\n                make_seqs   : true,\n                dead_code   : true,\n                keep_comps  : true,\n                no_warnings : false\n        });\n\n        var w = ast_walker(), walk = w.walk, scope;\n\n        function negate(c) {\n                var not_c = [ \"unary-prefix\", \"!\", c ];\n                switch (c[0]) {\n                    case \"unary-prefix\":\n                        return c[1] == \"!\" && boolean_expr(c[2]) ? c[2] : not_c;\n                    case \"seq\":\n                        c = slice(c);\n                        c[c.length - 1] = negate(c[c.length - 1]);\n                        return c;\n                    case \"conditional\":\n                        return best_of(not_c, [ \"conditional\", c[1], negate(c[2]), negate(c[3]) ]);\n                    case \"binary\":\n                        var op = c[1], left = c[2], right = c[3];\n                        if (!options.keep_comps) switch (op) {\n                            case \"<=\"  : return [ \"binary\", \">\", left, right ];\n                            case \"<\"   : return [ \"binary\", \">=\", left, right ];\n                            case \">=\"  : return [ \"binary\", \"<\", left, right ];\n                            case \">\"   : return [ \"binary\", \"<=\", left, right ];\n                        }\n                        switch (op) {\n                            case \"==\"  : return [ \"binary\", \"!=\", left, right ];\n                            case \"!=\"  : return [ \"binary\", \"==\", left, right ];\n                            case \"===\" : return [ \"binary\", \"!==\", left, right ];\n                            case \"!==\" : return [ \"binary\", \"===\", left, right ];\n                            case \"&&\"  : return best_of(not_c, [ \"binary\", \"||\", negate(left), negate(right) ]);\n                            case \"||\"  : return best_of(not_c, [ \"binary\", \"&&\", negate(left), negate(right) ]);\n                        }\n                        break;\n                }\n                return not_c;\n        };\n\n        function with_scope(s, cont) {\n                var _scope = scope;\n                scope = s;\n                var ret = cont();\n                ret.scope = s;\n                scope = _scope;\n                return ret;\n        };\n\n        function rmblock(block) {\n                if (block != null && block[0] == \"block\" && block[1]) {\n                        if (block[1].length == 1)\n                                block = block[1][0];\n                        else if (block[1].length == 0)\n                                block = [ \"block\" ];\n                }\n                return block;\n        };\n\n        function _lambda(name, args, body) {\n                var is_defun = this[0] == \"defun\";\n                body = with_scope(body.scope, function(){\n                        var ret = tighten(MAP(body, walk), \"lambda\");\n                        if (!is_defun && name && !HOP(scope.refs, name))\n                                name = null;\n                        return ret;\n                });\n                return [ this[0], name, args, body ];\n        };\n\n        // we get here for blocks that have been already transformed.\n        // this function does a few things:\n        // 1. discard useless blocks\n        // 2. join consecutive var declarations\n        // 3. remove obviously dead code\n        // 4. transform consecutive statements using the comma operator\n        // 5. if block_type == \"lambda\" and it detects constructs like if(foo) return ... - rewrite like if (!foo) { ... }\n        function tighten(statements, block_type) {\n                statements = statements.reduce(function(a, stat){\n                        if (stat[0] == \"block\") {\n                                if (stat[1]) {\n                                        a.push.apply(a, stat[1]);\n                                }\n                        } else {\n                                a.push(stat);\n                        }\n                        return a;\n                }, []);\n\n                statements = (function(a, prev){\n                        statements.forEach(function(cur){\n                                if (prev && ((cur[0] == \"var\" && prev[0] == \"var\") ||\n                                             (cur[0] == \"const\" && prev[0] == \"const\"))) {\n                                        prev[1] = prev[1].concat(cur[1]);\n                                } else {\n                                        a.push(cur);\n                                        prev = cur;\n                                }\n                        });\n                        return a;\n                })([]);\n\n                if (options.dead_code) statements = (function(a, has_quit){\n                        statements.forEach(function(st){\n                                if (has_quit) {\n                                        if (member(st[0], [ \"function\", \"defun\" , \"var\", \"const\" ])) {\n                                                a.push(st);\n                                        }\n                                        else if (!options.no_warnings)\n                                                warn_unreachable(st);\n                                }\n                                else {\n                                        a.push(st);\n                                        if (member(st[0], [ \"return\", \"throw\", \"break\", \"continue\" ]))\n                                                has_quit = true;\n                                }\n                        });\n                        return a;\n                })([]);\n\n                if (options.make_seqs) statements = (function(a, prev) {\n                        statements.forEach(function(cur){\n                                if (prev && prev[0] == \"stat\" && cur[0] == \"stat\") {\n                                        prev[1] = [ \"seq\", prev[1], cur[1] ];\n                                } else {\n                                        a.push(cur);\n                                        prev = cur;\n                                }\n                        });\n                        return a;\n                })([]);\n\n                if (block_type == \"lambda\") statements = (function(i, a, stat){\n                        while (i < statements.length) {\n                                stat = statements[i++];\n                                if (stat[0] == \"if\" && !stat[3]) {\n                                        if (stat[2][0] == \"return\" && stat[2][1] == null) {\n                                                a.push(make_if(negate(stat[1]), [ \"block\", statements.slice(i) ]));\n                                                break;\n                                        }\n                                        var last = last_stat(stat[2]);\n                                        if (last[0] == \"return\" && last[1] == null) {\n                                                a.push(make_if(stat[1], [ \"block\", stat[2][1].slice(0, -1) ], [ \"block\", statements.slice(i) ]));\n                                                break;\n                                        }\n                                }\n                                a.push(stat);\n                        }\n                        return a;\n                })(0, []);\n\n                return statements;\n        };\n\n        function make_if(c, t, e) {\n                return when_constant(c, function(ast, val){\n                        if (val) {\n                                warn_unreachable(e);\n                                return t;\n                        } else {\n                                warn_unreachable(t);\n                                return e;\n                        }\n                }, function() {\n                        return make_real_if(c, t, e);\n                });\n        };\n\n        function make_real_if(c, t, e) {\n                c = walk(c);\n                t = walk(t);\n                e = walk(e);\n\n                if (empty(t)) {\n                        c = negate(c);\n                        t = e;\n                        e = null;\n                } else if (empty(e)) {\n                        e = null;\n                } else {\n                        // if we have both else and then, maybe it makes sense to switch them?\n                        (function(){\n                                var a = gen_code(c);\n                                var n = negate(c);\n                                var b = gen_code(n);\n                                if (b.length < a.length) {\n                                        var tmp = t;\n                                        t = e;\n                                        e = tmp;\n                                        c = n;\n                                }\n                        })();\n                }\n                if (empty(e) && empty(t))\n                        return [ \"stat\", c ];\n                var ret = [ \"if\", c, t, e ];\n                if (t[0] == \"if\" && empty(t[3]) && empty(e)) {\n                        ret = best_of(ret, walk([ \"if\", [ \"binary\", \"&&\", c, t[1] ], t[2] ]));\n                }\n                else if (t[0] == \"stat\") {\n                        if (e) {\n                                if (e[0] == \"stat\") {\n                                        ret = best_of(ret, [ \"stat\", make_conditional(c, t[1], e[1]) ]);\n                                }\n                        }\n                        else {\n                                ret = best_of(ret, [ \"stat\", make_conditional(c, t[1]) ]);\n                        }\n                }\n                else if (e && t[0] == e[0] && (t[0] == \"return\" || t[0] == \"throw\") && t[1] && e[1]) {\n                        ret = best_of(ret, [ t[0], make_conditional(c, t[1], e[1] ) ]);\n                }\n                else if (e && aborts(t)) {\n                        ret = [ [ \"if\", c, t ] ];\n                        if (e[0] == \"block\") {\n                                if (e[1]) ret = ret.concat(e[1]);\n                        }\n                        else {\n                                ret.push(e);\n                        }\n                        ret = walk([ \"block\", ret ]);\n                }\n                else if (t && aborts(e)) {\n                        ret = [ [ \"if\", negate(c), e ] ];\n                        if (t[0] == \"block\") {\n                                if (t[1]) ret = ret.concat(t[1]);\n                        } else {\n                                ret.push(t);\n                        }\n                        ret = walk([ \"block\", ret ]);\n                }\n                return ret;\n        };\n\n        function _do_while(cond, body) {\n                return when_constant(cond, function(cond, val){\n                        if (!val) {\n                                warn_unreachable(body);\n                                return [ \"block\" ];\n                        } else {\n                                return [ \"for\", null, null, null, walk(body) ];\n                        }\n                });\n        };\n\n        ast = prepare_ifs(ast);\n        ast = ast_add_scope(ast);\n\n        return w.with_walkers({\n                \"sub\": function(expr, subscript) {\n                        if (subscript[0] == \"string\") {\n                                var name = subscript[1];\n                                if (is_identifier(name))\n                                        return [ \"dot\", walk(expr), name ];\n                                else if (/^[1-9][0-9]*$/.test(name) || name === \"0\")\n                                        return [ \"sub\", walk(expr), [ \"num\", parseInt(name, 10) ] ];\n                        }\n                },\n                \"if\": make_if,\n                \"toplevel\": function(body) {\n                        return [ \"toplevel\", with_scope(this.scope, function(){\n                                return tighten(MAP(body, walk));\n                        }) ];\n                },\n                \"switch\": function(expr, body) {\n                        var last = body.length - 1;\n                        return [ \"switch\", walk(expr), MAP(body, function(branch, i){\n                                var block = tighten(MAP(branch[1], walk));\n                                if (i == last && block.length > 0) {\n                                        var node = block[block.length - 1];\n                                        if (node[0] == \"break\" && !node[1])\n                                                block.pop();\n                                }\n                                return [ branch[0] ? walk(branch[0]) : null, block ];\n                        }) ];\n                },\n                \"function\": _lambda,\n                \"defun\": _lambda,\n                \"block\": function(body) {\n                        if (body) return rmblock([ \"block\", tighten(MAP(body, walk)) ]);\n                },\n                \"binary\": function(op, left, right) {\n                        return when_constant([ \"binary\", op, walk(left), walk(right) ], function yes(c){\n                                return best_of(walk(c), this);\n                        }, function no() {\n                                return this;\n                        });\n                },\n                \"conditional\": function(c, t, e) {\n                        return make_conditional(walk(c), walk(t), walk(e));\n                },\n                \"try\": function(t, c, f) {\n                        return [\n                                \"try\",\n                                tighten(MAP(t, walk)),\n                                c != null ? [ c[0], tighten(MAP(c[1], walk)) ] : null,\n                                f != null ? tighten(MAP(f, walk)) : null\n                        ];\n                },\n                \"unary-prefix\": function(op, expr) {\n                        expr = walk(expr);\n                        var ret = [ \"unary-prefix\", op, expr ];\n                        if (op == \"!\")\n                                ret = best_of(ret, negate(expr));\n                        return when_constant(ret, function(ast, val){\n                                return walk(ast); // it's either true or false, so minifies to !0 or !1\n                        }, function() { return ret });\n                },\n                \"name\": function(name) {\n                        switch (name) {\n                            case \"true\": return [ \"unary-prefix\", \"!\", [ \"num\", 0 ]];\n                            case \"false\": return [ \"unary-prefix\", \"!\", [ \"num\", 1 ]];\n                        }\n                },\n                \"new\": function(ctor, args) {\n                        if (ctor[0] == \"name\" && ctor[1] == \"Array\" && !scope.has(\"Array\")) {\n                                if (args.length != 1) {\n                                        return [ \"array\", args ];\n                                } else {\n                                        return [ \"call\", [ \"name\", \"Array\" ], args ];\n                                }\n                        }\n                },\n                \"call\": function(expr, args) {\n                        if (expr[0] == \"name\" && expr[1] == \"Array\" && args.length != 1 && !scope.has(\"Array\")) {\n                                return [ \"array\", args ];\n                        }\n                },\n                \"while\": _do_while\n        }, function() {\n                return walk(ast);\n        });\n};\n\n/* -----[ re-generate code from the AST ]----- */\n\nvar DOT_CALL_NO_PARENS = jsp.array_to_hash([\n        \"name\",\n        \"array\",\n        \"object\",\n        \"string\",\n        \"dot\",\n        \"sub\",\n        \"call\",\n        \"regexp\"\n]);\n\nfunction make_string(str, ascii_only) {\n        var dq = 0, sq = 0;\n        str = str.replace(/[\\\\\\b\\f\\n\\r\\t\\x22\\x27\\u2028\\u2029]/g, function(s){\n                switch (s) {\n                    case \"\\\\\": return \"\\\\\\\\\";\n                    case \"\\b\": return \"\\\\b\";\n                    case \"\\f\": return \"\\\\f\";\n                    case \"\\n\": return \"\\\\n\";\n                    case \"\\r\": return \"\\\\r\";\n                    case \"\\t\": return \"\\\\t\";\n                    case \"\\u2028\": return \"\\\\u2028\";\n                    case \"\\u2029\": return \"\\\\u2029\";\n                    case '\"': ++dq; return '\"';\n                    case \"'\": ++sq; return \"'\";\n                }\n                return s;\n        });\n        if (ascii_only) str = to_ascii(str);\n        if (dq > sq) return \"'\" + str.replace(/\\x27/g, \"\\\\'\") + \"'\";\n        else return '\"' + str.replace(/\\x22/g, '\\\\\"') + '\"';\n};\n\nfunction to_ascii(str) {\n        return str.replace(/[\\u0080-\\uffff]/g, function(ch) {\n                var code = ch.charCodeAt(0).toString(16);\n                while (code.length < 4) code = \"0\" + code;\n                return \"\\\\u\" + code;\n        });\n};\n\nvar SPLICE_NEEDS_BRACKETS = jsp.array_to_hash([ \"if\", \"while\", \"do\", \"for\", \"for-in\", \"with\" ]);\n\nfunction gen_code(ast, options) {\n        options = defaults(options, {\n                indent_start : 0,\n                indent_level : 4,\n                quote_keys   : false,\n                space_colon  : false,\n                beautify     : false,\n                ascii_only   : false,\n                inline_script: false\n        });\n        var beautify = !!options.beautify;\n        var indentation = 0,\n            newline = beautify ? \"\\n\" : \"\",\n            space = beautify ? \" \" : \"\";\n\n        function encode_string(str) {\n                var ret = make_string(str, options.ascii_only);\n                if (options.inline_script)\n                        ret = ret.replace(/<\\x2fscript([>/\\t\\n\\f\\r ])/gi, \"<\\\\/script$1\");\n                return ret;\n        };\n\n        function make_name(name) {\n                name = name.toString();\n                if (options.ascii_only)\n                        name = to_ascii(name);\n                return name;\n        };\n\n        function indent(line) {\n                if (line == null)\n                        line = \"\";\n                if (beautify)\n                        line = repeat_string(\" \", options.indent_start + indentation * options.indent_level) + line;\n                return line;\n        };\n\n        function with_indent(cont, incr) {\n                if (incr == null) incr = 1;\n                indentation += incr;\n                try { return cont.apply(null, slice(arguments, 1)); }\n                finally { indentation -= incr; }\n        };\n\n        function add_spaces(a) {\n                if (beautify)\n                        return a.join(\" \");\n                var b = [];\n                for (var i = 0; i < a.length; ++i) {\n                        var next = a[i + 1];\n                        b.push(a[i]);\n                        if (next &&\n                            ((/[a-z0-9_\\x24]$/i.test(a[i].toString()) && /^[a-z0-9_\\x24]/i.test(next.toString())) ||\n                             (/[\\+\\-]$/.test(a[i].toString()) && /^[\\+\\-]/.test(next.toString())))) {\n                                b.push(\" \");\n                        }\n                }\n                return b.join(\"\");\n        };\n\n        function add_commas(a) {\n                return a.join(\",\" + space);\n        };\n\n        function parenthesize(expr) {\n                var gen = make(expr);\n                for (var i = 1; i < arguments.length; ++i) {\n                        var el = arguments[i];\n                        if ((el instanceof Function && el(expr)) || expr[0] == el)\n                                return \"(\" + gen + \")\";\n                }\n                return gen;\n        };\n\n        function best_of(a) {\n                if (a.length == 1) {\n                        return a[0];\n                }\n                if (a.length == 2) {\n                        var b = a[1];\n                        a = a[0];\n                        return a.length <= b.length ? a : b;\n                }\n                return best_of([ a[0], best_of(a.slice(1)) ]);\n        };\n\n        function needs_parens(expr) {\n                if (expr[0] == \"function\" || expr[0] == \"object\") {\n                        // dot/call on a literal function requires the\n                        // function literal itself to be parenthesized\n                        // only if it's the first \"thing\" in a\n                        // statement.  This means that the parent is\n                        // \"stat\", but it could also be a \"seq\" and\n                        // we're the first in this \"seq\" and the\n                        // parent is \"stat\", and so on.  Messy stuff,\n                        // but it worths the trouble.\n                        var a = slice($stack), self = a.pop(), p = a.pop();\n                        while (p) {\n                                if (p[0] == \"stat\") return true;\n                                if (((p[0] == \"seq\" || p[0] == \"call\" || p[0] == \"dot\" || p[0] == \"sub\" || p[0] == \"conditional\") && p[1] === self) ||\n                                    ((p[0] == \"binary\" || p[0] == \"assign\" || p[0] == \"unary-postfix\") && p[2] === self)) {\n                                        self = p;\n                                        p = a.pop();\n                                } else {\n                                        return false;\n                                }\n                        }\n                }\n                return !HOP(DOT_CALL_NO_PARENS, expr[0]);\n        };\n\n        function make_num(num) {\n                var str = num.toString(10), a = [ str.replace(/^0\\./, \".\") ], m;\n                if (Math.floor(num) === num) {\n                        a.push(\"0x\" + num.toString(16).toLowerCase(), // probably pointless\n                               \"0\" + num.toString(8)); // same.\n                        if ((m = /^(.*?)(0+)$/.exec(num))) {\n                                a.push(m[1] + \"e\" + m[2].length);\n                        }\n                } else if ((m = /^0?\\.(0+)(.*)$/.exec(num))) {\n                        a.push(m[2] + \"e-\" + (m[1].length + m[2].length),\n                               str.substr(str.indexOf(\".\")));\n                }\n                return best_of(a);\n        };\n\n        var generators = {\n                \"string\": encode_string,\n                \"num\": make_num,\n                \"name\": make_name,\n                \"toplevel\": function(statements) {\n                        return make_block_statements(statements)\n                                .join(newline + newline);\n                },\n                \"splice\": function(statements) {\n                        var parent = $stack[$stack.length - 2][0];\n                        if (HOP(SPLICE_NEEDS_BRACKETS, parent)) {\n                                // we need block brackets in this case\n                                return make_block.apply(this, arguments);\n                        } else {\n                                return MAP(make_block_statements(statements, true),\n                                           function(line, i) {\n                                                   // the first line is already indented\n                                                   return i > 0 ? indent(line) : line;\n                                           }).join(newline);\n                        }\n                },\n                \"block\": make_block,\n                \"var\": function(defs) {\n                        return \"var \" + add_commas(MAP(defs, make_1vardef)) + \";\";\n                },\n                \"const\": function(defs) {\n                        return \"const \" + add_commas(MAP(defs, make_1vardef)) + \";\";\n                },\n                \"try\": function(tr, ca, fi) {\n                        var out = [ \"try\", make_block(tr) ];\n                        if (ca) out.push(\"catch\", \"(\" + ca[0] + \")\", make_block(ca[1]));\n                        if (fi) out.push(\"finally\", make_block(fi));\n                        return add_spaces(out);\n                },\n                \"throw\": function(expr) {\n                        return add_spaces([ \"throw\", make(expr) ]) + \";\";\n                },\n                \"new\": function(ctor, args) {\n                        args = args.length > 0 ? \"(\" + add_commas(MAP(args, make)) + \")\" : \"\";\n                        return add_spaces([ \"new\", parenthesize(ctor, \"seq\", \"binary\", \"conditional\", \"assign\", function(expr){\n                                var w = ast_walker(), has_call = {};\n                                try {\n                                        w.with_walkers({\n                                                \"call\": function() { throw has_call },\n                                                \"function\": function() { return this }\n                                        }, function(){\n                                                w.walk(expr);\n                                        });\n                                } catch(ex) {\n                                        if (ex === has_call)\n                                                return true;\n                                        throw ex;\n                                }\n                        }) + args ]);\n                },\n                \"switch\": function(expr, body) {\n                        return add_spaces([ \"switch\", \"(\" + make(expr) + \")\", make_switch_block(body) ]);\n                },\n                \"break\": function(label) {\n                        var out = \"break\";\n                        if (label != null)\n                                out += \" \" + make_name(label);\n                        return out + \";\";\n                },\n                \"continue\": function(label) {\n                        var out = \"continue\";\n                        if (label != null)\n                                out += \" \" + make_name(label);\n                        return out + \";\";\n                },\n                \"conditional\": function(co, th, el) {\n                        return add_spaces([ parenthesize(co, \"assign\", \"seq\", \"conditional\"), \"?\",\n                                            parenthesize(th, \"seq\"), \":\",\n                                            parenthesize(el, \"seq\") ]);\n                },\n                \"assign\": function(op, lvalue, rvalue) {\n                        if (op && op !== true) op += \"=\";\n                        else op = \"=\";\n                        return add_spaces([ make(lvalue), op, parenthesize(rvalue, \"seq\") ]);\n                },\n                \"dot\": function(expr) {\n                        var out = make(expr), i = 1;\n                        if (expr[0] == \"num\") {\n                                if (!/\\./.test(expr[1]))\n                                        out += \".\";\n                        } else if (needs_parens(expr))\n                                out = \"(\" + out + \")\";\n                        while (i < arguments.length)\n                                out += \".\" + make_name(arguments[i++]);\n                        return out;\n                },\n                \"call\": function(func, args) {\n                        var f = make(func);\n                        if (needs_parens(func))\n                                f = \"(\" + f + \")\";\n                        return f + \"(\" + add_commas(MAP(args, function(expr){\n                                return parenthesize(expr, \"seq\");\n                        })) + \")\";\n                },\n                \"function\": make_function,\n                \"defun\": make_function,\n                \"if\": function(co, th, el) {\n                        var out = [ \"if\", \"(\" + make(co) + \")\", el ? make_then(th) : make(th) ];\n                        if (el) {\n                                out.push(\"else\", make(el));\n                        }\n                        return add_spaces(out);\n                },\n                \"for\": function(init, cond, step, block) {\n                        var out = [ \"for\" ];\n                        init = (init != null ? make(init) : \"\").replace(/;*\\s*$/, \";\" + space);\n                        cond = (cond != null ? make(cond) : \"\").replace(/;*\\s*$/, \";\" + space);\n                        step = (step != null ? make(step) : \"\").replace(/;*\\s*$/, \"\");\n                        var args = init + cond + step;\n                        if (args == \"; ; \") args = \";;\";\n                        out.push(\"(\" + args + \")\", make(block));\n                        return add_spaces(out);\n                },\n                \"for-in\": function(vvar, key, hash, block) {\n                        return add_spaces([ \"for\", \"(\" +\n                                            (vvar ? make(vvar).replace(/;+$/, \"\") : make(key)),\n                                            \"in\",\n                                            make(hash) + \")\", make(block) ]);\n                },\n                \"while\": function(condition, block) {\n                        return add_spaces([ \"while\", \"(\" + make(condition) + \")\", make(block) ]);\n                },\n                \"do\": function(condition, block) {\n                        return add_spaces([ \"do\", make(block), \"while\", \"(\" + make(condition) + \")\" ]) + \";\";\n                },\n                \"return\": function(expr) {\n                        var out = [ \"return\" ];\n                        if (expr != null) out.push(make(expr));\n                        return add_spaces(out) + \";\";\n                },\n                \"binary\": function(operator, lvalue, rvalue) {\n                        var left = make(lvalue), right = make(rvalue);\n                        // XXX: I'm pretty sure other cases will bite here.\n                        //      we need to be smarter.\n                        //      adding parens all the time is the safest bet.\n                        if (member(lvalue[0], [ \"assign\", \"conditional\", \"seq\" ]) ||\n                            lvalue[0] == \"binary\" && PRECEDENCE[operator] > PRECEDENCE[lvalue[1]]) {\n                                left = \"(\" + left + \")\";\n                        }\n                        if (member(rvalue[0], [ \"assign\", \"conditional\", \"seq\" ]) ||\n                            rvalue[0] == \"binary\" && PRECEDENCE[operator] >= PRECEDENCE[rvalue[1]] &&\n                            !(rvalue[1] == operator && member(operator, [ \"&&\", \"||\", \"*\" ]))) {\n                                right = \"(\" + right + \")\";\n                        }\n                        else if (!beautify && options.inline_script && (operator == \"<\" || operator == \"<<\")\n                                 && rvalue[0] == \"regexp\" && /^script/i.test(rvalue[1])) {\n                                right = \" \" + right;\n                        }\n                        return add_spaces([ left, operator, right ]);\n                },\n                \"unary-prefix\": function(operator, expr) {\n                        var val = make(expr);\n                        if (!(expr[0] == \"num\" || (expr[0] == \"unary-prefix\" && !HOP(OPERATORS, operator + expr[1])) || !needs_parens(expr)))\n                                val = \"(\" + val + \")\";\n                        return operator + (jsp.is_alphanumeric_char(operator.charAt(0)) ? \" \" : \"\") + val;\n                },\n                \"unary-postfix\": function(operator, expr) {\n                        var val = make(expr);\n                        if (!(expr[0] == \"num\" || (expr[0] == \"unary-postfix\" && !HOP(OPERATORS, operator + expr[1])) || !needs_parens(expr)))\n                                val = \"(\" + val + \")\";\n                        return val + operator;\n                },\n                \"sub\": function(expr, subscript) {\n                        var hash = make(expr);\n                        if (needs_parens(expr))\n                                hash = \"(\" + hash + \")\";\n                        return hash + \"[\" + make(subscript) + \"]\";\n                },\n                \"object\": function(props) {\n                        if (props.length == 0)\n                                return \"{}\";\n                        return \"{\" + newline + with_indent(function(){\n                                return MAP(props, function(p){\n                                        if (p.length == 3) {\n                                                // getter/setter.  The name is in p[0], the arg.list in p[1][2], the\n                                                // body in p[1][3] and type (\"get\" / \"set\") in p[2].\n                                                return indent(make_function(p[0], p[1][2], p[1][3], p[2]));\n                                        }\n                                        var key = p[0], val = make(p[1]);\n                                        if (options.quote_keys) {\n                                                key = encode_string(key);\n                                        } else if ((typeof key == \"number\" || !beautify && +key + \"\" == key)\n                                                   && parseFloat(key) >= 0) {\n                                                key = make_num(+key);\n                                        } else if (!is_identifier(key)) {\n                                                key = encode_string(key);\n                                        }\n                                        return indent(add_spaces(beautify && options.space_colon\n                                                                 ? [ key, \":\", val ]\n                                                                 : [ key + \":\", val ]));\n                                }).join(\",\" + newline);\n                        }) + newline + indent(\"}\");\n                },\n                \"regexp\": function(rx, mods) {\n                        return \"/\" + rx + \"/\" + mods;\n                },\n                \"array\": function(elements) {\n                        if (elements.length == 0) return \"[]\";\n                        return add_spaces([ \"[\", add_commas(MAP(elements, function(el){\n                                if (!beautify && el[0] == \"atom\" && el[1] == \"undefined\") return \"\";\n                                return parenthesize(el, \"seq\");\n                        })), \"]\" ]);\n                },\n                \"stat\": function(stmt) {\n                        return make(stmt).replace(/;*\\s*$/, \";\");\n                },\n                \"seq\": function() {\n                        return add_commas(MAP(slice(arguments), make));\n                },\n                \"label\": function(name, block) {\n                        return add_spaces([ make_name(name), \":\", make(block) ]);\n                },\n                \"with\": function(expr, block) {\n                        return add_spaces([ \"with\", \"(\" + make(expr) + \")\", make(block) ]);\n                },\n                \"atom\": function(name) {\n                        return make_name(name);\n                }\n        };\n\n        // The squeezer replaces \"block\"-s that contain only a single\n        // statement with the statement itself; technically, the AST\n        // is correct, but this can create problems when we output an\n        // IF having an ELSE clause where the THEN clause ends in an\n        // IF *without* an ELSE block (then the outer ELSE would refer\n        // to the inner IF).  This function checks for this case and\n        // adds the block brackets if needed.\n        function make_then(th) {\n                if (th[0] == \"do\") {\n                        // https://github.com/mishoo/UglifyJS/issues/#issue/57\n                        // IE croaks with \"syntax error\" on code like this:\n                        //     if (foo) do ... while(cond); else ...\n                        // we need block brackets around do/while\n                        return make([ \"block\", [ th ]]);\n                }\n                var b = th;\n                while (true) {\n                        var type = b[0];\n                        if (type == \"if\") {\n                                if (!b[3])\n                                        // no else, we must add the block\n                                        return make([ \"block\", [ th ]]);\n                                b = b[3];\n                        }\n                        else if (type == \"while\" || type == \"do\") b = b[2];\n                        else if (type == \"for\" || type == \"for-in\") b = b[4];\n                        else break;\n                }\n                return make(th);\n        };\n\n        function make_function(name, args, body, keyword) {\n                var out = keyword || \"function\";\n                if (name) {\n                        out += \" \" + make_name(name);\n                }\n                out += \"(\" + add_commas(MAP(args, make_name)) + \")\";\n                return add_spaces([ out, make_block(body) ]);\n        };\n\n        function make_block_statements(statements, noindent) {\n                for (var a = [], last = statements.length - 1, i = 0; i <= last; ++i) {\n                        var stat = statements[i];\n                        var code = make(stat);\n                        if (code != \";\") {\n                                if (!beautify && i == last) {\n                                        if ((stat[0] == \"while\" && empty(stat[2])) ||\n                                            (member(stat[0], [ \"for\", \"for-in\"] ) && empty(stat[4])) ||\n                                            (stat[0] == \"if\" && empty(stat[2]) && !stat[3]) ||\n                                            (stat[0] == \"if\" && stat[3] && empty(stat[3]))) {\n                                                code = code.replace(/;*\\s*$/, \";\");\n                                        } else {\n                                                code = code.replace(/;+\\s*$/, \"\");\n                                        }\n                                }\n                                a.push(code);\n                        }\n                }\n                return noindent ? a : MAP(a, indent);\n        };\n\n        function make_switch_block(body) {\n                var n = body.length;\n                if (n == 0) return \"{}\";\n                return \"{\" + newline + MAP(body, function(branch, i){\n                        var has_body = branch[1].length > 0, code = with_indent(function(){\n                                return indent(branch[0]\n                                              ? add_spaces([ \"case\", make(branch[0]) + \":\" ])\n                                              : \"default:\");\n                        }, 0.5) + (has_body ? newline + with_indent(function(){\n                                return make_block_statements(branch[1]).join(newline);\n                        }) : \"\");\n                        if (!beautify && has_body && i < n - 1)\n                                code += \";\";\n                        return code;\n                }).join(newline) + newline + indent(\"}\");\n        };\n\n        function make_block(statements) {\n                if (!statements) return \";\";\n                if (statements.length == 0) return \"{}\";\n                return \"{\" + newline + with_indent(function(){\n                        return make_block_statements(statements).join(newline);\n                }) + newline + indent(\"}\");\n        };\n\n        function make_1vardef(def) {\n                var name = def[0], val = def[1];\n                if (val != null)\n                        name = add_spaces([ make_name(name), \"=\", parenthesize(val, \"seq\") ]);\n                return name;\n        };\n\n        var $stack = [];\n\n        function make(node) {\n                var type = node[0];\n                var gen = generators[type];\n                if (!gen)\n                        throw new Error(\"Can't find generator for \\\"\" + type + \"\\\"\");\n                $stack.push(node);\n                var ret = gen.apply(type, node.slice(1));\n                $stack.pop();\n                return ret;\n        };\n\n        return make(ast);\n};\n\nfunction split_lines(code, max_line_length) {\n        var splits = [ 0 ];\n        jsp.parse(function(){\n                var next_token = jsp.tokenizer(code);\n                var last_split = 0;\n                var prev_token;\n                function current_length(tok) {\n                        return tok.pos - last_split;\n                };\n                function split_here(tok) {\n                        last_split = tok.pos;\n                        splits.push(last_split);\n                };\n                function custom(){\n                        var tok = next_token.apply(this, arguments);\n                        out: {\n                                if (prev_token) {\n                                        if (prev_token.type == \"keyword\") break out;\n                                }\n                                if (current_length(tok) > max_line_length) {\n                                        switch (tok.type) {\n                                            case \"keyword\":\n                                            case \"atom\":\n                                            case \"name\":\n                                            case \"punc\":\n                                                split_here(tok);\n                                                break out;\n                                        }\n                                }\n                        }\n                        prev_token = tok;\n                        return tok;\n                };\n                custom.context = function() {\n                        return next_token.context.apply(this, arguments);\n                };\n                return custom;\n        }());\n        return splits.map(function(pos, i){\n                return code.substring(pos, splits[i + 1] || code.length);\n        }).join(\"\\n\");\n};\n\n/* -----[ Utilities ]----- */\n\nfunction repeat_string(str, i) {\n        if (i <= 0) return \"\";\n        if (i == 1) return str;\n        var d = repeat_string(str, i >> 1);\n        d += d;\n        if (i & 1) d += str;\n        return d;\n};\n\nfunction defaults(args, defs) {\n        var ret = {};\n        if (args === true)\n                args = {};\n        for (var i in defs) if (HOP(defs, i)) {\n                ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];\n        }\n        return ret;\n};\n\nfunction is_identifier(name) {\n        return /^[a-z_$][a-z0-9_$]*$/i.test(name)\n                && name != \"this\"\n                && !HOP(jsp.KEYWORDS_ATOM, name)\n                && !HOP(jsp.RESERVED_WORDS, name)\n                && !HOP(jsp.KEYWORDS, name);\n};\n\nfunction HOP(obj, prop) {\n        return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n\n// some utilities\n\nvar MAP;\n\n(function(){\n        MAP = function(a, f, o) {\n                var ret = [];\n                for (var i = 0; i < a.length; ++i) {\n                        var val = f.call(o, a[i], i);\n                        if (val instanceof AtTop) ret.unshift(val.v);\n                        else ret.push(val);\n                }\n                return ret;\n        };\n        MAP.at_top = function(val) { return new AtTop(val) };\n        function AtTop(val) { this.v = val };\n})();\n\n/* -----[ Exports ]----- */\n\nexports.ast_walker = ast_walker;\nexports.ast_mangle = ast_mangle;\nexports.ast_squeeze = ast_squeeze;\nexports.gen_code = gen_code;\nexports.ast_add_scope = ast_add_scope;\nexports.set_logger = function(logger) { warn = logger };\nexports.make_string = make_string;\nexports.split_lines = split_lines;\nexports.MAP = MAP;\n\n// keep this last!\nexports.ast_squeeze_more = require(\"./squeeze-more\").ast_squeeze_more;\n\n});\ndefine('uglifyjs/index', [\"require\", \"exports\", \"module\", \"./parse-js\", \"./process\"], function(require, exports, module) {\n\n\n//convienence function(src, [options]);\nfunction uglify(orig_code, options){\n  options || (options = {});\n  var jsp = uglify.parser;\n  var pro = uglify.uglify;\n\n  var ast = jsp.parse(orig_code, options.strict_semicolons); // parse code and get the initial AST\n  ast = pro.ast_mangle(ast, options.mangle_options); // get a new AST with mangled names\n  ast = pro.ast_squeeze(ast, options.squeeze_options); // get an AST with compression optimizations\n  var final_code = pro.gen_code(ast, options.gen_options); // compressed code here\n  return final_code;\n};\n\nuglify.parser = require(\"./parse-js\");\nuglify.uglify = require(\"./process\");\n\nmodule.exports = uglify\n\n\n});\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint plusplus: false, strict: false */\n/*global define: false */\n\ndefine('parse', ['uglifyjs/index'], function (uglify) {\n    var parser = uglify.parser,\n        processor = uglify.uglify,\n        ostring = Object.prototype.toString,\n        isArray;\n\n    if (Array.isArray) {\n        isArray = Array.isArray;\n    } else {\n        isArray = function (it) {\n            return ostring.call(it) === \"[object Array]\";\n        };\n    }\n\n    /**\n     * Determines if the AST node is an array literal\n     */\n    function isArrayLiteral(node) {\n        return node[0] === 'array';\n    }\n\n    /**\n     * Determines if the AST node is an object literal\n     */\n    function isObjectLiteral(node) {\n        return node[0] === 'object';\n    }\n\n    /**\n     * Converts a regular JS array of strings to an AST node that\n     * represents that array.\n     * @param {Array} ary\n     * @param {Node} an AST node that represents an array of strings.\n     */\n    function toAstArray(ary) {\n        var output = [\n            'array',\n            []\n        ],\n        i, item;\n\n        for (i = 0; (item = ary[i]); i++) {\n            output[1].push([\n                'string',\n                item\n            ]);\n        }\n\n        return output;\n    }\n\n    /**\n     * Validates a node as being an object literal (like for i18n bundles)\n     * or an array literal with just string members. If an array literal,\n     * only return array members that are full strings. So the caller of\n     * this function should use the return value as the new value for the\n     * node.\n     *\n     * This function does not need to worry about comments, they are not\n     * present in this AST.\n     *\n     * @param {Node} node an AST node.\n     *\n     * @returns {Node} an AST node to use for the valid dependencies.\n     * If null is returned, then it means the input node was not a valid\n     * dependency.\n     */\n    function validateDeps(node) {\n        var newDeps = ['array', []],\n            arrayArgs, i, dep;\n\n        if (!node) {\n            return null;\n        }\n\n        if (isObjectLiteral(node) || node[0] === 'function') {\n            return node;\n        }\n\n        //Dependencies can be an object literal or an array.\n        if (!isArrayLiteral(node)) {\n            return null;\n        }\n\n        arrayArgs = node[1];\n\n        for (i = 0; i < arrayArgs.length; i++) {\n            dep = arrayArgs[i];\n            if (dep[0] === 'string') {\n                newDeps[1].push(dep);\n            }\n        }\n        return newDeps[1].length ? newDeps : null;\n    }\n\n    /**\n     * Main parse function. Returns a string of any valid require or define/require.def\n     * calls as part of one JavaScript source string.\n     * @param {String} fileName\n     * @param {String} fileContents\n     * @returns {String} JS source string or null, if no require or define/require.def\n     * calls are found.\n     */\n    function parse(fileName, fileContents) {\n        //Set up source input\n        var matches = [], result = null,\n            astRoot = parser.parse(fileContents);\n\n        parse.recurse(astRoot, function () {\n            var parsed = parse.callToString.apply(parse, arguments);\n            if (parsed) {\n                matches.push(parsed);\n            }\n        });\n\n        if (matches.length) {\n            result = matches.join(\"\\n\");\n        }\n\n        return result;\n    }\n\n    //Add some private methods to object for use in derived objects.\n    parse.isArray = isArray;\n    parse.isObjectLiteral = isObjectLiteral;\n    parse.isArrayLiteral = isArrayLiteral;\n\n    /**\n     * Handles parsing a file recursively for require calls.\n     * @param {Array} parentNode the AST node to start with.\n     * @param {Function} onMatch function to call on a parse match.\n     */\n    parse.recurse = function (parentNode, onMatch) {\n        var i, node;\n        if (isArray(parentNode)) {\n            for (i = 0; i < parentNode.length; i++) {\n                node = parentNode[i];\n                if (isArray(node)) {\n                    this.parseNode(node, onMatch);\n                    this.recurse(node, onMatch);\n                }\n            }\n        }\n    };\n\n    /**\n     * Determines if the file defines require().\n     * @param {String} fileName\n     * @param {String} fileContents\n     * @returns {Boolean}\n     */\n    parse.definesRequire = function (fileName, fileContents) {\n        var astRoot = parser.parse(fileContents);\n        return this.nodeHasRequire(astRoot);\n    };\n\n    /**\n     * Finds require(\"\") calls inside a CommonJS anonymous module wrapped in a\n     * define/require.def(function(require, exports, module){}) wrapper. These dependencies\n     * will be added to a modified define() call that lists the dependencies\n     * on the outside of the function.\n     * @param {String} fileName\n     * @param {String} fileContents\n     * @returns {Array} an array of module names that are dependencies. Always\n     * returns an array, but could be of length zero.\n     */\n    parse.getAnonDeps = function (fileName, fileContents) {\n        var astRoot = parser.parse(fileContents),\n            defFunc = this.findAnonRequireDefCallback(astRoot);\n\n        return parse.getAnonDepsFromNode(defFunc);\n    };\n\n    /**\n     * Finds require(\"\") calls inside a CommonJS anonymous module wrapped\n     * in a define function, given an AST node for the definition function.\n     * @param {Node} node the AST node for the definition function.\n     * @returns {Array} and array of dependency names. Can be of zero length.\n     */\n    parse.getAnonDepsFromNode = function (node) {\n        var deps = [],\n            funcArgLength;\n\n        if (node) {\n            this.findRequireDepNames(node, deps);\n\n            //If no deps, still add the standard CommonJS require, exports, module,\n            //in that order, to the deps, but only if specified as function args.\n            //In particular, if exports is used, it is favored over the return\n            //value of the function, so only add it if asked.\n            funcArgLength = node[2] && node[2].length;\n            if (funcArgLength) {\n                deps = (funcArgLength > 1 ? [\"require\", \"exports\", \"module\"] :\n                        [\"require\"]).concat(deps);\n            }\n        }\n        return deps;\n    };\n\n    /**\n     * Finds the function in require.def or define(function (require, exports, module){});\n     * @param {Array} node\n     * @returns {Boolean}\n     */\n    parse.findAnonRequireDefCallback = function (node) {\n        var callback, i, n, call, args;\n\n        if (isArray(node)) {\n            if (node[0] === 'call') {\n                call = node[1];\n                args = node[2];\n                if ((call[0] === 'name' && call[1] === 'define') ||\n                           (call[0] === 'dot' && call[1][1] === 'require' && call[2] === 'def')) {\n\n                    //There should only be one argument and it should be a function.\n                    if (args.length === 1 && args[0][0] === 'function') {\n                        return args[0];\n                    }\n\n                }\n            }\n\n            //Check child nodes\n            for (i = 0; i < node.length; i++) {\n                n = node[i];\n                if ((callback = this.findAnonRequireDefCallback(n))) {\n                    return callback;\n                }\n            }\n        }\n\n        return null;\n    };\n\n    /**\n     * Finds all dependencies specified in dependency arrays and inside\n     * simplified commonjs wrappers.\n     * @param {String} fileName\n     * @param {String} fileContents\n     *\n     * @returns {Array} an array of dependency strings. The dependencies\n     * have not been normalized, they may be relative IDs.\n     */\n    parse.findDependencies = function (fileName, fileContents) {\n        //This is a litle bit inefficient, it ends up with two uglifyjs parser\n        //calls. Can revisit later, but trying to build out larger functional\n        //pieces first.\n        var dependencies = parse.getAnonDeps(fileName, fileContents),\n            astRoot = parser.parse(fileContents),\n            i, dep;\n\n        parse.recurse(astRoot, function (callName, config, name, deps) {\n            //Normalize the input args.\n            if (name && isArrayLiteral(name)) {\n                deps = name;\n                name = null;\n            }\n\n            if (!(deps = validateDeps(deps)) || !isArrayLiteral(deps)) {\n                return;\n            }\n\n            for (i = 0; (dep = deps[1][i]); i++) {\n                dependencies.push(dep[1]);\n            }\n        });\n\n        return dependencies;\n    };\n\n    parse.findRequireDepNames = function (node, deps) {\n        var moduleName, i, n, call, args;\n\n        if (isArray(node)) {\n            if (node[0] === 'call') {\n                call = node[1];\n                args = node[2];\n\n                if (call[0] === 'name' && call[1] === 'require') {\n                    moduleName = args[0];\n                    if (moduleName[0] === 'string') {\n                        deps.push(moduleName[1]);\n                    }\n                }\n\n\n            }\n\n            //Check child nodes\n            for (i = 0; i < node.length; i++) {\n                n = node[i];\n                this.findRequireDepNames(n, deps);\n            }\n        }\n    };\n\n    /**\n     * Determines if a given node contains a require() definition.\n     * @param {Array} node\n     * @returns {Boolean}\n     */\n    parse.nodeHasRequire = function (node) {\n        if (this.isDefineNode(node)) {\n            return true;\n        }\n\n        if (isArray(node)) {\n            for (var i = 0, n; i < node.length; i++) {\n                n = node[i];\n                if (this.nodeHasRequire(n)) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    };\n\n    /**\n     * Is the given node the actual definition of define(). Actually uses\n     * the definition of define.amd to find require.\n     * @param {Array} node\n     * @returns {Boolean}\n     */\n    parse.isDefineNode = function (node) {\n        //Actually look for the define.amd = assignment, since\n        //that is more indicative of RequireJS vs a plain require definition.\n        var assign;\n        if (!node) {\n            return null;\n        }\n\n        if (node[0] === 'assign' && node[1] === true) {\n            assign = node[2];\n            if (assign[0] === 'dot' && assign[1][0] === 'name' &&\n                assign[1][1] === 'define' && assign[2] === 'amd') {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    function optionalString(node) {\n        var str = null;\n        if (node) {\n            str = parse.nodeToString(node);\n        }\n        return str;\n    }\n\n    /**\n     * Convert a require/require.def/define call to a string if it is a valid\n     * call via static analysis of dependencies.\n     * @param {String} callName the name of call (require or define)\n     * @param {Array} the config node inside the call\n     * @param {Array} the name node inside the call\n     * @param {Array} the deps node inside the call\n     */\n    parse.callToString = function (callName, config, name, deps) {\n        //If name is an array, it means it is an anonymous module,\n        //so adjust args appropriately. An anonymous module could\n        //have a FUNCTION as the name type, but just ignore those\n        //since we just want to find dependencies.\n        var configString, nameString, depString;\n        if (name && isArrayLiteral(name)) {\n            deps = name;\n            name = null;\n        }\n\n        if (!(deps = validateDeps(deps))) {\n            return null;\n        }\n\n        //Only serialize the call name, config, module name and dependencies,\n        //otherwise could get local variable names for module value.\n        configString = config && isObjectLiteral(config) && optionalString(config);\n        nameString = optionalString(name);\n        depString = optionalString(deps);\n\n        return callName + \"(\" +\n            (configString ? configString : \"\") +\n            (nameString ? (configString ? \",\" : \"\") + nameString : \"\") +\n            (depString ? (configString || nameString ? \",\" : \"\") + depString : \"\") +\n            \");\";\n    };\n\n    /**\n     * Determines if a specific node is a valid require or define/require.def call.\n     * @param {Array} node\n     * @param {Function} onMatch a function to call when a match is found.\n     * It is passed the match name, and the config, name, deps possible args.\n     * The config, name and deps args are not normalized.\n     *\n     * @returns {String} a JS source string with the valid require/define call.\n     * Otherwise null.\n     */\n    parse.parseNode = function (node, onMatch) {\n        var call, name, config, deps, args, cjsDeps;\n\n        if (!isArray(node)) {\n            return null;\n        }\n\n        if (node[0] === 'call') {\n            call = node[1];\n            args = node[2];\n\n            if (call) {\n                if (call[0] === 'name' && call[1] === 'require') {\n\n                    //It is a plain require() call.\n                    config = args[0];\n                    deps = args[1];\n                    if (isArrayLiteral(config)) {\n                        deps = config;\n                        config = null;\n                    }\n\n                    if (!(deps = validateDeps(deps))) {\n                        return null;\n                    }\n\n                    return onMatch(\"require\", null, null, deps);\n\n                } else if ((call[0] === 'name' && call[1] === 'define') ||\n                           (call[0] === 'dot' && call[1][1] === 'require' &&\n                            call[2] === 'def')) {\n\n                    //A define or require.def call\n                    name = args[0];\n                    deps = args[1];\n                    //Only allow define calls that match what is expected\n                    //in an AMD call:\n                    //* first arg should be string, array, function or object\n                    //* second arg optional, or array, function or object.\n                    //This helps weed out calls to a non-AMD define, but it is\n                    //not completely robust. Someone could create a define\n                    //function that still matches this shape, but this is the\n                    //best that is possible, and at least allows UglifyJS,\n                    //which does create its own internal define in one file,\n                    //to be inlined.\n                    if (((name[0] === 'string' || isArrayLiteral(name) ||\n                          name[0] === 'function' || isObjectLiteral(name))) &&\n                        (!deps || isArrayLiteral(deps) ||\n                         deps[0] === 'function' || isObjectLiteral(deps))) {\n\n                        //If first arg is a function, could be a commonjs wrapper,\n                        //look inside for commonjs dependencies.\n                        if (name && name[0] === 'function') {\n                            cjsDeps = parse.getAnonDepsFromNode(name);\n                            if (cjsDeps.length) {\n                                name = toAstArray(cjsDeps);\n                            }\n                        }\n\n                        return onMatch(\"define\", null, name, deps);\n                    }\n                }\n            }\n        }\n\n        return null;\n    };\n\n    /**\n     * Converts an AST node into a JS source string. Does not maintain formatting\n     * or even comments from original source, just returns valid JS source.\n     * @param {Array} node\n     * @returns {String} a JS source string.\n     */\n    parse.nodeToString = function (node) {\n        return processor.gen_code(node, true);\n    };\n\n    return parse;\n});\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint regexp: false, strict: false  */\n/*global define: false */\n\ndefine('pragma', function () {\n\n    function Temp() {}\n\n    function create(obj, mixin) {\n        Temp.prototype = obj;\n        var temp = new Temp(), prop;\n\n        //Avoid any extra memory hanging around\n        Temp.prototype = null;\n\n        if (mixin) {\n            for (prop in mixin) {\n                if (mixin.hasOwnProperty(prop) && !(prop in temp)) {\n                    temp[prop] = mixin[prop];\n                }\n            }\n        }\n\n        return temp; // Object\n    }\n\n    var pragma = {\n        conditionalRegExp: /(exclude|include)Start\\s*\\(\\s*[\"'](\\w+)[\"']\\s*,(.*)\\)/,\n        useStrictRegExp: /['\"]use strict['\"];/g,\n        hasRegExp: /has\\s*\\(\\s*['\"]([^'\"]+)['\"]\\)/g,\n        nsRegExp: /(^|[^\\.])(requirejs|require|define)\\s*\\(/,\n        apiDefRegExp: /var requirejs, require, define;/,\n\n        removeStrict: function (contents, config) {\n            return config.useStrict ? contents : contents.replace(pragma.useStrictRegExp, '');\n        },\n\n        namespace: function (fileContents, ns, onLifecycleName) {\n            if (ns) {\n                //Namespace require/define calls\n                fileContents = fileContents.replace(pragma.nsRegExp, '$1' + ns + '.$2(');\n\n                //Check for require.js with the require/define definitions\n                if (pragma.apiDefRegExp.test(fileContents) &&\n                    fileContents.indexOf(\"if (typeof \" + ns + \" === 'undefined')\") === -1) {\n                    //Wrap the file contents in a typeof check, and a function\n                    //to contain the API globals.\n                    fileContents = \"var \" + ns + \";(function () { if (typeof \" +\n                                    ns + \" === 'undefined') {\\n\" +\n                                    ns + ' = {};\\n' +\n                                    fileContents +\n                                    \"\\n}\\n\" +\n                                    ns + \".requirejs = requirejs;\" +\n                                    ns + \".require = require;\" +\n                                    ns + \".define = define;\\n\" +\n                                    \"}());\";\n                }\n            }\n\n            return fileContents;\n        },\n\n        /**\n         * processes the fileContents for some //>> conditional statements\n         */\n        process: function (fileName, fileContents, config, onLifecycleName) {\n            /*jslint evil: true */\n            var foundIndex = -1, startIndex = 0, lineEndIndex, conditionLine,\n                matches, type, marker, condition, isTrue, endRegExp, endMatches,\n                endMarkerIndex, shouldInclude, startLength, lifecycleHas,\n                lifecyclePragmas, pragmas = config.pragmas, hasConfig = config.has,\n                //Legacy arg defined to help in dojo conversion script. Remove later\n                //when dojo no longer needs conversion:\n                kwArgs = pragmas;\n\n            //Mix in a specific lifecycle scoped object, to allow targeting\n            //some pragmas/has tests to only when files are saved, or at different\n            //lifecycle events. Do not bother with kwArgs in this section, since\n            //the old dojo kwArgs were for all points in the build lifecycle.\n            if (onLifecycleName) {\n                lifecyclePragmas = config['pragmas' + onLifecycleName];\n                lifecycleHas = config['has' + onLifecycleName];\n\n                if (lifecyclePragmas) {\n                    pragmas = create(pragmas || {}, lifecyclePragmas);\n                }\n\n                if (lifecycleHas) {\n                    hasConfig = create(hasConfig || {}, lifecycleHas);\n                }\n            }\n\n            //Replace has references if desired\n            if (hasConfig) {\n                fileContents = fileContents.replace(pragma.hasRegExp, function (match, test) {\n                    if (test in hasConfig) {\n                        return !!hasConfig[test];\n                    }\n                    return match;\n                });\n            }\n\n            //Do namespacing\n            if (onLifecycleName === 'OnSave' && config.namespace) {\n                fileContents = pragma.namespace(fileContents, config.namespace, onLifecycleName);\n            }\n\n            //If pragma work is not desired, skip it.\n            if (config.skipPragmas) {\n                return pragma.removeStrict(fileContents, config);\n            }\n\n            while ((foundIndex = fileContents.indexOf(\"//>>\", startIndex)) !== -1) {\n                //Found a conditional. Get the conditional line.\n                lineEndIndex = fileContents.indexOf(\"\\n\", foundIndex);\n                if (lineEndIndex === -1) {\n                    lineEndIndex = fileContents.length - 1;\n                }\n\n                //Increment startIndex past the line so the next conditional search can be done.\n                startIndex = lineEndIndex + 1;\n\n                //Break apart the conditional.\n                conditionLine = fileContents.substring(foundIndex, lineEndIndex + 1);\n                matches = conditionLine.match(pragma.conditionalRegExp);\n                if (matches) {\n                    type = matches[1];\n                    marker = matches[2];\n                    condition = matches[3];\n                    isTrue = false;\n                    //See if the condition is true.\n                    try {\n                        isTrue = !!eval(\"(\" + condition + \")\");\n                    } catch (e) {\n                        throw \"Error in file: \" +\n                               fileName +\n                               \". Conditional comment: \" +\n                               conditionLine +\n                               \" failed with this error: \" + e;\n                    }\n\n                    //Find the endpoint marker.\n                    endRegExp = new RegExp('\\\\/\\\\/\\\\>\\\\>\\\\s*' + type + 'End\\\\(\\\\s*[\\'\"]' + marker + '[\\'\"]\\\\s*\\\\)', \"g\");\n                    endMatches = endRegExp.exec(fileContents.substring(startIndex, fileContents.length));\n                    if (endMatches) {\n                        endMarkerIndex = startIndex + endRegExp.lastIndex - endMatches[0].length;\n\n                        //Find the next line return based on the match position.\n                        lineEndIndex = fileContents.indexOf(\"\\n\", endMarkerIndex);\n                        if (lineEndIndex === -1) {\n                            lineEndIndex = fileContents.length - 1;\n                        }\n\n                        //Should we include the segment?\n                        shouldInclude = ((type === \"exclude\" && !isTrue) || (type === \"include\" && isTrue));\n\n                        //Remove the conditional comments, and optionally remove the content inside\n                        //the conditional comments.\n                        startLength = startIndex - foundIndex;\n                        fileContents = fileContents.substring(0, foundIndex) +\n                            (shouldInclude ? fileContents.substring(startIndex, endMarkerIndex) : \"\") +\n                            fileContents.substring(lineEndIndex + 1, fileContents.length);\n\n                        //Move startIndex to foundIndex, since that is the new position in the file\n                        //where we need to look for more conditionals in the next while loop pass.\n                        startIndex = foundIndex;\n                    } else {\n                        throw \"Error in file: \" +\n                              fileName +\n                              \". Cannot find end marker for conditional comment: \" +\n                              conditionLine;\n\n                    }\n                }\n            }\n\n            return pragma.removeStrict(fileContents, config);\n        }\n    };\n\n    return pragma;\n});\nif(env === 'node') {\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false */\n/*global define: false */\n\ndefine('node/optimize', {});\n\n}\n\nif(env === 'rhino') {\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint strict: false, plusplus: false */\n/*global define: false, java: false, Packages: false */\n\ndefine('rhino/optimize', ['logger'], function (logger) {\n\n    //Add .reduce to Rhino so UglifyJS can run in Rhino,\n    //inspired by https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce\n    //but rewritten for brevity, and to be good enough for use by UglifyJS.\n    if (!Array.prototype.reduce) {\n        Array.prototype.reduce = function (fn /*, initialValue */) {\n            var i = 0,\n                length = this.length,\n                accumulator;\n\n            if (arguments.length >= 2) {\n                accumulator = arguments[1];\n            } else {\n                do {\n                    if (i in this) {\n                        accumulator = this[i++];\n                        break;\n                    }\n                }\n                while (true);\n            }\n\n            for (; i < length; i++) {\n                if (i in this) {\n                    accumulator = fn.call(undefined, accumulator, this[i], i, this);\n                }\n            }\n\n            return accumulator;\n        };\n    }\n\n    var JSSourceFilefromCode, optimize;\n\n    //Bind to Closure compiler, but if it is not available, do not sweat it.\n    try {\n        JSSourceFilefromCode = java.lang.Class.forName('com.google.javascript.jscomp.JSSourceFile').getMethod('fromCode', [java.lang.String, java.lang.String]);\n    } catch (e) {}\n\n    //Helper for closure compiler, because of weird Java-JavaScript interactions.\n    function closurefromCode(filename, content) {\n        return JSSourceFilefromCode.invoke(null, [filename, content]);\n    }\n\n    optimize = {\n        closure: function (fileName, fileContents, keepLines, config) {\n            config = config || {};\n            var jscomp = Packages.com.google.javascript.jscomp,\n                flags = Packages.com.google.common.flags,\n                //Fake extern\n                externSourceFile = closurefromCode(\"fakeextern.js\", \" \"),\n                //Set up source input\n                jsSourceFile = closurefromCode(String(fileName), String(fileContents)),\n                options, option, FLAG_compilation_level, compiler,\n                Compiler = Packages.com.google.javascript.jscomp.Compiler,\n                result;\n\n            logger.trace(\"Minifying file: \" + fileName);\n\n            //Set up options\n            options = new jscomp.CompilerOptions();\n            for (option in config.CompilerOptions) {\n                // options are false by default and jslint wanted an if statement in this for loop\n                if (config.CompilerOptions[option]) {\n                    options[option] = config.CompilerOptions[option];\n                }\n\n            }\n            options.prettyPrint = keepLines || options.prettyPrint;\n\n            FLAG_compilation_level = jscomp.CompilationLevel[config.CompilationLevel || 'SIMPLE_OPTIMIZATIONS'];\n            FLAG_compilation_level.setOptionsForCompilationLevel(options);\n\n            //Trigger the compiler\n            Compiler.setLoggingLevel(Packages.java.util.logging.Level[config.loggingLevel || 'WARNING']);\n            compiler = new Compiler();\n\n            result = compiler.compile(externSourceFile, jsSourceFile, options);\n            if (!result.success) {\n                logger.error('Cannot closure compile file: ' + fileName + '. Skipping it.');\n            } else {\n                fileContents = compiler.toSource();\n            }\n\n            return fileContents;\n        }\n    };\n\n    return optimize;\n});\n}\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint plusplus: false, nomen: false, regexp: false, strict: false */\n/*global define: false */\n\ndefine('optimize', [ 'lang', 'logger', 'env!env/optimize', 'env!env/file', 'parse',\n         'pragma', 'uglifyjs/index'],\nfunction (lang,   logger,   envOptimize,        file,           parse,\n          pragma, uglify) {\n\n    var optimize,\n        cssImportRegExp = /\\@import\\s+(url\\()?\\s*([^);]+)\\s*(\\))?([\\w, ]*)(;)?/g,\n        cssUrlRegExp = /\\url\\(\\s*([^\\)]+)\\s*\\)?/g;\n\n    /**\n     * If an URL from a CSS url value contains start/end quotes, remove them.\n     * This is not done in the regexp, since my regexp fu is not that strong,\n     * and the CSS spec allows for ' and \" in the URL if they are backslash escaped.\n     * @param {String} url\n     */\n    function cleanCssUrlQuotes(url) {\n        //Make sure we are not ending in whitespace.\n        //Not very confident of the css regexps above that there will not be ending\n        //whitespace.\n        url = url.replace(/\\s+$/, \"\");\n\n        if (url.charAt(0) === \"'\" || url.charAt(0) === \"\\\"\") {\n            url = url.substring(1, url.length - 1);\n        }\n\n        return url;\n    }\n\n    /**\n     * Inlines nested stylesheets that have @import calls in them.\n     * @param {String} fileName\n     * @param {String} fileContents\n     * @param {String} [cssImportIgnore]\n     */\n    function flattenCss(fileName, fileContents, cssImportIgnore) {\n        //Find the last slash in the name.\n        fileName = fileName.replace(lang.backSlashRegExp, \"/\");\n        var endIndex = fileName.lastIndexOf(\"/\"),\n            //Make a file path based on the last slash.\n            //If no slash, so must be just a file name. Use empty string then.\n            filePath = (endIndex !== -1) ? fileName.substring(0, endIndex + 1) : \"\";\n\n        //Make sure we have a delimited ignore list to make matching faster\n        if (cssImportIgnore && cssImportIgnore.charAt(cssImportIgnore.length - 1) !== \",\") {\n            cssImportIgnore += \",\";\n        }\n\n        return fileContents.replace(cssImportRegExp, function (fullMatch, urlStart, importFileName, urlEnd, mediaTypes) {\n            //Only process media type \"all\" or empty media type rules.\n            if (mediaTypes && ((mediaTypes.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '')) !== \"all\")) {\n                return fullMatch;\n            }\n\n            importFileName = cleanCssUrlQuotes(importFileName);\n\n            //Ignore the file import if it is part of an ignore list.\n            if (cssImportIgnore && cssImportIgnore.indexOf(importFileName + \",\") !== -1) {\n                return fullMatch;\n            }\n\n            //Make sure we have a unix path for the rest of the operation.\n            importFileName = importFileName.replace(lang.backSlashRegExp, \"/\");\n\n            try {\n                //if a relative path, then tack on the filePath.\n                //If it is not a relative path, then the readFile below will fail,\n                //and we will just skip that import.\n                var fullImportFileName = importFileName.charAt(0) === \"/\" ? importFileName : filePath + importFileName,\n                    importContents = file.readFile(fullImportFileName), i,\n                    importEndIndex, importPath, fixedUrlMatch, colonIndex, parts;\n\n                //Make sure to flatten any nested imports.\n                importContents = flattenCss(fullImportFileName, importContents);\n\n                //Make the full import path\n                importEndIndex = importFileName.lastIndexOf(\"/\");\n\n                //Make a file path based on the last slash.\n                //If no slash, so must be just a file name. Use empty string then.\n                importPath = (importEndIndex !== -1) ? importFileName.substring(0, importEndIndex + 1) : \"\";\n\n                //Modify URL paths to match the path represented by this file.\n                importContents = importContents.replace(cssUrlRegExp, function (fullMatch, urlMatch) {\n                    fixedUrlMatch = cleanCssUrlQuotes(urlMatch);\n                    fixedUrlMatch = fixedUrlMatch.replace(lang.backSlashRegExp, \"/\");\n\n                    //Only do the work for relative URLs. Skip things that start with / or have\n                    //a protocol.\n                    colonIndex = fixedUrlMatch.indexOf(\":\");\n                    if (fixedUrlMatch.charAt(0) !== \"/\" && (colonIndex === -1 || colonIndex > fixedUrlMatch.indexOf(\"/\"))) {\n                        //It is a relative URL, tack on the path prefix\n                        urlMatch = importPath + fixedUrlMatch;\n                    } else {\n                        logger.trace(importFileName + \"\\n  URL not a relative URL, skipping: \" + urlMatch);\n                    }\n\n                    //Collapse .. and .\n                    parts = urlMatch.split(\"/\");\n                    for (i = parts.length - 1; i > 0; i--) {\n                        if (parts[i] === \".\") {\n                            parts.splice(i, 1);\n                        } else if (parts[i] === \"..\") {\n                            if (i !== 0 && parts[i - 1] !== \"..\") {\n                                parts.splice(i - 1, 2);\n                                i -= 1;\n                            }\n                        }\n                    }\n\n                    return \"url(\" + parts.join(\"/\") + \")\";\n                });\n\n                return importContents;\n            } catch (e) {\n                logger.trace(fileName + \"\\n  Cannot inline css import, skipping: \" + importFileName);\n                return fullMatch;\n            }\n        });\n    }\n\n    optimize = {\n        /**\n         * Optimizes a file that contains JavaScript content. Optionally collects\n         * plugin resources mentioned in a file, and then passes the content\n         * through an minifier if one is specified via config.optimize.\n         *\n         * @param {String} fileName the name of the file to optimize\n         * @param {String} outFileName the name of the file to use for the\n         * saved optimized content.\n         * @param {Object} config the build config object.\n         * @param {String} [moduleName] the module name to use for the file.\n         * Used for plugin resource collection.\n         * @param {Array} [pluginCollector] storage for any plugin resources\n         * found.\n         */\n        jsFile: function (fileName, outFileName, config, moduleName, pluginCollector) {\n            var parts = (config.optimize + \"\").split('.'),\n                optimizerName = parts[0],\n                keepLines = parts[1] === 'keepLines',\n                fileContents, optFunc, deps, i, dep;\n\n            fileContents = file.readFile(fileName);\n\n            //Apply pragmas/namespace renaming\n            fileContents = pragma.process(fileName, fileContents, config, 'OnSave');\n\n            //If there is a plugin collector, scan the file for plugin resources.\n            if (config.optimizeAllPluginResources && pluginCollector) {\n                try {\n                    deps = parse.findDependencies(fileName, fileContents);\n                    if (deps.length) {\n                        for (i = 0; (dep = deps[i]); i++) {\n                            if (dep.indexOf('!') !== -1) {\n                                (pluginCollector[moduleName] ||\n                                 (pluginCollector[moduleName] = [])).push(dep);\n                            }\n                        }\n                    }\n                } catch (e) {\n                    logger.error('Parse error looking for plugin resources in ' +\n                                 fileName + ', skipping.');\n                }\n            }\n\n            //Optimize the JS files if asked.\n            if (optimizerName && optimizerName !== 'none') {\n                optFunc = envOptimize[optimizerName] || optimize.optimizers[optimizerName];\n                if (!optFunc) {\n                    throw new Error('optimizer with name of \"' +\n                                    optimizerName +\n                                    '\" not found for this environment');\n                }\n                fileContents = optFunc(fileName, fileContents, keepLines,\n                                        config[optimizerName]);\n            }\n\n            file.saveUtf8File(outFileName, fileContents);\n        },\n\n        /**\n         * Optimizes one CSS file, inlining @import calls, stripping comments, and\n         * optionally removes line returns.\n         * @param {String} fileName the path to the CSS file to optimize\n         * @param {String} outFileName the path to save the optimized file.\n         * @param {Object} config the config object with the optimizeCss and\n         * cssImportIgnore options.\n         */\n        cssFile: function (fileName, outFileName, config) {\n            //Read in the file. Make sure we have a JS string.\n            var originalFileContents = file.readFile(fileName),\n                fileContents = flattenCss(fileName, originalFileContents, config.cssImportIgnore),\n                startIndex, endIndex;\n\n            //Do comment removal.\n            try {\n                startIndex = -1;\n                //Get rid of comments.\n                while ((startIndex = fileContents.indexOf(\"/*\")) !== -1) {\n                    endIndex = fileContents.indexOf(\"*/\", startIndex + 2);\n                    if (endIndex === -1) {\n                        throw \"Improper comment in CSS file: \" + fileName;\n                    }\n                    fileContents = fileContents.substring(0, startIndex) + fileContents.substring(endIndex + 2, fileContents.length);\n                }\n                //Get rid of newlines.\n                if (config.optimizeCss.indexOf(\".keepLines\") === -1) {\n                    fileContents = fileContents.replace(/[\\r\\n]/g, \"\");\n                    fileContents = fileContents.replace(/\\s+/g, \" \");\n                    fileContents = fileContents.replace(/\\{\\s/g, \"{\");\n                    fileContents = fileContents.replace(/\\s\\}/g, \"}\");\n                } else {\n                    //Remove multiple empty lines.\n                    fileContents = fileContents.replace(/(\\r\\n)+/g, \"\\r\\n\");\n                    fileContents = fileContents.replace(/(\\n)+/g, \"\\n\");\n                }\n            } catch (e) {\n                fileContents = originalFileContents;\n                logger.error(\"Could not optimized CSS file: \" + fileName + \", error: \" + e);\n            }\n\n            file.saveUtf8File(outFileName, fileContents);\n        },\n\n        /**\n         * Optimizes CSS files, inlining @import calls, stripping comments, and\n         * optionally removes line returns.\n         * @param {String} startDir the path to the top level directory\n         * @param {Object} config the config object with the optimizeCss and\n         * cssImportIgnore options.\n         */\n        css: function (startDir, config) {\n            if (config.optimizeCss.indexOf(\"standard\") !== -1) {\n                var i, fileName,\n                    fileList = file.getFilteredFileList(startDir, /\\.css$/, true);\n                if (fileList) {\n                    for (i = 0; i < fileList.length; i++) {\n                        fileName = fileList[i];\n                        logger.trace(\"Optimizing (\" + config.optimizeCss + \") CSS file: \" + fileName);\n                        optimize.cssFile(fileName, fileName, config);\n                    }\n                }\n            }\n        },\n\n        optimizers: {\n            uglify: function (fileName, fileContents, keepLines, config) {\n                var parser = uglify.parser,\n                    processor = uglify.uglify,\n                    ast, genCodeConfig;\n\n                config = config || {};\n                genCodeConfig = config.gen_codeOptions || keepLines;\n\n                logger.trace(\"Uglifying file: \" + fileName);\n\n                try {\n                    ast = parser.parse(fileContents, config.strict_semicolons);\n                    ast = processor.ast_mangle(ast, config.do_toplevel);\n                    ast = processor.ast_squeeze(ast, config.ast_squeezeOptions);\n\n                    fileContents = processor.gen_code(ast, genCodeConfig);\n                } catch (e) {\n                    logger.error('Cannot uglify file: ' + fileName + '. Skipping it. Error is:\\n' + e.toString());\n                }\n                return fileContents;\n            }\n        }\n    };\n\n    return optimize;\n});/**\n * @license RequireJS Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n/*\n * This file patches require.js to communicate with the build system.\n */\n\n/*jslint nomen: false, plusplus: false, regexp: false, strict: false */\n/*global require: false, define: true */\n\n//NOT asking for require as a dependency since the goal is to modify the\n//global require below\ndefine('requirePatch', [ 'env!env/file', 'pragma', 'parse'],\nfunction (file,           pragma,   parse) {\n\n    var allowRun = true;\n\n    //This method should be called when the patches to require should take hold.\n    return function () {\n        if (!allowRun) {\n            return;\n        }\n        allowRun = false;\n\n        var layer,\n            pluginBuilderRegExp = /([\"']?)pluginBuilder([\"']?)\\s*[=\\:]\\s*[\"']([^'\"\\s]+)[\"']/,\n            oldDef,\n            cachedFileContents = {};\n\n        /** Reset state for each build layer pass. */\n        require._buildReset = function () {\n            var oldContext = require.s.contexts._;\n\n            //Clear up the existing context.\n            delete require.s.contexts._;\n\n            //Set up new context, so the layer object can hold onto it.\n            require({});\n\n            layer = require._layer = {\n                buildPathMap: {},\n                buildFileToModule: {},\n                buildFilePaths: [],\n                loadedFiles: {},\n                modulesWithNames: {},\n                existingRequireUrl: \"\",\n                context: require.s.contexts._\n            };\n\n            //Set up a per-context list of plugins/pluginBuilders.\n            layer.context.pluginBuilders = {};\n            layer.context._plugins = {};\n\n            //Return the previous context in case it is needed, like for\n            //the basic config object.\n            return oldContext;\n        };\n\n        require._buildReset();\n\n        /**\n         * Makes sure the URL is something that can be supported by the\n         * optimization tool.\n         * @param {String} url\n         * @returns {Boolean}\n         */\n        require._isSupportedBuildUrl = function (url) {\n            //Ignore URLs with protocols or question marks, means either network\n            //access is needed to fetch it or it is too dynamic. Note that\n            //on Windows, full paths are used for some urls, which include\n            //the drive, like c:/something, so need to test for something other\n            //than just a colon.\n            return url.indexOf(\"://\") === -1 && url.indexOf(\"?\") === -1 &&\n                   url.indexOf('empty:') !== 0;\n        };\n\n        //Override require.def to catch modules that just define an object, so that\n        //a dummy require.def call is not put in the build file for them. They do\n        //not end up getting defined via require.execCb, so we need to catch them\n        //at the require.def call.\n        oldDef = require.def;\n\n        //This function signature does not have to be exact, just match what we\n        //are looking for.\n        define = require.def = function (name, obj) {\n            if (typeof name === \"string\") {\n                layer.modulesWithNames[name] = true;\n            }\n            return oldDef.apply(require, arguments);\n        };\n\n        //Add some utilities for plugins/pluginBuilders\n        require._readFile = file.readFile;\n        require._fileExists = function (path) {\n            return file.exists(path);\n        };\n\n        //Override load so that the file paths can be collected.\n        require.load = function (context, moduleName, url) {\n            /*jslint evil: true */\n            var contents, pluginBuilderMatch, builderName;\n\n            //Adjust the URL if it was not transformed to use baseUrl.\n            if (require.jsExtRegExp.test(moduleName)) {\n                url = context.config.dirBaseUrl + url;\n            }\n\n            context.loaded[moduleName] = false;\n            context.scriptCount += 1;\n\n            //Only handle urls that can be inlined, so that means avoiding some\n            //URLs like ones that require network access or may be too dynamic,\n            //like JSONP\n            if (require._isSupportedBuildUrl(url)) {\n                //Save the module name to path  and path to module name mappings.\n                layer.buildPathMap[moduleName] = url;\n                layer.buildFileToModule[url] = moduleName;\n\n                if (moduleName in context.plugins) {\n                    //plugins need to have their source evaled as-is.\n                    context._plugins[moduleName] = true;\n                }\n\n                try {\n                    if (url in cachedFileContents) {\n                        contents = cachedFileContents[url];\n                    } else {\n                        //Load the file contents, process for conditionals, then\n                        //evaluate it.\n                        contents = file.readFile(url);\n                        contents = pragma.process(url, contents, context.config, 'OnExecute');\n\n                        //Find out if the file contains a require() definition. Need to know\n                        //this so we can inject plugins right after it, but before they are needed,\n                        //and to make sure this file is first, so that require.def calls work.\n                        //This situation mainly occurs when the build is done on top of the output\n                        //of another build, where the first build may include require somewhere in it.\n                        if (!layer.existingRequireUrl && parse.definesRequire(url, contents)) {\n                            layer.existingRequireUrl = url;\n                        }\n\n                        if (moduleName in context.plugins) {\n                            //This is a loader plugin, check to see if it has a build extension,\n                            //otherwise the plugin will act as the plugin builder too.\n                            pluginBuilderMatch = pluginBuilderRegExp.exec(contents);\n                            if (pluginBuilderMatch) {\n                                //Load the plugin builder for the plugin contents.\n                                builderName = context.normalize(pluginBuilderMatch[3], moduleName);\n                                contents = file.readFile(context.nameToUrl(builderName));\n                            }\n                        }\n\n                        //Parse out the require and define calls.\n                        //Do this even for plugins in case they have their own\n                        //dependencies that may be separate to how the pluginBuilder works.\n                        if (!context._plugins[moduleName]) {\n                            contents = parse(url, contents);\n                        }\n\n                        cachedFileContents[url] = contents;\n                    }\n\n                    if (contents) {\n                        eval(contents);\n\n                        //Support anonymous modules.\n                        context.completeLoad(moduleName);\n                    }\n\n                } catch (e) {\n                    e.fileName = url;\n                    e.lineNumber = e.line;\n                    throw e;\n                }\n\n                // remember the list of dependencies for this layer.\n                layer.buildFilePaths.push(url);\n            }\n\n            //Mark the module loaded.\n            context.loaded[moduleName] = true;\n\n            //Get a handle on the pluginBuilder\n            if (context._plugins[moduleName]) {\n                context.pluginBuilders[moduleName] = context.defined[moduleName];\n            }\n        };\n\n        //This method is called when a plugin specifies a loaded value. Use\n        //this to track dependencies that do not go through require.load.\n        require.onPluginLoad = function (context, pluginName, name, value) {\n            var registeredName = pluginName + '!' + (name || '');\n            layer.buildFilePaths.push(registeredName);\n            //For plugins the real path is not knowable, use the name\n            //for both module to file and file to module mappings.\n            layer.buildPathMap[registeredName] = registeredName;\n            layer.buildFileToModule[registeredName] = registeredName;\n            layer.modulesWithNames[registeredName] = true;\n        };\n\n        //Marks the module as part of the loaded set, and puts\n        //it in the right position for output in the build layer,\n        //since require() already did the dependency checks and should have\n        //called this method already for those dependencies.\n        require.execCb = function (name, cb, args, exports) {\n            var url = name && layer.buildPathMap[name];\n            if (url && !layer.loadedFiles[url]) {\n                layer.loadedFiles[url] = true;\n                layer.modulesWithNames[name] = true;\n            }\n            if (cb.__requireJsBuild || layer.context._plugins[name]) {\n                return cb.apply(exports, args);\n            }\n            return undefined;\n        };\n    };\n});\n/**\n * @license RequireJS Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint plusplus: false, regexp: false, strict: false */\n/*global define: false, console: false */\n\ndefine('commonJs', ['env!env/file', 'uglifyjs/index'], function (file, uglify) {\n    var commonJs = {\n        depRegExp: /require\\s*\\(\\s*[\"']([\\w-_\\.\\/]+)[\"']\\s*\\)/g,\n\n        //Set this to false in non-rhino environments. If rhino, then it uses\n        //rhino's decompiler to remove comments before looking for require() calls,\n        //otherwise, it will use a crude regexp approach to remove comments. The\n        //rhino way is more robust, but he regexp is more portable across environments.\n        useRhino: true,\n\n        //Set to false if you do not want this file to log. Useful in environments\n        //like node where you want the work to happen without noise.\n        useLog: true,\n\n        convertDir: function (commonJsPath, savePath) {\n            var fileList, i,\n                jsFileRegExp = /\\.js$/,\n                fileName, convertedFileName, fileContents;\n\n            //Get list of files to convert.\n            fileList = file.getFilteredFileList(commonJsPath, /\\w/, true);\n\n            //Normalize on front slashes and make sure the paths do not end in a slash.\n            commonJsPath = commonJsPath.replace(/\\\\/g, \"/\");\n            savePath = savePath.replace(/\\\\/g, \"/\");\n            if (commonJsPath.charAt(commonJsPath.length - 1) === \"/\") {\n                commonJsPath = commonJsPath.substring(0, commonJsPath.length - 1);\n            }\n            if (savePath.charAt(savePath.length - 1) === \"/\") {\n                savePath = savePath.substring(0, savePath.length - 1);\n            }\n\n            //Cycle through all the JS files and convert them.\n            if (!fileList || !fileList.length) {\n                if (commonJs.useLog) {\n                    if (commonJsPath === \"convert\") {\n                        //A request just to convert one file.\n                        console.log('\\n\\n' + commonJs.convert(savePath, file.readFile(savePath)));\n                    } else {\n                        console.log(\"No files to convert in directory: \" + commonJsPath);\n                    }\n                }\n            } else {\n                for (i = 0; (fileName = fileList[i]); i++) {\n                    convertedFileName = fileName.replace(commonJsPath, savePath);\n\n                    //Handle JS files.\n                    if (jsFileRegExp.test(fileName)) {\n                        fileContents = file.readFile(fileName);\n                        fileContents = commonJs.convert(fileName, fileContents);\n                        file.saveUtf8File(convertedFileName, fileContents);\n                    } else {\n                        //Just copy the file over.\n                        file.copyFile(fileName, convertedFileName, true);\n                    }\n                }\n            }\n        },\n\n        /**\n         * Removes the comments from a string.\n         *\n         * @param {String} fileContents\n         * @param {String} fileName mostly used for informative reasons if an error.\n         *\n         * @returns {String} a string of JS with comments removed.\n         */\n        removeComments: function (fileContents, fileName) {\n            //Uglify's ast generation removes comments, so just convert to ast,\n            //then back to source code to get rid of comments.\n            return uglify.uglify.gen_code(uglify.parser.parse(fileContents), true);\n        },\n\n        /**\n         * Regexp for testing if there is already a require.def call in the file,\n         * in which case do not try to convert it.\n         */\n        defRegExp: /(require\\s*\\.\\s*def|define)\\s*\\(/,\n\n        /**\n         * Regexp for testing if there is a require([]) or require(function(){})\n         * call, indicating the file is already in requirejs syntax.\n         */\n        rjsRegExp: /require\\s*\\(\\s*(\\[|function)/,\n\n        /**\n         * Does the actual file conversion.\n         *\n         * @param {String} fileName the name of the file.\n         *\n         * @param {String} fileContents the contents of a file :)\n         *\n         * @param {Boolean} skipDeps if true, require(\"\") dependencies\n         * will not be searched, but the contents will just be wrapped in the\n         * standard require, exports, module dependencies. Only usable in sync\n         * environments like Node where the require(\"\") calls can be resolved on\n         * the fly.\n         *\n         * @returns {String} the converted contents\n         */\n        convert: function (fileName, fileContents, skipDeps) {\n            //Strip out comments.\n            try {\n                var deps = [], depName, match,\n                    //Remove comments\n                    tempContents = commonJs.removeComments(fileContents, fileName);\n\n                //First see if the module is not already RequireJS-formatted.\n                if (commonJs.defRegExp.test(tempContents) || commonJs.rjsRegExp.test(tempContents)) {\n                    return fileContents;\n                }\n\n                //Reset the regexp to start at beginning of file. Do this\n                //since the regexp is reused across files.\n                commonJs.depRegExp.lastIndex = 0;\n\n                if (!skipDeps) {\n                    //Find dependencies in the code that was not in comments.\n                    while ((match = commonJs.depRegExp.exec(tempContents))) {\n                        depName = match[1];\n                        if (depName) {\n                            deps.push('\"' + depName + '\"');\n                        }\n                    }\n                }\n\n                //Construct the wrapper boilerplate.\n                fileContents = 'define([\"require\", \"exports\", \"module\"' +\n                       (deps.length ? ', ' + deps.join(\",\") : '') + '], ' +\n                       'function(require, exports, module) {\\n' +\n                       fileContents +\n                       '\\n});\\n';\n            } catch (e) {\n                console.log(\"COULD NOT CONVERT: \" + fileName + \", so skipping it. Error was: \" + e);\n                return fileContents;\n            }\n\n            return fileContents;\n        }\n    };\n\n    return commonJs;\n});\n/**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*jslint regexp: false, plusplus: false, nomen: false, strict: false  */\n/*global define: false, require: false */\n\n\ndefine('build', [ 'lang', 'logger', 'env!env/file', 'parse', 'optimize', 'pragma',\n         'env!env/load', 'requirePatch'],\nfunction (lang,   logger,   file,          parse,    optimize,   pragma,\n          load,           requirePatch) {\n    var build, buildBaseConfig;\n\n    buildBaseConfig = {\n            appDir: \"\",\n            pragmas: {},\n            paths: {},\n            optimize: \"uglify\",\n            optimizeCss: \"standard.keepLines\",\n            inlineText: true,\n            isBuild: true,\n            optimizeAllPluginResources: false\n        };\n\n    /**\n     * If the path looks like an URL, throw an error. This is to prevent\n     * people from using URLs with protocols in the build config, since\n     * the optimizer is not set up to do network access. However, be\n     * sure to allow absolute paths on Windows, like C:\\directory.\n     */\n    function disallowUrls(path) {\n        if (path.indexOf('://') !== -1 && path !== 'empty:') {\n            throw new Error('Path is not supported: ' + path +\n                            '\\nOptimizer can only handle' +\n                            ' local paths. Download the locally if necessary' +\n                            ' and update the config to use a local path.');\n        }\n    }\n\n    function endsWithSlash(dirName) {\n        if (dirName.charAt(dirName.length - 1) !== \"/\") {\n            dirName += \"/\";\n        }\n        disallowUrls(dirName);\n        return dirName;\n    }\n\n    //Method used by plugin writeFile calls, defined up here to avoid\n    //jslint warning about \"making a function in a loop\".\n    function writeFile(name, contents) {\n        logger.trace('Saving plugin-optimized file: ' + name);\n        file.saveUtf8File(name, contents);\n    }\n\n    /**\n     * Main API entry point into the build. The args argument can either be\n     * an array of arguments (like the onese passed on a command-line),\n     * or it can be a JavaScript object that has the format of a build profile\n     * file.\n     *\n     * If it is an object, then in addition to the normal properties allowed in\n     * a build profile file, the object should contain one other property:\n     *\n     * The object could also contain a \"buildFile\" property, which is a string\n     * that is the file path to a build profile that contains the rest\n     * of the build profile directives.\n     *\n     * This function does not return a status, it should throw an error if\n     * there is a problem completing the build.\n     */\n    build = function (args) {\n        var buildFile, cmdConfig;\n\n        if (!args || lang.isArray(args)) {\n            if (!args || args.length < 1) {\n                logger.error(\"build.js buildProfile.js\\n\" +\n                      \"where buildProfile.js is the name of the build file (see example.build.js for hints on how to make a build file).\");\n                return undefined;\n            }\n\n            //Next args can include a build file path as well as other build args.\n            //build file path comes first. If it does not contain an = then it is\n            //a build file path. Otherwise, just all build args.\n            if (args[0].indexOf(\"=\") === -1) {\n                buildFile = args[0];\n                args.splice(0, 1);\n            }\n\n            //Remaining args are options to the build\n            cmdConfig = build.convertArrayToObject(args);\n            cmdConfig.buildFile = buildFile;\n        } else {\n            cmdConfig = args;\n        }\n\n        return build._run(cmdConfig);\n    };\n\n    build._run = function (cmdConfig) {\n        var buildFileContents = \"\",\n            pluginCollector = {},\n            buildPaths, fileName, fileNames,\n            prop, paths, i,\n            baseConfig, config,\n            modules, builtModule, srcPath, buildContext,\n            destPath, moduleName, moduleMap, parentModuleMap, context,\n            resources, resource, pluginProcessed = {}, plugin;\n\n        //Can now run the patches to require.js to allow it to be used for\n        //build generation. Do it here instead of at the top of the module\n        //because we want normal require behavior to load the build tool\n        //then want to switch to build mode.\n        requirePatch();\n\n        config = build.createConfig(cmdConfig);\n        paths = config.paths;\n\n        if (config.logLevel) {\n            logger.logLevel(config.logLevel);\n        }\n\n        if (!config.out && !config.cssIn) {\n            //This is not just a one-off file build but a full build profile, with\n            //lots of files to process.\n\n            //First copy all the baseUrl content\n            file.copyDir((config.appDir || config.baseUrl), config.dir, /\\w/, true);\n\n            //Adjust baseUrl if config.appDir is in play, and set up build output paths.\n            buildPaths = {};\n            if (config.appDir) {\n                //All the paths should be inside the appDir\n                buildPaths = paths;\n            } else {\n                //If no appDir, then make sure to copy the other paths to this directory.\n                for (prop in paths) {\n                    if (paths.hasOwnProperty(prop)) {\n                        //Set up build path for each path prefix.\n                        buildPaths[prop] = paths[prop] === 'empty:' ? 'empty:' : prop.replace(/\\./g, \"/\");\n\n                        //Make sure source path is fully formed with baseUrl,\n                        //if it is a relative URL.\n                        srcPath = paths[prop];\n                        if (srcPath.indexOf('/') !== 0 && srcPath.indexOf(':') === -1) {\n                            srcPath = config.baseUrl + srcPath;\n                        }\n\n                        destPath = config.dirBaseUrl + buildPaths[prop];\n\n                        //Skip empty: paths\n                        if (srcPath !== 'empty:') {\n                            //If the srcPath is a directory, copy the whole directory.\n                            if (file.exists(srcPath) && file.isDirectory(srcPath)) {\n                                //Copy files to build area. Copy all files (the /\\w/ regexp)\n                                file.copyDir(srcPath, destPath, /\\w/, true);\n                            } else {\n                                //Try a .js extension\n                                srcPath += '.js';\n                                destPath += '.js';\n                                file.copyFile(srcPath, destPath);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        //Figure out source file location for each module layer. Do this by seeding require\n        //with source area configuration. This is needed so that later the module layers\n        //can be manually copied over to the source area, since the build may be\n        //require multiple times and the above copyDir call only copies newer files.\n        require({\n            baseUrl: config.baseUrl,\n            paths: paths,\n            packagePaths: config.packagePaths,\n            packages: config.packages\n        });\n        buildContext = require.s.contexts._;\n        modules = config.modules;\n\n        if (modules) {\n            modules.forEach(function (module) {\n                if (module.name) {\n                    module._sourcePath = buildContext.nameToUrl(module.name);\n                    //If the module does not exist, and this is not a \"new\" module layer,\n                    //as indicated by a true \"create\" property on the module, and\n                    //it is not a plugin-loaded resource, then throw an error.\n                    if (!file.exists(module._sourcePath) && !module.create &&\n                        module.name.indexOf('!') === -1) {\n                        throw new Error(\"ERROR: module path does not exist: \" +\n                                        module._sourcePath + \" for module named: \" + module.name +\n                                        \". Path is relative to: \" + file.absPath('.'));\n                    }\n                }\n            });\n        }\n\n        if (config.out) {\n            //Just set up the _buildPath for the module layer.\n            require(config);\n            if (!config.cssIn) {\n                config.modules[0]._buildPath = config.out;\n            }\n        } else if (!config.cssIn) {\n            //Now set up the config for require to use the build area, and calculate the\n            //build file locations. Pass along any config info too.\n            baseConfig = {\n                baseUrl: config.dirBaseUrl,\n                paths: buildPaths\n            };\n\n            lang.mixin(baseConfig, config);\n            require(baseConfig);\n\n            if (modules) {\n                modules.forEach(function (module) {\n                    if (module.name) {\n                        module._buildPath = buildContext.nameToUrl(module.name, null);\n                        if (!module.create) {\n                            file.copyFile(module._sourcePath, module._buildPath);\n                        }\n                    }\n                });\n            }\n        }\n\n        //Run CSS optimizations before doing JS module tracing, to allow\n        //things like text loader plugins loading CSS to get the optimized\n        //CSS.\n        if (config.optimizeCss && config.optimizeCss !== \"none\") {\n            optimize.css(config.dir, config);\n        }\n\n        if (modules) {\n            //For each module layer, call require to calculate dependencies.\n            modules.forEach(function (module) {\n                module.layer = build.traceDependencies(module, config);\n            });\n\n            //Now build up shadow layers for anything that should be excluded.\n            //Do this after tracing dependencies for each module, in case one\n            //of those modules end up being one of the excluded values.\n            modules.forEach(function (module) {\n                if (module.exclude) {\n                    module.excludeLayers = [];\n                    module.exclude.forEach(function (exclude, i) {\n                        //See if it is already in the list of modules.\n                        //If not trace dependencies for it.\n                        module.excludeLayers[i] = build.findBuildModule(exclude, modules) ||\n                                                 {layer: build.traceDependencies({name: exclude}, config)};\n                    });\n                }\n            });\n\n            modules.forEach(function (module) {\n                if (module.exclude) {\n                    //module.exclude is an array of module names. For each one,\n                    //get the nested dependencies for it via a matching entry\n                    //in the module.excludeLayers array.\n                    module.exclude.forEach(function (excludeModule, i) {\n                        var excludeLayer = module.excludeLayers[i].layer, map = excludeLayer.buildPathMap, prop;\n                        for (prop in map) {\n                            if (map.hasOwnProperty(prop)) {\n                                build.removeModulePath(prop, map[prop], module.layer);\n                            }\n                        }\n                    });\n                }\n                if (module.excludeShallow) {\n                    //module.excludeShallow is an array of module names.\n                    //shallow exclusions are just that module itself, and not\n                    //its nested dependencies.\n                    module.excludeShallow.forEach(function (excludeShallowModule) {\n                        var path = module.layer.buildPathMap[excludeShallowModule];\n                        if (path) {\n                            build.removeModulePath(excludeShallowModule, path, module.layer);\n                        }\n                    });\n                }\n\n                //Flatten them and collect the build output for each module.\n                builtModule = build.flattenModule(module, module.layer, config);\n                file.saveUtf8File(module._buildPath, builtModule.text);\n                buildFileContents += builtModule.buildText;\n            });\n        }\n\n        //Do other optimizations.\n        if (config.out && !config.cssIn) {\n            //Just need to worry about one JS file.\n            fileName = config.modules[0]._buildPath;\n            optimize.jsFile(fileName, fileName, config);\n        } else if (!config.cssIn) {\n            //Normal optimizations across modules.\n\n            //JS optimizations.\n            fileNames = file.getFilteredFileList(config.dir, /\\.js$/, true);\n            for (i = 0; (fileName = fileNames[i]); i++) {\n                //Generate the module name from the config.dir root.\n                moduleName = fileName.replace(config.dir, '');\n                //Get rid of the extension\n                moduleName = moduleName.substring(0, moduleName.length - 3);\n                optimize.jsFile(fileName, fileName, config, moduleName, pluginCollector);\n            }\n\n            //Normalize all the plugin resources.\n            context = require.s.contexts._;\n\n            for (moduleName in pluginCollector) {\n                if (pluginCollector.hasOwnProperty(moduleName)) {\n                    parentModuleMap = context.makeModuleMap(moduleName);\n                    resources = pluginCollector[moduleName];\n                    for (i = 0; (resource = resources[i]); i++) {\n                        moduleMap = context.makeModuleMap(resource, parentModuleMap);\n                        if (!context.plugins[moduleMap.prefix]) {\n                            //Set the value in context.plugins so it\n                            //will be evaluated as a full plugin.\n                            context.plugins[moduleMap.prefix] = true;\n\n                            //Do not bother if the plugin is not available.\n                            if (!file.exists(require.toUrl(moduleMap.prefix + '.js'))) {\n                                continue;\n                            }\n\n                            //Rely on the require in the build environment\n                            //to be synchronous\n                            context.require([moduleMap.prefix]);\n\n                            //Now that the plugin is loaded, redo the moduleMap\n                            //since the plugin will need to normalize part of the path.\n                            moduleMap = context.makeModuleMap(resource, parentModuleMap);\n                        }\n\n                        //Only bother with plugin resources that can be handled\n                        //processed by the plugin, via support of the writeFile\n                        //method.\n                        if (!pluginProcessed[moduleMap.fullName]) {\n                            //Only do the work if the plugin was really loaded.\n                            //Using an internal access because the file may\n                            //not really be loaded.\n                            plugin = context.defined[moduleMap.prefix];\n                            if (plugin && plugin.writeFile) {\n                                plugin.writeFile(\n                                    moduleMap.prefix,\n                                    moduleMap.name,\n                                    require,\n                                    writeFile,\n                                    context.config\n                                );\n                            }\n\n                            pluginProcessed[moduleMap.fullName] = true;\n                        }\n                    }\n\n                }\n            }\n\n            //console.log('PLUGIN COLLECTOR: ' + JSON.stringify(pluginCollector, null, \"  \"));\n\n\n            //All module layers are done, write out the build.txt file.\n            file.saveUtf8File(config.dir + \"build.txt\", buildFileContents);\n        }\n\n        //If just have one CSS file to optimize, do that here.\n        if (config.cssIn) {\n            optimize.cssFile(config.cssIn, config.out, config);\n        }\n\n        //Print out what was built into which layers.\n        if (buildFileContents) {\n            logger.info(buildFileContents);\n            return buildFileContents;\n        }\n\n        return '';\n    };\n\n    /**\n     * Converts an array that has String members of \"name=value\"\n     * into an object, where the properties on the object are the names in the array.\n     * Also converts the strings \"true\" and \"false\" to booleans for the values.\n     * member name/value pairs, and converts some comma-separated lists into\n     * arrays.\n     * @param {Array} ary\n     */\n    build.convertArrayToObject = function (ary) {\n        var result = {}, i, separatorIndex, prop, value,\n            needArray = {\n                \"include\": true,\n                \"exclude\": true,\n                \"excludeShallow\": true\n            };\n\n        for (i = 0; i < ary.length; i++) {\n            separatorIndex = ary[i].indexOf(\"=\");\n            if (separatorIndex === -1) {\n                throw \"Malformed name/value pair: [\" + ary[i] + \"]. Format should be name=value\";\n            }\n\n            value = ary[i].substring(separatorIndex + 1, ary[i].length);\n            if (value === \"true\") {\n                value = true;\n            } else if (value === \"false\") {\n                value = false;\n            }\n\n            prop = ary[i].substring(0, separatorIndex);\n\n            //Convert to array if necessary\n            if (needArray[prop]) {\n                value = value.split(\",\");\n            }\n\n            if (prop.indexOf(\"paths.\") === 0) {\n                //Special handling of paths properties. paths.foo=bar is transformed\n                //to data.paths = {foo: 'bar'}\n                if (!result.paths) {\n                    result.paths = {};\n                }\n                prop = prop.substring(\"paths.\".length, prop.length);\n                result.paths[prop] = value;\n            } else {\n                result[prop] = value;\n            }\n        }\n        return result; //Object\n    };\n\n    build.makeAbsPath = function (path, absFilePath) {\n        //Add abspath if necessary. If path starts with a slash or has a colon,\n        //then already is an abolute path.\n        if (path.indexOf('/') !== 0 && path.indexOf(':') === -1) {\n            path = absFilePath +\n                   (absFilePath.charAt(absFilePath.length - 1) === '/' ? '' : '/') +\n                   path;\n            path = file.normalize(path);\n        }\n        return path.replace(lang.backSlashRegExp, '/');\n    };\n\n    /**\n     * Creates a config object for an optimization build.\n     * It will also read the build profile if it is available, to create\n     * the configuration.\n     *\n     * @param {Object} cfg config options that take priority\n     * over defaults and ones in the build file. These options could\n     * be from a command line, for instance.\n     *\n     * @param {Object} the created config object.\n     */\n    build.createConfig = function (cfg) {\n        /*jslint evil: true */\n        var config = {}, buildFileContents, buildFileConfig,\n            paths, props, i, prop, buildFile, absFilePath, originalBaseUrl;\n\n        lang.mixin(config, buildBaseConfig);\n        lang.mixin(config, cfg, true);\n\n        if (config.buildFile) {\n            //A build file exists, load it to get more config.\n            buildFile = file.absPath(config.buildFile);\n\n            //Find the build file, and make sure it exists, if this is a build\n            //that has a build profile, and not just command line args with an in=path\n            if (!file.exists(buildFile)) {\n                throw new Error(\"ERROR: build file does not exist: \" + buildFile);\n            }\n\n            absFilePath = config.baseUrl = file.absPath(file.parent(buildFile));\n            config.dir = config.baseUrl + \"/build/\";\n\n            //Load build file options.\n            buildFileContents = file.readFile(buildFile);\n            try {\n                buildFileConfig = eval(\"(\" + buildFileContents + \")\");\n            } catch (e) {\n                throw new Error(\"Build file \" + buildFile + \" is malformed: \" + e);\n            }\n            lang.mixin(config, buildFileConfig, true);\n\n            //Re-apply the override config values, things like command line\n            //args should take precedence over build file values.\n            lang.mixin(config, cfg, true);\n        } else {\n            if (!config.out && !config.cssIn) {\n                throw new Error(\"ERROR: 'out' or 'cssIn' option missing.\");\n            }\n            if (!config.out) {\n                throw new Error(\"ERROR: 'out' option missing.\");\n            } else {\n                config.out = config.out.replace(lang.backSlashRegExp, \"/\");\n            }\n\n            if (!config.cssIn && !cfg.baseUrl) {\n                throw new Error(\"ERROR: 'baseUrl' option missing.\");\n            }\n\n            //In this scenario, the absFile path is current directory\n            absFilePath = file.absPath('.');\n        }\n\n        if (config.out && !config.cssIn) {\n            //Just one file to optimize.\n\n            //Set up dummy module layer to build.\n            config.modules = [\n                {\n                    name: config.name,\n                    out: config.out,\n                    include: config.include,\n                    exclude: config.exclude,\n                    excludeShallow: config.excludeShallow\n                }\n            ];\n\n            //Does not have a build file, so set up some defaults.\n            //Optimizing CSS should not be allowed, unless explicitly\n            //asked for on command line. In that case the only task is\n            //to optimize a CSS file.\n            if (!cfg.optimizeCss) {\n                config.optimizeCss = \"none\";\n            }\n        }\n\n        //Adjust the path properties as appropriate.\n        //First make sure build paths use front slashes and end in a slash,\n        //and make sure they are aboslute paths.\n        props = [\"appDir\", \"dir\", \"baseUrl\"];\n        for (i = 0; (prop = props[i]); i++) {\n            if (config[prop]) {\n                config[prop] = config[prop].replace(lang.backSlashRegExp, \"/\");\n\n                //Add abspath if necessary.\n                if (prop === \"baseUrl\") {\n                    originalBaseUrl = config.baseUrl;\n                    if (config.appDir) {\n                        //If baseUrl with an appDir, the baseUrl is relative to\n                        //the appDir, *not* the absFilePath. appDir and dir are\n                        //made absolute before baseUrl, so this will work.\n                        config.baseUrl = build.makeAbsPath(originalBaseUrl, config.appDir);\n                        //Set up dir output baseUrl.\n                        config.dirBaseUrl = build.makeAbsPath(originalBaseUrl, config.dir);\n                    } else {\n                        //The dir output baseUrl is same as regular baseUrl, both\n                        //relative to the absFilePath.\n                        config.baseUrl = build.makeAbsPath(config[prop], absFilePath);\n                        config.dirBaseUrl = config.dir || config.baseUrl;\n                    }\n\n                    //Make sure dirBaseUrl ends in a slash, since it is\n                    //concatenated with other strings.\n                    config.dirBaseUrl = endsWithSlash(config.dirBaseUrl);\n                } else {\n                    config[prop] = build.makeAbsPath(config[prop], absFilePath);\n                }\n\n                config[prop] = endsWithSlash(config[prop]);\n            }\n        }\n\n        //Do not allow URLs for paths resources.\n        if (config.paths) {\n            for (prop in config.paths) {\n                if (config.paths.hasOwnProperty(prop)) {\n                    config.paths[prop] = config.paths[prop].replace(lang.backSlashRegExp, \"/\");\n                    disallowUrls(config.paths[prop]);\n                }\n            }\n        }\n\n        //Make sure some other paths are absolute.\n        props = [\"out\", \"cssIn\"];\n        for (i = 0; (prop = props[i]); i++) {\n            if (config[prop]) {\n                config[prop] = build.makeAbsPath(config[prop], absFilePath);\n            }\n        }\n\n        //Do final input verification\n        if (config.context) {\n            throw new Error('The build argument \"context\" is not supported' +\n                            ' in a build. It should only be used in web' +\n                            ' pages.');\n        }\n\n        return config;\n    };\n\n    /**\n     * finds the module being built/optimized with the given moduleName,\n     * or returns null.\n     * @param {String} moduleName\n     * @param {Array} modules\n     * @returns {Object} the module object from the build profile, or null.\n     */\n    build.findBuildModule = function (moduleName, modules) {\n        var i, module;\n        for (i = 0; (module = modules[i]); i++) {\n            if (module.name === moduleName) {\n                return module;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * Removes a module name and path from a layer, if it is supposed to be\n     * excluded from the layer.\n     * @param {String} moduleName the name of the module\n     * @param {String} path the file path for the module\n     * @param {Object} layer the layer to remove the module/path from\n     */\n    build.removeModulePath = function (module, path, layer) {\n        var index = layer.buildFilePaths.indexOf(path);\n        if (index !== -1) {\n            layer.buildFilePaths.splice(index, 1);\n        }\n\n        //Take it out of the specified modules. Specified modules are mostly\n        //used to find require modifiers.\n        delete layer.specified[module];\n    };\n\n    /**\n     * Uses the module build config object to trace the dependencies for the\n     * given module.\n     *\n     * @param {Object} module the module object from the build config info.\n     * @param {Object} the build config object.\n     *\n     * @returns {Object} layer information about what paths and modules should\n     * be in the flattened module.\n     */\n    build.traceDependencies = function (module, config) {\n        var include, override, layer, context, baseConfig, oldContext;\n\n        //Reset some state set up in requirePatch.js, and clean up require's\n        //current context.\n        oldContext = require._buildReset();\n\n        //Grab the reset layer and context after the reset, but keep the\n        //old config to reuse in the new context.\n        baseConfig = oldContext.config;\n        layer = require._layer;\n        context = layer.context;\n\n        //Put back basic config, use a fresh object for it.\n        //WARNING: probably not robust for paths and packages/packagePaths,\n        //since those property's objects can be modified. But for basic\n        //config clone it works out.\n        require(lang.delegate(baseConfig));\n\n        logger.trace(\"\\nTracing dependencies for: \" + (module.name || module.out));\n        include = module.name && !module.create ? [module.name] : [];\n        if (module.include) {\n            include = include.concat(module.include);\n        }\n\n        //If there are overrides to basic config, set that up now.;\n        if (module.override) {\n            override = lang.delegate(baseConfig);\n            lang.mixin(override, module.override, true);\n            require(override);\n        }\n\n        //Figure out module layer dependencies by calling require to do the work.\n        require(include);\n\n        //Pull out the layer dependencies.\n        layer.specified = context.specified;\n\n        //Reset config\n        if (module.override) {\n            require(baseConfig);\n        }\n\n        return layer;\n    };\n\n    /**\n     * Uses the module build config object to create an flattened version\n     * of the module, with deep dependencies included.\n     *\n     * @param {Object} module the module object from the build config info.\n     *\n     * @param {Object} layer the layer object returned from build.traceDependencies.\n     *\n     * @param {Object} the build config object.\n     *\n     * @returns {Object} with two properties: \"text\", the text of the flattened\n     * module, and \"buildText\", a string of text representing which files were\n     * included in the flattened module text.\n     */\n    build.flattenModule = function (module, layer, config) {\n        var buildFileContents = \"\",\n            namespace = config.namespace ? config.namespace + '.' : '',\n            context = layer.context,\n            path, reqIndex, fileContents, currContents,\n            i, moduleName,\n            parts, builder, writeApi;\n\n        //Use override settings, particularly for pragmas\n        if (module.override) {\n            config = lang.delegate(config);\n            lang.mixin(config, module.override, true);\n        }\n\n        //Start build output for the module.\n        buildFileContents += \"\\n\" +\n                             (config.dir ? module._buildPath.replace(config.dir, \"\") : module._buildPath) +\n                             \"\\n----------------\\n\";\n\n        //If there was an existing file with require in it, hoist to the top.\n        if (layer.existingRequireUrl) {\n            reqIndex = layer.buildFilePaths.indexOf(layer.existingRequireUrl);\n            if (reqIndex !== -1) {\n                layer.buildFilePaths.splice(reqIndex, 1);\n                layer.buildFilePaths.unshift(layer.existingRequireUrl);\n            }\n        }\n\n        //Write the built module to disk, and build up the build output.\n        fileContents = \"\";\n        for (i = 0; (path = layer.buildFilePaths[i]); i++) {\n            moduleName = layer.buildFileToModule[path];\n\n            //Figure out if the module is a result of a build plugin, and if so,\n            //then delegate to that plugin.\n            parts = context.makeModuleMap(moduleName);\n            builder = parts.prefix && context.pluginBuilders[parts.prefix];\n            if (builder) {\n                if (builder.write) {\n                    writeApi = function (input) {\n                        fileContents += input;\n                    };\n                    writeApi.asModule = function (moduleName, input) {\n                        fileContents += \"\\n\" + build.toTransport(namespace, moduleName, path, input, layer);\n                    };\n                    builder.write(parts.prefix, parts.name, writeApi);\n                }\n            } else {\n                currContents = file.readFile(path);\n\n                if (config.namespace) {\n                    currContents = pragma.namespace(currContents, config.namespace);\n                }\n\n                currContents = build.toTransport(namespace, moduleName, path, currContents, layer);\n\n                fileContents += \"\\n\" + currContents;\n            }\n\n            buildFileContents += path.replace(config.dir, \"\") + \"\\n\";\n            //Some files may not have declared a require module, and if so,\n            //put in a placeholder call so the require does not try to load them\n            //after the module is processed.\n            //If we have a name, but no defined module, then add in the placeholder.\n            if (moduleName && !layer.modulesWithNames[moduleName] && !config.skipModuleInsertion) {\n                //If including jquery, register the module correctly, otherwise\n                //register an empty function. For jquery, make sure jQuery is\n                //a real object, and perhaps not some other file mapping, like\n                //to zepto.\n                if (moduleName === 'jquery') {\n                    fileContents += '\\n(function () {\\n' +\n                                   'var jq = typeof jQuery !== \"undefined\" && jQuery;\\n' +\n                                   namespace +\n                                   'define(\"jquery\", [], function () { return jq; });\\n' +\n                                   '}());\\n';\n                } else {\n                    fileContents += '\\n' + namespace + 'define(\"' + moduleName + '\", function(){});\\n';\n                }\n            }\n        }\n\n        return {\n            text: fileContents,\n            buildText: buildFileContents\n        };\n    };\n\n    //This regexp is not bullet-proof, and it has one optional part to\n    //avoid issues with some Dojo transition modules that use a\n    //define(\\n//begin v1.x content\n    //for a comment.\n    build.anonDefRegExp = /(^|[^\\.])(require\\s*\\.\\s*def|define)\\s*\\(\\s*(\\/\\/[^\\n\\r]*[\\r\\n])?(\\[|f|\\{)/;\n\n    build.toTransport = function (namespace, moduleName, path, contents, layer) {\n        //If anonymous module, insert the module name.\n        return contents.replace(build.anonDefRegExp, function (match, start, callName, possibleComment, suffix) {\n            layer.modulesWithNames[moduleName] = true;\n\n            //Look for CommonJS require calls inside the function if this is\n            //an anonymous define/require.def call that just has a function registered.\n            var deps = null;\n            if (suffix.indexOf('f') !== -1) {\n                deps = parse.getAnonDeps(path, contents);\n\n                if (deps.length) {\n                    deps = deps.map(function (dep) {\n                        return \"'\" + dep + \"'\";\n                    });\n                } else {\n                    deps = [];\n                }\n            }\n\n            return start + namespace + \"define('\" + moduleName + \"',\" +\n                   (deps ? ('[' + deps.toString() + '],') : '') +\n                   suffix;\n        });\n\n    };\n\n    return build;\n});\n\n    }\n\n\n    /**\n     * Sets the default baseUrl for requirejs to be directory of top level\n     * script.\n     */\n    function setBaseUrl(fileName) {\n        //Use the file name's directory as the baseUrl if available.\n        dir = fileName.replace(/\\\\/g, '/');\n        if (dir.indexOf('/') !== -1) {\n            dir = dir.split('/');\n            dir.pop();\n            dir = dir.join('/');\n            exec(\"require({baseUrl: '\" + dir + \"'});\");\n        }\n    }\n\n    //If in Node, and included via a require('requirejs'), just export and\n    //THROW IT ON THE GROUND!\n    if (env === 'node' && reqMain !== module) {\n        setBaseUrl(path.resolve(reqMain ? reqMain.filename : '.'));\n\n        //Create a method that will run the optimzer given an object\n        //config.\n        requirejs.optimize = function (config, callback) {\n            if (!loadedOptimizedLib) {\n                loadLib();\n                loadedOptimizedLib = true;\n            }\n\n            //Create the function that will be called once build modules\n            //have been loaded.\n            var runBuild = function (build, logger) {\n                //Make sure config has a log level, and if not,\n                //make it \"silent\" by default.\n                config.logLevel = config.logLevel || logger.SILENT;\n\n                var result = build(config);\n\n                //Reset build internals on each run.\n                requirejs._buildReset();\n\n                callback(result);\n            };\n\n            //Enable execution of this callback in a build setting.\n            //Normally, once requirePatch is run, by default it will\n            //not execute callbacks, unless this property is set on\n            //the callback.\n            runBuild.__requireJsBuild = true;\n\n            requirejs({\n                context: 'build'\n            }, ['build', 'logger'], runBuild);\n        };\n\n        module.exports = requirejs;\n        return;\n    }\n\n    if (commandOption === 'o') {\n        //Do the optimizer work.\n        loadLib();\n\n        /**\n * @license Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\n/*\n * Create a build.js file that has the build options you want and pass that\n * build file to this file to do the build. See example.build.js for more information.\n */\n\n/*jslint strict: false, nomen: false */\n/*global require: false */\n\nrequire({\n    baseUrl: require.s.contexts._.config.baseUrl,\n    //Use a separate context than the default context so that the\n    //build can use the default context.\n    context: 'build'\n},       ['env!env/args', 'build'],\nfunction (args,            build) {\n    build(args);\n});\n\n\n    } else if (commandOption === 'v') {\n        console.log('r.js: ' + version + ', RequireJS: ' + this.requirejsVars.require.version);\n    } else if (commandOption === 'convert') {\n        loadLib();\n\n        this.requirejsVars.require(['env!env/args', 'commonJs', 'env!env/print'],\n        function (args,           commonJs,   print) {\n\n            var srcDir, outDir;\n            srcDir = args[0];\n            outDir = args[1];\n\n            if (!srcDir || !outDir) {\n                print('Usage: path/to/commonjs/modules output/dir');\n                return;\n            }\n\n            commonJs.convertDir(args[0], args[1]);\n        });\n    } else {\n        //Just run an app\n\n        //Load the bundled libraries for use in the app.\n        if (commandOption === 'lib') {\n            loadLib();\n        }\n\n        setBaseUrl(fileName);\n\n        if (exists(fileName)) {\n            exec(readFile(fileName), fileName);\n        } else {\n            showHelp();\n        }\n    }\n\n}((typeof console !== 'undefined' ? console : undefined),\n  (typeof Packages !== 'undefined' ? Array.prototype.slice.call(arguments, 0) : []),\n  (typeof readFile !== 'undefined' ? readFile : undefined)));\n"
  },
  {
    "path": "client/README.md",
    "content": "BrowserQuest client documentation\n=================================\n\nThe client directory should never be directly deployed to staging/production. Deployment steps:\n\n1) Configure the websocket host/port:\n\nIn the client/config/ directory, copy config_build.json-dist to a new config_build.json file.\nEdit the contents of this file to change host/port settings.\n\n2) Run the following commands from the project root:\n\n(Note: nodejs is required to run the build script)\n\n* cd bin\n* chmod +x build.sh\n* ./build.sh\n\nThis will use the RequireJS optimizer tool to create a client-build/ directory containing a production-ready version of BrowserQuest. \n\nA build log file will also be created at bin/build.txt.\n\nThe client-build directory can be renamed and deployed anywhere. It has no dependencies to any other file/folder in the repository."
  },
  {
    "path": "client/config/config_build.json-dist",
    "content": "{\n    \"host\": \"Set production websocket host here\",\n    \"port\": 8000\n}"
  },
  {
    "path": "client/css/achievements.css",
    "content": "#achievements-wrapper {overflow:hidden;}\n#achievements ul:first-child {margin-left:0;}\n#lists {-moz-transition:0.5s left ease-in-out;-webkit-transition:0.5s left ease-in-out;-o-transition:0.5s left ease-in-out;-ms-transition:0.5s left ease-in-out;transition:0.5s left ease-in-out;position:relative;}\n#achievements-count {float:right;color:#fff;}\n#achievements-count div {display:inline-block;}\n#achievement-notification .coin {-moz-transition:0.2s opacity linear;-webkit-transition:0.2s opacity linear;-o-transition:0.2s opacity linear;-ms-transition:0.2s opacity linear;transition:0.2s opacity linear;}\n\n@media screen and (min-width: 1501px) {\n    .coin {width:72px;height:78px;}\n    .achievement1 .coin {background-position:0 -666px;}\n    .achievement2 .coin {background-position:-72px -666px;}\n    .achievement3 .coin {background-position:-144px -666px;}\n    .achievement4 .coin {background-position:-216px -666px;}\n    .achievement5 .coin {background-position:-288px -666px;}\n    .achievement6 .coin {background-position:-360px -666px;}\n    .achievement7 .coin {background-position:-432px -666px;}\n    .achievement8 .coin {background-position:-504px -666px;}\n    .achievement9 .coin {background-position:-576px -666px;}\n    .achievement10 .coin {background-position:-648px -666px;}\n    .achievement11 .coin {background-position:-720px -666px;}\n    .achievement12 .coin {background-position:-792px -666px;}\n    .achievement13 .coin {background-position:-864px -666px;}\n    .achievement14 .coin {background-position:-936px -666px;}\n    .achievement15 .coin {background-position:-1008px -666px;}\n    .achievement16 .coin {background-position:-1080px -666px;}\n    .achievement17 .coin {background-position:-1152px -666px;}\n    .achievement18 .coin {background-position:-648px -822px;}\n    .achievement19 .coin {background-position:-720px -822px;}\n    .achievement20 .coin {background-position:-792px -822px;}\n\n    #achievements-wrapper {height:387px;width:1116px;margin:60px 0 30px 60px;}\n    #achievements ul {float:left;margin-left:60px;}\n    #achievements nav {height:66px;width:202px;margin:0 auto;}\n    #previous, #next {height:66px;width:102px;display:inline-block;}\n    .page1 #previous, .upscaled .page1 #previous {background-position:0px -846px;}\n    .page5 #next, .upscaled .page5 #next {background-position:-99px -846px;}\n    #previous, .upscaled #previous {background-position:-201px -846px;}\n    #previous:active, .upscaled #previous:active {background-position:-402px -846px;}\n    #next, .upscaled #next {margin-left:-15px;background-position:-300px -846px;}\n    #next:active, .upscaled #next:active {background-position:-501px -846px;}\n\n    .page1 #previous:hover, .page1 #previous:active {background-position:0px -846px;}\n    .page5 #next:hover, .page5 #next:active {background-position:-99px -846px}\n    \n    #lists {width:6000px;}\n    #achievements.page1 #lists {left:0;}\n    #achievements.page2 #lists {left:-1176px;}\n    #achievements.page3 #lists {left:-2352px;}\n    #achievements.page4 #lists {left:-3528px;}\n    #achievements.page5 #lists {left:-4704px;}\n    \n    #achievements-count {margin:18px 72px 0 0;}\n    \n    #achievements, #achievements li, #achievements .coin, #achievement-notification, #achievement-notification .coin, #coinsparks, .achievement-sharing a, #previous, #next {background-size:1248px;}\n    #achievements {height:588px;width:1248px;margin-left:-624px;margin-top:-324px;font-size:30px;}\n    #achievements li, .upscaled #achievements li {height:78px;width:1116px;background-position:0 -588px;margin:15px 0;}\n    #achievements li .coin {margin-right:45px;}\n    #achievements li span {padding-top:27px;}\n    .achievement-sharing {right:24px;top:24px;}\n    .achievement-sharing .facebook {height:33px;width:15px;background-position:-1116px -588px;}\n    .achievement-sharing .facebook:hover {background-position:-1116px -621px;}\n    .achievement-sharing .twitter, .upscaled .achievement-sharing .twitter {height:33px;width:48px;background-position:-1131px -588px;margin-left:15px;}\n    .achievement-sharing .twitter:hover, .upscaled .achievement-sharing .twitter:hover {background-position:-1131px -621px;}\n    \n    #achievement-notification, .upscaled #achievement-notification {width:648px;bottom:66px;height:0;margin-left:-324px;background-position:0 -744px;}\n    #achievement-notification.active {height:102px;}\n    #achievement-notification .coin {position:absolute;top:-60px;left:50%;margin-left:-36px;opacity:0;}\n    #achievement-notification.active .coin {opacity:1;}\n    #achievement-notification.active #coinsparks, .upscaled #achievement-notification.active #coinsparks {height:78px;width:72px;-moz-animation:coinsparks3 0.8s steps(6, end) 7;-webkit-animation:coinsparks3 0.8s steps(6, end) 7;-o-animation:coinsparks3 0.8s steps(6, end) 7;-ms-animation:coinsparks3 0.8s steps(6, end) 7;}\n    #achievement-notification .title {color:#fce045;font-size:20px;margin:27px 0 9px 0;}\n    #achievement-notification .name {color:#eee;font-size:30px;margin:9px 0;}\n}\n\n@media screen and (max-width: 1500px) {\n    .coin {width:48px;height:52px;}\n    .achievement1 .coin {background-position:0 -444px;}\n    .achievement2 .coin {background-position:-48px -444px;}\n    .achievement3 .coin {background-position:-96px -444px;}\n    .achievement4 .coin {background-position:-144px -444px;}\n    .achievement5 .coin {background-position:-192px -444px;}\n    .achievement6 .coin {background-position:-240px -444px;}\n    .achievement7 .coin {background-position:-288px -444px;}\n    .achievement8 .coin {background-position:-336px -444px;}\n    .achievement9 .coin {background-position:-384px -444px;}\n    .achievement10 .coin {background-position:-432px -444px;}\n    .achievement11 .coin {background-position:-480px -444px;}\n    .achievement12 .coin {background-position:-528px -444px;}\n    .achievement13 .coin {background-position:-576px -444px;}\n    .achievement14 .coin {background-position:-624px -444px;}\n    .achievement15 .coin {background-position:-672px -444px;}\n    .achievement16 .coin {background-position:-720px -444px;}\n    .achievement17 .coin {background-position:-768px -444px;}\n    .achievement18 .coin {background-position:-432px -548px;}\n    .achievement19 .coin {background-position:-480px -548px;}\n    .achievement20 .coin {background-position:-528px -548px;}\n\n    #achievements-wrapper {height:258px;width:744px;margin:40px 0 20px 40px;}\n    #achievements ul {float:left;margin-left:40px;}\n    #achievements nav {height:44px;width:134px;margin:0 auto;}\n    #previous, #next {height:44px;width:68px;display:inline-block;}\n    .page1 #previous, .upscaled .page1 #previous {background-position:0px -564px;}\n    .page5 #next, .upscaled .page5 #next {background-position:-66px -564px;}\n    #previous, .upscaled #previous {background-position:-134px -564px;}\n    #previous:active, .upscaled #previous:active {background-position:-268px -564px;}\n    #next, .upscaled #next {margin-left:-10px;background-position:-200px -564px;}\n    #next:active, .upscaled #next:active {background-position:-334px -564px;}\n    \n    .page1 #previous:hover, .page1 #previous:active {background-position:0px -564px;}\n    .page5 #next:hover, .page5 #next:active {background-position:-66px -564px}\n    \n    #lists {width:4000px;}\n    #achievements.page1 #lists {left:0;}\n    #achievements.page2 #lists {left:-784px;}\n    #achievements.page3 #lists {left:-1568px;}\n    #achievements.page4 #lists {left:-2352px;}\n    #achievements.page5 #lists {left:-3136px;}\n    \n    #achievements-count {margin:12px 48px 0 0;}\n    \n    #achievements, #achievements li, #achievements .coin, #achievement-notification, #achievement-notification .coin, #coinsparks, .upscaled #coinsparks, .achievement-sharing a, #previous, #next {background-size:832px;}\n    #achievements {height:392px;width:832px;margin-left:-416px;margin-top:-216px;font-size:20px;}\n    #achievements li, .upscaled #achievements li {height:52px;width:744px;background-position:0 -392px;margin:10px 0;}\n    #achievements li .coin {margin-right:30px;}\n    #achievements li span {padding-top:18px;}\n    .achievement-sharing {right:16px;top:16px;}\n    .achievement-sharing .facebook {height:22px;width:10px;background-position:-744px -392px;}\n    .achievement-sharing .facebook:hover {background-position:-744px -414px;}\n    .achievement-sharing .twitter, .upscaled .achievement-sharing .twitter {height:22px;width:32px;background-position:-754px -392px;margin-left:10px;}\n    .achievement-sharing .twitter:hover, .upscaled .achievement-sharing .twitter:hover {background-position:-754px -414px;}\n    \n    #achievement-notification, .upscaled #achievement-notification {width:432px;bottom:44px;height:0;margin-left:-216px;background-position:0 -496px;}\n    #achievement-notification.active {height:68px;}\n    #achievement-notification .coin {position:absolute;top:-40px;left:50%;margin-left:-24px;opacity:0;}\n    #achievement-notification.active .coin {opacity:1;}\n    #achievement-notification.active #coinsparks, .upscaled #achievement-notification.active #coinsparks {height:52px;width:48px;-moz-animation:coinsparks2 0.8s steps(6, end) 7;-webkit-animation:coinsparks2 0.8s steps(6, end) 7;-o-animation:coinsparks2 0.8s steps(6, end) 7;-ms-animation:coinsparks2 0.8s steps(6, end) 7;}\n    #achievement-notification .title {color:#fce045;font-size:14px;margin:18px 0 6px 0;}\n    #achievement-notification .name {color:#eee;font-size:20px;margin:6px 0;}\n}\n\n@media screen and (max-height: 850px) {\n    .coin {width:48px;height:52px;}\n    .achievement1 .coin {background-position:0 -444px;}\n    .achievement2 .coin {background-position:-48px -444px;}\n    .achievement3 .coin {background-position:-96px -444px;}\n    .achievement4 .coin {background-position:-144px -444px;}\n    .achievement5 .coin {background-position:-192px -444px;}\n    .achievement6 .coin {background-position:-240px -444px;}\n    .achievement7 .coin {background-position:-288px -444px;}\n    .achievement8 .coin {background-position:-336px -444px;}\n    .achievement9 .coin {background-position:-384px -444px;}\n    .achievement10 .coin {background-position:-432px -444px;}\n    .achievement11 .coin {background-position:-480px -444px;}\n    .achievement12 .coin {background-position:-528px -444px;}\n    .achievement13 .coin {background-position:-576px -444px;}\n    .achievement14 .coin {background-position:-624px -444px;}\n    .achievement15 .coin {background-position:-672px -444px;}\n    .achievement16 .coin {background-position:-720px -444px;}\n    .achievement17 .coin {background-position:-768px -444px;}\n    .achievement18 .coin {background-position:-432px -548px;}\n    .achievement19 .coin {background-position:-480px -548px;}\n    .achievement20 .coin {background-position:-528px -548px;}\n\n    #achievements-wrapper {height:258px;width:744px;margin:40px 0 20px 40px;}\n    #achievements ul {float:left;margin-left:40px;}\n    #achievements nav {height:44px;width:135px;margin:0 auto;}\n    #previous, #next {height:44px;width:68px;display:inline-block;}\n    .page1 #previous, .upscaled .page1 #previous {background-position:0px -564px;}\n    .page5 #next, .upscaled .page5 #next {background-position:-66px -564px;}\n    #previous, .upscaled #previous {background-position:-134px -564px;}\n    #previous:active, .upscaled #previous:active {background-position:-268px -564px;}\n    #next, .upscaled #next {margin-left:-10px;background-position:-200px -564px;}\n    #next:active, .upscaled #next:active {background-position:-334px -564px;}\n    \n    .page1 #previous:hover, .page1 #previous:active {background-position:0px -564px;}\n    .page5 #next:hover, .page5 #next:active {background-position:-66px -564px}\n    \n    #lists {width:4000px;}\n    #achievements.page1 #lists {left:0;}\n    #achievements.page2 #lists {left:-784px;}\n    #achievements.page3 #lists {left:-1568px;}\n    #achievements.page4 #lists {left:-2352px;}\n    #achievements.page5 #lists {left:-3136px;}\n    \n    #achievements-count {margin:12px 48px 0 0;}\n    \n    #achievements, #achievements li, #achievements .coin, #achievement-notification, #achievement-notification .coin, #coinsparks, .upscaled #coinsparks, .achievement-sharing a, #previous, #next {background-size:832px;}\n    #achievements {height:392px;width:832px;margin-left:-416px;margin-top:-216px;font-size:20px;}\n    #achievements li, .upscaled #achievements li {height:52px;width:744px;background-position:0 -392px;margin:10px 0;}\n    #achievements li .coin {margin-right:30px;}\n    #achievements li span {padding-top:18px;}\n    .achievement-sharing {right:16px;top:16px;}\n    .achievement-sharing .facebook {height:22px;width:10px;background-position:-744px -392px;}\n    .achievement-sharing .facebook:hover {background-position:-744px -414px;}\n    .achievement-sharing .twitter, .upscaled .achievement-sharing .twitter {height:22px;width:32px;background-position:-754px -392px;margin-left:10px;}\n    .achievement-sharing .twitter:hover, .upscaled .achievement-sharing .twitter:hover {background-position:-754px -414px;}\n    \n    #achievement-notification, .upscaled #achievement-notification {width:432px;bottom:44px;height:0;margin-left:-216px;background-position:0 -496px;}\n    #achievement-notification.active {height:68px;}\n    #achievement-notification .coin {position:absolute;top:-40px;left:50%;margin-left:-24px;opacity:0;}\n    #achievement-notification.active .coin {opacity:1;}\n    #achievement-notification.active #coinsparks, .upscaled #achievement-notification.active #coinsparks {height:52px;width:48px;-moz-animation:coinsparks2 0.8s steps(6, end) 7;-webkit-animation:coinsparks2 0.8s steps(6, end) 7;-o-animation:coinsparks2 0.8s steps(6, end) 7;-ms-animation:coinsparks2 0.8s steps(6, end) 7;}\n    #achievement-notification .title {color:#fce045;font-size:14px;margin:18px 0 6px 0;}\n    #achievement-notification .name {color:#eee;font-size:20px;margin:6px 0;}\n}\n\n@media screen and (max-width: 1000px) {\n    .coin {width:24px;height:26px;}\n    .achievement1 .coin {background-position:0 -222px;}\n    .achievement2 .coin {background-position:-24px -222px;}\n    .achievement3 .coin {background-position:-48px -222px;}\n    .achievement4 .coin {background-position:-72px -222px;}\n    .achievement5 .coin {background-position:-96px -222px;}\n    .achievement6 .coin {background-position:-120px -222px;}\n    .achievement7 .coin {background-position:-144px -222px;}\n    .achievement8 .coin {background-position:-168px -222px;}\n    .achievement9 .coin {background-position:-192px -222px;}\n    .achievement10 .coin {background-position:-216px -222px;}\n    .achievement11 .coin {background-position:-240px -222px;}\n    .achievement12 .coin {background-position:-264px -222px;}\n    .achievement13 .coin {background-position:-288px -222px;}\n    .achievement14 .coin {background-position:-312px -222px;}\n    .achievement15 .coin {background-position:-336px -222px;}\n    .achievement16 .coin {background-position:-360px -222px;}\n    .achievement17 .coin {background-position:-384px -222px;}\n    .achievement18 .coin {background-position:-216px -274px;}\n    .achievement19 .coin {background-position:-240px -274px;}\n    .achievement20 .coin {background-position:-264px -274px;}\n    \n    #achievements-wrapper {height:129px;width:372px;margin:20px 0 10px 20px;}\n    #achievements ul {float:left;margin-left:20px;}\n    #achievements nav {height:22px;width:68px;margin:0 auto;}\n    #previous, #next {height:22px;width:34px;display:inline-block;}\n    .page1 #previous, .upscaled .page1 #previous {background-position:0px -282px;}\n    .page5 #next, .upscaled .page5 #next {background-position:-33px -282px;}\n    #previous, .upscaled #previous {background-position:-67px -282px;}\n    #previous:active, .upscaled #previous:active {background-position:-134px -282px;}\n    #next, .upscaled #next {margin-left:-5px;background-position:-100px -282px;}\n    #next:active, .upscaled #next:active {background-position:-167px -282px;}\n    \n    .page1 #previous:hover, .page1 #previous:active {background-position:0px -282px;}\n    .page5 #next:hover, .page5 #next:active {background-position:-33px -282px}\n    \n    #lists {width:2000px;-moz-transition:none;-webkit-transition:none;-o-transition:none;-ms-transition:none;transition:none;}\n    #achievements.page1 #lists {left:0;}\n    #achievements.page2 #lists {left:-392px;}\n    #achievements.page3 #lists {left:-784px;}\n    #achievements.page4 #lists {left:-1176px;}\n    #achievements.page5 #lists {left:-1568px;}\n    \n    #achievements-count {margin:6px 24px 0 0;}\n    \n    #achievements, #achievements li, #achievements .coin, #achievement-notification, #achievement-notification .coin, #coinsparks, .achievement-sharing a, #previous, #next {background-size:416px;}\n    #achievements {height:196px;width:416px;margin-left:-208px;margin-top:-108px;font-size:10px;}\n    #achievements li, .upscaled #achievements li {height:26px;width:372px;background-position:0 -196px;margin:5px 0;}\n    #achievements li .coin {margin-right:15px;}\n    #achievements li span {padding-top:9px;}\n    .achievement-sharing {right:8px;top:8px;}\n    .achievement-sharing .facebook {height:11px;width:5px;background-position:-372px -196px;}\n    .achievement-sharing .facebook:hover {background-position:-372px -207px;}\n    .achievement-sharing .twitter, .upscaled .achievement-sharing .twitter {height:11px;width:16px;background-position:-377px -196px;margin-left:5px;}\n    .achievement-sharing .twitter:hover, .upscaled .achievement-sharing .twitter:hover {background-position:-377px -207px;}\n\n    #achievement-notification, .upscaled #achievement-notification {width:216px;bottom:22px;height:0;margin-left:-108px;background-position:0 -248px;}\n    #achievement-notification.active {height:34px;}\n    #achievement-notification .coin {position:absolute;top:-20px;left:50%;margin-left:-12px;opacity:0;}\n    #achievement-notification.active .coin {opacity:1;}\n    #achievement-notification.active #coinsparks, .upscaled #achievement-notification.active #coinsparks {height:26px;width:24px;-moz-animation:coinsparks1 0.8s steps(6, end) 7;-webkit-animation:coinsparks1 0.8s steps(6, end) 7;-o-animation:coinsparks1 0.8s steps(6, end) 7;-ms-animation:coinsparks1 0.8s steps(6, end) 7;}\n    #achievement-notification .title {color:#fce045;font-size:10px;margin:9px 0 3px 0;}\n    #achievement-notification .name {color:#eee;font-size:10px;margin:3px 0;}\n}\n\n@media screen and (max-width: 600px) {\n    #achievement-notification .coin {width:48px;height:52px;}\n    #achievement-notification.achievement1 .coin {background-position:0 -444px;}\n    #achievement-notification.achievement2 .coin {background-position:-48px -444px;}\n    #achievement-notification.achievement3 .coin {background-position:-96px -444px;}\n    #achievement-notification.achievement4 .coin {background-position:-144px -444px;}\n    #achievement-notification.achievement5 .coin {background-position:-192px -444px;}\n    #achievement-notification.achievement6 .coin {background-position:-240px -444px;}\n    #achievement-notification.achievement7 .coin {background-position:-288px -444px;}\n    #achievement-notification.achievement8 .coin {background-position:-336px -444px;}\n    #achievement-notification.achievement9 .coin {background-position:-384px -444px;}\n    #achievement-notification.achievement10 .coin {background-position:-432px -444px;}\n    #achievement-notification.achievement11 .coin {background-position:-480px -444px;}\n    #achievement-notification.achievement12 .coin {background-position:-528px -444px;}\n    #achievement-notification.achievement13 .coin {background-position:-576px -444px;}\n    #achievement-notification.achievement14 .coin {background-position:-624px -444px;}\n    #achievement-notification.achievement15 .coin {background-position:-672px -444px;}\n    #achievement-notification.achievement16 .coin {background-position:-720px -444px;}\n    #achievement-notification.achievement17 .coin {background-position:-768px -444px;}\n    #achievement-notification.achievement18 .coin {background-position:-432px -548px;}\n    #achievement-notification.achievement19 .coin {background-position:-480px -548px;}\n    #achievement-notification.achievement20 .coin {background-position:-528px -548px;}\n    \n    #achievements nav {height:22px;width:68px;margin:0 auto;}\n    #previous, #next {height:22px;width:34px;display:inline-block;}\n    .page1 #previous, .upscaled .page1 #previous {background-position:0px -282px;}\n    .page5 #next, .upscaled .page5 #next {background-position:-33px -282px;}\n    #previous, .upscaled #previous {background-position:-67px -282px;}\n    #previous:active, .upscaled #previous:active {background-position:-134px -282px;}\n    #next, .upscaled #next {margin-left:-5px;background-position:-100px -282px;}\n    #next:active, .upscaled #next:active {background-position:-167px -282px;}\n    \n    .page1 #previous:hover, .page1 #previous:active {background-position:0px -282px;}\n    .page5 #next:hover, .page5 #next:active {background-position:-33px -282px}\n    \n    #lists {width:2000px;-moz-transition:none;-webkit-transition:none;-o-transition:none;-ms-transition:none;transition:none;}\n    #achievements.page1 #lists {left:0;}\n    #achievements.page2 #lists {left:-392px;}\n    #achievements.page3 #lists {left:-784px;}\n    #achievements.page4 #lists {left:-1176px;}\n    #achievements.page5 #lists {left:-1568px;}\n    \n    #achievements-count {margin:6px 24px 0 0;}\n    \n    #achievement-notification, #achievement-notification .coin, #coinsparks {background-size:832px;}\n    #achievement-notification, .upscaled #achievement-notification {width:432px;bottom:34px;height:0;margin-left:-216px;background-position:0 -496px;}\n    #achievement-notification.active {height:68px;}\n    #achievement-notification .coin {position:absolute;top:-40px;left:50%;margin-left:-24px;opacity:0;}\n    #achievement-notification.active .coin {opacity:1;}\n    #achievement-notification.active #coinsparks {display:none;}\n    #achievement-notification .title {color:#fce045;font-size:14px;margin:18px 0 6px 0;}\n    #achievement-notification .name {color:#eee;font-size:20px;margin:6px 0;}\n    \n    #achievements li.unlocked .achievement-sharing {display:block;}\n}"
  },
  {
    "path": "client/css/ie.css",
    "content": "/*IE stylesheet*/\n\n#container {display:none;}\nbody {background:url('../img/2/wood.png') repeat;}\n.no-opacity #credits, .no-opacity #loadcharacter, .no-opacity #createcharacter, .no-opacity #death, .no-opacity #confirmation, .no-opacity #about {display:none;}\n"
  },
  {
    "path": "client/css/main.css",
    "content": "/* Eric Meyer's CSS reset */\n\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, font, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tfont-size: 100%;\n\tvertical-align: baseline;\n\tbackground: transparent;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\n\n/* remember to define focus styles! */\n:focus {\n\toutline: 0;\n}\n\n/* remember to highlight inserts somehow! */\nins {\n\ttext-decoration: none;\n}\ndel {\n\ttext-decoration: line-through;\n}\n\n/* tables still need 'cellspacing=\"0\"' in the markup */\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\n\n/* Typography*/\t\t\n\n    @font-face {\n        font-family: 'GraphicPixel';\n        src: url('../fonts/graphicpixel-webfont.eot');\n        src: url('../fonts/graphicpixel-webfont.eot?#iefix') format('embedded-opentype'),\n             url('../fonts/graphicpixel-webfont.woff') format('woff'),\n             url('../fonts/graphicpixel-webfont.ttf') format('truetype'),\n             url('../fonts/graphicpixel-webfont.svg#GraphicPixelRegular') format('svg');\n        font-weight: normal;\n        font-style: normal;\n\n    }\n    \n    @font-face {\n        font-family: 'AdvoCut';\n        src: url('../fonts/advocut-webfont.eot');\n        src: url('../fonts/advocut-webfont.eot?#iefix') format('embedded-opentype'),\n             url('../fonts/advocut-webfont.woff') format('woff'),\n             url('../fonts/advocut-webfont.ttf') format('truetype'),\n             url('../fonts/advocut-webfont.svg#AndinaRegular') format('svg');\n        font-weight: normal;\n        font-style: normal;\n\n    }\n\n\t.gp {font-family: 'GraphicPixel', sans-serif;}\n\n/* General Layout */\t\n\t\n\n    html {-webkit-text-size-adjust: 100%}\n\thtml, body {height:100%;}\n\t\n\tbody {padding:0;margin:0;background:#111;overflow:hidden;image-rendering:-moz-crisp-edges; image-rendering:-webkit-optimize-contrast;border-top:2px solid #707070;}\n\t\n\tcanvas { position:absolute;image-rendering:optimizeSpeed;}\n\t#background { background:url('../img/common/loading.png') no-repeat center center, #000;}\n\t.error #background { background:url('../img/common/loading-error.png') no-repeat center center, #000;}\n\t\n\t#background, #foreground { margin:0; padding:0;}\n    \n    #achievements nav::selection {background:transparent;text-decoration:none;color:transparent;}\n    #canvas, #bar-container, #bubbles, #chatbox, #canvasborder, #foreground, #background, footer, #container, #achievement-notification {-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;-ms-user-select:none;}\n    \n    .started #canvas {cursor:none;}\n    \n    #foreground { \n       -webkit-tap-highlight-color:rgba(0,0,0,0);\n       /* -webkit-touch-callout:none; */\n       /* margin:0 auto;\n       display:block;*/\n    }\n\n\n\t@media screen and (max-width: 600px) {\n\t\t\n\t\t#entities {\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n    h1 {font-weight:normal;}\n    \n    .preload {display:none;}\n    \n/* Common rules */\n    \n    body.upscaled.game {background:#000;}\n    .game #logo {display:none;-moz-animation:none;-webkit-animation:none;-o-animation:none;-ms-animation:none;animation:none;}\n        \n    #logo, #logosparks, .left-ornament, .right-ornament, #character, #character div, .button, .button div, #respawn, #scroll, #instructions, .icon, #tilt, .parchment-left, .parchment-middle, .parchment-right, .avatar, .facebook, .twitter, .close, #note, .ribbon .top, .ribbon .bottom, #about .img, .ext-link {background:url('../img/1/spritesheet.png');image-rendering:-moz-crisp-edges; image-rendering:-webkit-optimize-contrast;}\n    \n    #moztab {height:49px;width:118px;position:fixed;top:0;right:15%;background:url('../img/1/spritesheet.png') no-repeat -229px -204px;display:block;}\n\n    #vignetting {height:100%;width:100%;position:absolute;top:0;left:0;pointer-events:none;}\n    #logosparks {display:block;position:absolute;top:0;left:0;}\n    #parchment, #parchment input {font-family:'GraphicPixel';}\n    #parchment input {width:50%;background:rgba(0,0,0,0.05);text-align:center;-moz-animation:glow 0.5s linear infinite alternate;-webkit-animation:glow 0.5s linear infinite alternate;-o-animation:glow 0.5s linear infinite alternate;-ms-animation:glow 0.5s linear infinite alternate;color:#eee;}\n    #parchment input:focus {-moz-animation:none;-webkit-animation:none;-o-animation:none;-ms-animation:none;animation:none;color:#fff;background:rgba(0,0,0,0.1);border-color:rgba(0,0,0,0.3);}\n\n    #character div {-moz-transition:0.4s opacity linear;-webkit-transition:0.4s opacity linear;-o-transition:0.4s opacity linear;-ms-transition:0.4s opacity linear;transition:0.4s opacity linear;}\n\n    .play div {position:absolute;top:0;left:0;opacity:1;-moz-transition:0.4s linear opacity;-webkit-transition:0.4s linear opacity;-o-transition:0.4s linear opacity;-ms-transition:0.4s linear opacity;transition:0.4s linear opacity}\n    .play.disabled div {opacity:0;pointer-events:none;}\n    .play img {display:none;}\n    .play.loading img {display:block;position:absolute;top:54%;left:50%;}\n\n    #mask {height:100%;width:100%;position:fixed;top:0;left:0;background:rgba(20,20,20,1);opacity:1;z-index:20;-moz-transition:0.5s opacity linear;-webkit-transition:0.5s opacity linear;-o-transition:0.5s opacity linear;-ms-transition:0.5s opacity linear;transition:0.5s opacity linear;pointer-events:none;}\n\n    #bar-container {background:url('../img/1/barsheet.png');image-rendering:-moz-crisp-edges;position:relative;width:100%;z-index:10;}\n    #healthbar {background:url('../img/1/barsheet.png');image-rendering:-moz-crisp-edges;position:absolute;}\n\t#hitpoints {background:#d83939;-moz-transition:.5s width ease;-webkit-transition:.5s width ease;-o-transition:.5s width ease;-ms-transition:.5s width ease;transition:.5s width ease;}\n    #hitpoints.white {-moz-animation:flash 0.5s linear 1;-webkit-animation:flash 0.5s linear 1;-o-animation:flash 0.5s linear 1;-ms-animation:flash 0.5s linear 1;animation:flash 0.5s linear 1;}\n\t#hitpoints.invincible {-moz-animation:invincible 0.3s steps(3, end) alternate infinite;-webkit-animation:invincible 0.3s steps(3, end) alternate infinite;-o-animation:invincible 0.3s steps(3, end) alternate infinite;-ms-animation:invincible 0.3s steps(3, end) alternate infinite;}\n    \n    #notifications {position:absolute;left:50%;text-align:center;font-family:'GraphicPixel';overflow:hidden;}\n    #notifications div {position:absolute;-moz-transition:none;-webkit-transition:none;top:0;width:100%;}\n    #notifications div.top {-moz-transition:0.5s top ease;-webkit-transition:0.5s top ease;-o-transition:0.5s top ease;-ms-transition:0.5s top ease;transition:0.5s top ease;}\n    #notifications div.top #message1 {opacity:0;-moz-transition:0.2s opacity linear;-webkit-transition:0.2s opacity linear;-o-transition:0.2s opacity linear;-ms-transition:0.2s opacity linear;transition:0.2s opacity linear;}\n    #notifications span {display:block;text-align:center;width:100%;opacity:1;-moz-user-select:none;-webkit-user-select:none;}\n    \n    #playercount {font-family:'GraphicPixel';color:#e3e3e3;position:absolute;}\n    #playercount:hover {cursor:pointer;color:#FCE045;}\n    #population {background:url('../img/1/barsheet.png');image-rendering:-moz-crisp-edges;position:absolute;font-family:'GraphicPixel';color:#fff;text-align:center;opacity:0;pointer-events:none;-moz-transition:0.2s opacity linear, 0.2s height ease;-webkit-transition:0.2s opacity linear, 0.2s height ease;-o-transition:0.2s opacity linear, 0.2s height ease;-ms-transition:0.2s opacity linear, 0.2s height ease;transition:0.2s opacity linear, 0.2s height ease;height:0;overflow:hidden;}\n    #population span:nth-child(1) {color:#FCE045;}\n    #population.visible {opacity:1;pointer-events:auto;}\n    \n    .barbutton {background:url('../img/1/barsheet.png');image-rendering:-moz-crispt-edges;position:absolute;}\n    \n    #chatbox {background:url('../img/1/barsheet.png');image-rendering:-moz-crisp-edges;position:absolute;left:50%;z-index:5;-moz-transition:0.2s bottom ease;-webkit-transition:0.2s bottom ease;-o-transition:0.2s bottom ease;-ms-transition:0.2s bottom ease;transition:0.2s bottom ease;}\n    .bubble p {-moz-user-select:none;-webkit-user-select:none;}\n    \n    #instructions {position:absolute;top:50%;left:50%;z-index:1000;font-family:'GraphicPixel';pointer-events:none;opacity:0;-moz-transition:0.25s opacity linear;-webkit-transition:0.4s top ease, 0.4s opacity linear;-o-transition:0.4s top ease, 0.4s opacity linear;-ms-transition:0.4s top ease, 0.4s opacity linear;transition:0.4s top ease, 0.4s opacity linear;}\n    #instructions.active, #achievements.active {opacity:1;pointer-events:auto;}\n    \n    #weapon, #armor {image-rendering:-moz-crisp-edges;}\n\n    #achievements, #achievements li, .coin, #achievement-notification, #coinsparks, .achievement-sharing a, #previous, #next {background:url('../img/1/achievements.png');image-rendering:-moz-crisp-edges;}\n    #achievements {font-family:'GraphicPixel'; position:absolute;top:50%;left:50%;z-index:1000;opacity:0;pointer-events:none;-moz-transition:0.25s opacity linear;-webkit-transition:0.4s top ease, 0.4s opacity linear;-o-transition:0.4s top ease, 0.4s opacity linear;-ms-transition:0.4s top ease, 0.4s opacity linear;transition:0.4s top ease, 0.4s opacity linear;}\n    #achievements li {clear:both;position:relative;}\n    #achievements li .coin, #achievements li .achievement-name {float:left;}\n    #achievements li .coin {opacity:0;}\n    #achievements li.unlocked .achievement-name {color:#fce045;}\n    #achievements li.unlocked .coin {opacity:1;}\n    #achievements .achievement-name {color:#fff;}\n    #achievements .achievement-description {float:right;width:65%;}\n    #achievement-notification {position:absolute;z-index:8;bottom:0;left:50%;text-align:center;font-family:'GraphicPixel';pointer-events:none;-moz-transition:0.3s height ease;-webkit-transition:0.3s height ease;-o-transition:0.3s height ease;-ms-transition:0.3s height ease;}\n    #achievement-notification .name, #achievement-notification .title {opacity:0;-moz-transition:0.3s opacity linear;-webkit-transition:0.3s opacity linear;-o-transition:0.3s opacity linear;-ms-transition:0.3s opacity linear;transition:0.3s opacity linear;}\n    #achievement-notification.active .name, #achievement-notification.active .title {opacity:1;}\n    #achievement-info {overflow:hidden;height:100%;}\n    .achievement-sharing {position:absolute;display:none;}\n    #achievements li.unlocked:hover .achievement-sharing {display:block;}\n    .achievement-sharing a {display:block;float:left;}\n    \n\t#bubbles a {pointer-events:auto;text-decoration:none;color:#fcda5c;}\n\n    #create-new span:hover, #cancel span:hover {cursor:pointer;color:#d83939;}\n    #create-new span span {color:#b2af9b;}\n    #create-new span span:hover {color:#b2af9b;}\n    #playername {color:#fff;}\n\n    #credits, #loadcharacter, #confirmation, #death, #error, #about {position:absolute;left:50%;text-align:center;font-family:'GraphicPixel', sans-serif;z-index:1000;}\n    \n    #playerimage {image-rendering: -moz-crisp-edges; image-rendering: -webkit-optimize-contrast;}\n    \n    #parchment p {font-family:'GraphicPixel';}\n    \n    #credits, #death, #about {top:50%;}\n    .intro #credits, .intro #about {top:55%;}\n    #credits h1 a {color:#fcda5c;text-decoration:none;}\n    #authors div a {display:block;color:#fff;text-decoration:none;}\n    #authors div a:hover, #credits h1 a:hover {color:#93C1FF;}\n    #seb {clear:both;}\n\n    #portrait {display:none;}\n\n    #about .link a:hover {color:#d83939;}\n\n    footer {font-family:'GraphicPixel';position:absolute;bottom:5%;left:0;text-align:center;width:100%;color:#c6c0a3;-moz-transition:0.2s opacity linear;-webkit-transition:0.2s opacity linear;-o-transition:0.2s opacity linear;-ms-transition:0.2s opacity linear;transition:0.2s opacity linear;}\n    .upscaled.game footer {color:#8a8a8a;}\n    \n    .intro footer {opacity:1;}\n    footer:hover {opacity:1;}\n    footer div  {display:inline-block;}\n    #sharing a {display:block;float:right;background-size:844px;position:relative;top:-2px;}\n    #sharing .facebook {height:22px;width:22px;background-position:-822px -224px;margin:0 12px 0 12px;}\n    #sharing .facebook:hover {background-position:-822px -224px;}\n    #sharing .twitter {height:22px;width:32px;background-position:-770px -224px;margin:0 12px 0 0;}\n    #sharing .twitter:hover {background-position:-770px -224px;}\n    #sharing .gplus {height:22px;width:22px;background:url('../img/common/gplus.png');margin:0 12px 0 0px;}\n    #credits-link span {display:inline-block;margin-left:12px;}\n    #credits-link span:hover {color:#fcda5c;cursor:pointer;}\n    \n    #sharing a:hover {-moz-transform:scale(1.2);-webkit-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2);}\n    #sharing a:active {-moz-transform:scale(1);-webkit-transform:scale(1);-o-transform:scale(1);transform:scale(1);}\n\n    .close {position:absolute;z-index:20000;}\n    .close:hover {cursor:pointer;}\n    \n    .ribbon {position:absolute;}\n    .ribbon:hover {cursor:pointer;}\n    .ribbon .top {-moz-transition:0.25s height ease;-webkit-transition:0.25s height ease;-o-transition:0.25s height ease;-ms-transition:0.25s height ease;transition:0.25s height ease;}\n    \n\t.bubble {background:rgba(45,45,45,0.8);padding:0px 12px 0px 12px;border-radius:8px;color:rgba(255,255,255,0.8);display:inline-block;text-align:center;position:absolute;}\n\t.thingy {height:10px;width:11px;background:url('../img/common/thingy.png');margin:0 auto;margin-top:-10px;top:10px;position:relative;}\n    \n    .alert {height:50px;background:#d83939;width:100%;color:#eee;font-size:20px;font-family:'GraphicPixel', arial, sans-serif;text-align:center;line-height:50px;border-bottom:1px solid #000;}\n\n    #instructions, #achievements, #lists, #about, #credits, .ribbon, .play, .play div, .barbutton {-webkit-tap-highlight-color:transparent;}\n    #nameinput::-webkit-input-placeholder  {color:#fff;}\n\n    #resize-check {position:absolute;height:0;top:0;left:0;-moz-transition:0.001s height ease;-webkit-transition:0.001s height ease;-o-transition:0.001s height ease;-ms-transition:0.001s height ease;transition:0.001s height ease;}\n\n    #death p em {display:block;font-style:normal;}\n\n/* Magic Parchment */\n\n    .parchment-left {position:absolute;top:0;left:0%;}\n    .parchment-right {position:absolute;top:0;right:0%;}\n    .parchment-middle {position:absolute;left:50%;top:0;}\n    .animate .parchment-left {-moz-animation:parchleft 1s ease 1;-webkit-animation:parchleft 1s ease 1;-o-animation:parchleft 1s ease 1;-ms-animation:parchleft 1s ease 1;animation:parchleft 1s ease 1;}\n    .animate .parchment-right {-moz-animation:parchright 1s ease 1;-webkit-animation:parchright 1s ease 1;-o-animation:parchright 1s ease 1;-ms-animation:parchright 1s ease 1;animation:parchright 1s ease 1;}\n\n    #credits, #createcharacter, #loadcharacter, #confirmation, #death, #error, #about {opacity:0;pointer-events:none;-moz-transition:none;-webkit-transition:none;-o-transition:none;-ms-transition:none;transition:none;}\n    .credits #credits, .createcharacter #createcharacter, .loadcharacter #loadcharacter, .confirmation #confirmation, .death #death, .error #error, .about #about {opacity:1;pointer-events:auto;-moz-transition:0.5s opacity linear;-webkit-transition:0.5s opacity linear;-o-transition:0.5s opacity linear;-ms-transition:0.5s opacity linear;transition:0.5s opacity linear;}\n\n/* States & Transitions */\n\n    #intro {-moz-transition:0.4s opacity linear;-webkit-transition:0.4s opacity linear;-o-transition:0.4s opacity linear;-ms-transition:0.4s opacity linear;transition:0.4s opacity linear;}\n    #mask, #logo, #parchment {opacity:0;}\n    .intro #logo, .intro #parchment {opacity:1;}\n\n    .game #confirmation, .game #loadcharacter, .game #createcharacter, .game #error {display:none;}\n\n    .game #parchment {z-index:0;-moz-transition:0.5s opacity linear 0.5s, 0s z-index linear 1s;-webkit-transition:0.5s opacity linear 0.5s, 0s z-index linear 1s;-o-transition:0.5s opacity linear 0.5s, 0s z-index linear 1s;-ms-transition:0.5s opacity linear 0.5s, 0s z-index linear 1s;transition:0.5s opacity linear 0.5s, 0s z-index linear 1s;top:50%;}\n    .game #credits, .game #death, .game #about {opacity:0;-moz-transition:0s opacity linear 0s;-webkit-transition:0s opacity linear 0s;-o-transition:0s opacity linear 0s;-ms-transition:0s opacity linear 0s;transition:0s opacity linear 0s;}\n    .game.credits #credits, .game.death #death, .game.about #about {opacity:1;-moz-transition:0.5s opacity linear 0.5s;-webkit-transition:0.5s opacity linear 0.5s;-o-transition:0.5s opacity linear 0.5s;-ms-transition:0.5s opacity linear 0.5s;transition:0.5s opacity linear 0.5s;}\n    .game.credits #parchment, .game.death #parchment, .game.about #parchment {opacity:1;-moz-transition:0.5s opacity linear 0s, 0s z-index linear 0s;-webkit-transition:0.5s opacity linear 0s, 0s z-index linear 0s;-o-transition:0.5s opacity linear 0s, 0s z-index linear 0s;-ms-transition:0.5s opacity linear 0s, 0s z-index linear 0s;transition:0.5s opacity linear 0s, 0s z-index linear 0s;z-index:200;}\n    .game .parchment-left {-moz-transition:0.5s left ease;-webkit-transition:0.5s left ease;-o-transition:0.5s left ease;-ms-transition:0.5s left ease;transition:0.5s left ease;left:41%;}\n    .game .parchment-right {-moz-transition:0.5s right ease;-webkit-transition:0.5s right ease;-o-transition:0.5s right ease;-ms-transition:0.5s right ease;transition:0.5s right ease;right:41%;}\n    .game .parchment-middle {-moz-transition:0.5s width ease, 0.5s margin-left ease, 0.5s background-position ease;-webkit-transition:0.5s width ease, 0.5s margin-left ease, 0.5s background-position ease;-o-transition:0.5s width ease, 0.5s margin-left ease, 0.5s background-position ease;-ms-transition:0.5s width ease, 0.5s margin-left ease, 0.5s background-position ease;transition:0.5s width ease, 0.5s margin-left ease, 0.5s background-position ease;width:0px;margin-left:0px;}\n    .game.credits .parchment-left, .game.death .parchment-left, .game.about .parchment-left {left:0%;}\n    .game.credits .parchment-right, .game.death .parchment-right, .game.about .parchment-right {right:0%;}\n\n    #container {z-index:100;background:rgba(0,0,0,0.2);-moz-transition:1s opacity linear 0.5s;-webkit-transition:1s opacity linear 0.5s;-o-transition:1s opacity linear 0.5s;-ms-transition:1s opacity linear 0.5s;transition:1s opacity linear 0.5s;}\n    .intro #container {opacity:0;pointer-events:none;}\n    .game #container {opacity:1;}\n\n    #logo, #parchment {-moz-transition:0.5s opacity linear;-webkit-transition:0.5s opacity linear;-o-transition:0.5s opacity linear;-ms-transition:0.5s opacity linear;transition:0.5s opacity linear;}\n\n    @-moz-keyframes flash { 0% {background:#ffa2a2;} 100% {background:#e22525; }}\n    @-webkit-keyframes flash { 0% {background:#ffa2a2;} 100% {background:#e22525; }}\n    @-o-keyframes flash { 0% {background:#ffa2a2;} 100% {background:#e22525; }}\n    @-ms-keyframes flash { 0% {background:#ffa2a2;} 100% {background:#e22525; }}\n    \n    @-moz-keyframes glow { from {color:#fcda5c;} to {color:#fff;} }\n    @-webkit-keyframes glow { from {color:#fcda5c;} to {color:#fff;} }\n    @-o-keyframes glow { from {color:#fcda5c;} to {color:#fff;} }\n    @-ms-keyframes glow { from {color:#fcda5c;} to {color:#fff;} }\n    \n    @-moz-keyframes logo1 { from { background-position: 0 -42px; } to { background-position: 0 -294px; }}\n    @-webkit-keyframes logo1 { from { background-position: 0 -42px; } to { background-position: 0 -294px; }}\n    @-o-keyframes logo1 { from { background-position: 0 -42px; } to { background-position: 0 -294px; }}\n    @-ms-keyframes logo1 { from { background-position: 0 -42px; } to { background-position: 0 -294px; }}\n    @-moz-keyframes logo2 { from { background-position: 0 -84px; } to { background-position: 0 -588px; }}\n    @-webkit-keyframes logo2 { from { background-position: 0 -84px; } to { background-position: 0 -588px; }}\n    @-o-keyframes logo2 { from { background-position: 0 -84px; } to { background-position: 0 -588px; }}\n    @-ms-keyframes logo2 { from { background-position: 0 -84px; } to { background-position: 0 -588px; }}\n    @-moz-keyframes logo3 { from { background-position: 0 -126px; } to { background-position: 0 -882px; }}\n    @-webkit-keyframes logo3 { from { background-position: 0 -126px; } to { background-position: 0 -882px; }}\n    @-o-keyframes logo3 { from { background-position: 0 -126px; } to { background-position: 0 -882px; }}\n    @-ms-keyframes logo3 { from { background-position: 0 -126px; } to { background-position: 0 -882px; }}\n    \n    @-moz-keyframes parchleft { 0% { left:0%; } 45% { left:41%; } 55% { left:41%; } 100% { left:0%; }}\n    @-webkit-keyframes parchleft { 0% { left:0%; } 45% { left:41%; } 55% { left:41%; } 100% { left:0%; }}\n    @-o-keyframes parchleft { 0% { left:0%; } 45% { left:41%; } 55% { left:41%; } 100% { left:0%; }}\n    @-ms-keyframes parchleft { 0% { left:0%; } 45% { left:41%; } 55% { left:41%; } 100% { left:0%; }}\n    @-moz-keyframes parchright { 0% {right:0%; } 45% { right:41%; } 55% { right:41%; } 100% { right:0%; }}\n    @-webkit-keyframes parchright { 0% {right:0%; } 45% { right:41%; } 55% { right:41%; } 100% { right:0%; }}\n    @-o-keyframes parchright { 0% {right:0%; } 45% { right:41%; } 55% { right:41%; } 100% { right:0%; }}\n    @-ms-keyframes parchright { 0% {right:0%; } 45% { right:41%; } 55% { right:41%; } 100% { right:0%; }}\n\n    @-moz-keyframes parchmiddle3 {\n        0% {width:1038px;margin-left:-519px;background-position:-114px -882px;}\n        45% {width:0px;margin-left:0px;background-position: -633px -882px;}\n        55% {width:0px;margin-left:0px;background-position: -633px -882px;}\n        100% {width:1038px;margin-left:-519px;background-position: -114px -882px;}\n    }\n    @-webkit-keyframes parchmiddle3 {\n        0% {width:1038px;margin-left:-519px;background-position:-114px -882px;}\n        45% {width:0px;margin-left:0px;background-position: -633px -882px;}\n        55% {width:0px;margin-left:0px;background-position: -633px -882px;}\n        100% {width:1038px;margin-left:-519px;background-position: -114px -882px;}\n    }\n    @-o-keyframes parchmiddle3 {\n        0% {width:1038px;margin-left:-519px;background-position:-114px -882px;}\n        45% {width:0px;margin-left:0px;background-position: -633px -882px;}\n        55% {width:0px;margin-left:0px;background-position: -633px -882px;}\n        100% {width:1038px;margin-left:-519px;background-position: -114px -882px;}\n    }\n    @-ms-keyframes parchmiddle3 {\n        0% {width:1038px;margin-left:-519px;background-position:-114px -882px;}\n        45% {width:0px;margin-left:0px;background-position: -633px -882px;}\n        55% {width:0px;margin-left:0px;background-position: -633px -882px;}\n        100% {width:1038px;margin-left:-519px;background-position: -114px -882px;}\n    }\n\n    @-moz-keyframes parchmiddle2 {\n        0% {width:692px;margin-left:-346px;background-position:-76px -588px;}\n        45% {width:0px;margin-left:0px;background-position: -422px -588px;}\n        55% {width:0px;margin-left:0px;background-position: -422px -588px;}\n        100% {width:692px;margin-left:-346px;background-position:-76px -588px;}\n    }\n    @-webkit-keyframes parchmiddle2 {\n        0% {width:692px;margin-left:-346px;background-position:-76px -588px;}\n        45% {width:0px;margin-left:0px;background-position: -422px -588px;}\n        55% {width:0px;margin-left:0px;background-position: -422px -588px;}\n        100% {width:692px;margin-left:-346px;background-position:-76px -588px;}\n    }\n    @-o-keyframes parchmiddle2 {\n        0% {width:692px;margin-left:-346px;background-position:-76px -588px;}\n        45% {width:0px;margin-left:0px;background-position: -422px -588px;}\n        55% {width:0px;margin-left:0px;background-position: -422px -588px;}\n        100% {width:692px;margin-left:-346px;background-position:-76px -588px;}\n    }\n    @-ms-keyframes parchmiddle2 {\n        0% {width:692px;margin-left:-346px;background-position:-76px -588px;}\n        45% {width:0px;margin-left:0px;background-position: -422px -588px;}\n        55% {width:0px;margin-left:0px;background-position: -422px -588px;}\n        100% {width:692px;margin-left:-346px;background-position:-76px -588px;}\n    }\n\n    @-moz-keyframes parchmiddle1 {\n        0% {width:346px;margin-left:-173px;background-position:-38px -294px;}\n        45% {width:0px;margin-left:0px;background-position: -211px -294px;}\n        55% {width:0px;margin-left:0px;background-position: -211px -294px;}\n        100% {width:346px;margin-left:-173px;background-position:-38px -294px;}\n    }\n    @-webkit-keyframes parchmiddle1 {\n        0% {width:346px;margin-left:-173px;background-position:-38px -294px;}\n        45% {width:0px;margin-left:0px;background-position: -211px -294px;}\n        55% {width:0px;margin-left:0px;background-position: -211px -294px;}\n        100% {width:346px;margin-left:-173px;background-position:-38px -294px;}\n    }\n    @-o-keyframes parchmiddle1 {\n        0% {width:346px;margin-left:-173px;background-position:-38px -294px;}\n        45% {width:0px;margin-left:0px;background-position: -211px -294px;}\n        55% {width:0px;margin-left:0px;background-position: -211px -294px;}\n        100% {width:346px;margin-left:-173px;background-position:-38px -294px;}\n    }\n    @-ms-keyframes parchmiddle1 {\n        0% {width:346px;margin-left:-173px;background-position:-38px -294px;}\n        45% {width:0px;margin-left:0px;background-position: -211px -294px;}\n        55% {width:0px;margin-left:0px;background-position: -211px -294px;}\n        100% {width:346px;margin-left:-173px;background-position:-38px -294px;}\n    }\n\n\n    @-moz-keyframes coinsparks1 { from { background-position: -216px -248px; } to { background-position: -360px -248px; }}\n    @-webkit-keyframes coinsparks1 { from { background-position: -216px -248px; } to { background-position: -360px -248px; }}\n    @-o-keyframes coinsparks1 { from { background-position: -216px -248px; } to { background-position: -360px -248px; }}\n    @-ms-keyframes coinsparks1 { from { background-position: -216px -248px; } to { background-position: -360px -248px; }}\n    @-moz-keyframes coinsparks2 { from { background-position: -432px -496px; } to { background-position: -720px -496px; }}\n    @-webkit-keyframes coinsparks2 { from { background-position: -432px -496px; } to { background-position: -720px -496px; }}\n    @-o-keyframes coinsparks2 { from { background-position: -432px -496px; } to { background-position: -720px -496px; }}\n    @-ms-keyframes coinsparks2 { from { background-position: -432px -496px; } to { background-position: -720px -496px; }}\n    @-moz-keyframes coinsparks3 { from { background-position: -648px -744px; } to { background-position: -1080px -744px; }}\n    @-webkit-keyframes coinsparks3 { from { background-position: -648px -744px; } to { background-position: -1080px -744px; }}\n    @-o-keyframes coinsparks3 { from { background-position: -648px -744px; } to { background-position: -1080px -744px; }}\n    @-ms-keyframes coinsparks3 { from { background-position: -648px -744px; } to { background-position: -1080px -744px; }}\n\n    @-moz-keyframes invincible { from {background:#fa6a00;} to {background:#fabc00;} }\n    @-webkit-keyframes invincible { from {background:#fa6a00;} to {background:#fabc00;} }\n    @-o-keyframes invincible { from {background:#fa6a00;} to {background:#fabc00;} }\n    @-ms-keyframes invincible { from {background:#fa6a00;} to {background:#fabc00;} }\n\n\n\n\t@media screen and (min-width: 1501px) {\n\t    \n\t    .upscaled #logo, .upscaled #logosparks, .upscaled .left-ornament, .upscaled .right-ornament, .upscaled #character, .upscaled #character div, .upscaled .button, .upscaled .button div, .upscaled #respawn, .upscaled #scroll, .upscaled #instructions, .upscaled .icon, .upscaled #tilt, .upscaled .parchment-left, .upscaled .parchment-middle, .upscaled .parchment-right, .upscaled .avatar, .upscaled .facebook, .upscaled .twitter, .upscaled .close, .upscaled .ribbon .top, .upscaled .ribbon .bottom, .upscaled #about .img, .upscaled .ext-link {background-image:url('../img/3/spritesheet.png');}\n\t    .upscaled #bar-container, .upscaled #healthbar, .upscaled .barbutton, .upscaled #chatbox, .upscaled #population {background-image:url('../img/3/barsheet.png');}\n\t    .upscaled #achievements, .upscaled #achievements li, .upscaled .coin, .upscaled #achievement-notification, .upscaled #coinsparks, .upscaled .achievement-sharing a, .upscaled #previous, .upscaled #next {background:url('../img/3/achievements.png');}\n\t    \n\t    \n        body {background:-moz-radial-gradient(rgba(0,0,0,0) 40%,rgba(0,0,0,1) 125%), url('../img/1/wood2.png') no-repeat 1587px 138px, url('../img/1/wood2.png') no-repeat 51px 519px, url('../img/1/wood3.png') no-repeat 228px 219px, url('../img/1/wood.png') repeat, #000; background-size:auto, 15px auto, 15px auto, 60px auto, 384px;}\n        body {background:-webkit-gradient(radial, center center, 360, center center, 1200, from(rgba(0,0,0,0)), to(rgba(0,0,0,1))), url('../img/3/wood2.png') no-repeat 1587px 138px, url('../img/3/wood2.png') no-repeat 51px 519px, url('../img/3/wood3.png') no-repeat 228px 219px, url('../img/3/wood.png') repeat, #000; background-size:auto, 15px auto, 15px auto, 60px auto, 384px;}\n        #logo, #logosparks, .left-ornament, .right-ornament, #character, #character div, .button, .button div, #respawn, #scroll, #instructions, .icon, .avatar, .close, #note, .ribbon .top, .ribbon .bottom, #about .img, .ext-link {background-size:1266px auto;}\n        #logo {height:126px;width:687px;position:absolute;top:10%;left:50%;margin-left:-344px;z-index:3;}\n        #logosparks {width:687px;height:126px;z-index:4;-moz-animation:logo3 .8s steps(6, end) infinite;-webkit-animation:logo3 .8s steps(6, end) infinite;-o-animation:logo3 .8s steps(6, end) infinite;-ms-animation:logo3 .8s steps(6, end) infinite;}\n        #parchment, #loadcharacter, #confirmation, #error {width:1266px;height:546px;position:absolute;top:55%;left:50%;margin-left:-633px;margin-top:-273px;font-size:30px;text-align:center;z-index:2;}\n        #parchment h1 {margin-top:60px;font-weight:normal;}\n        .left-ornament, .right-ornament {height:36px;width:93px;display:inline-block;margin:0 20px;position:relative;top:12px;}\n        .left-ornament {background-position:-1062px 0;}\n        .right-ornament {background-position:-1155px 0;}\n        #character {height:63px;width:36px;margin:0 auto;background-position:-1062px -36px;margin-top:45px;position:relative;}\n        #character div {height:63px;width:36px;position:absolute;top:0;left:0;background-position:-1098px -36px;opacity:1;}\n        #character.disabled div {opacity:0;pointer-events:none;}\n        #parchment input {margin-top:30px; padding:0 15px; border:3px dashed #b2af9b; font-size:30px;border-radius:9px;height:61px;}\n        .button {height:153px;width:375px;background-position:-687px -306px;margin:30px auto 0 auto;position:relative;}\n        .play div {height:153px;width:375px;background-position:-687px 0px;}\n        .play div:active {background-position:-687px -459px;}\n        .play.loading div {background-position:-681px -2178px;}\n        .play.loading img {margin-top:-16px;margin-left:-16px;height:32px;width:32px;}\n        .stroke, .achievement-name {text-shadow:3px 3px 0 #373737, 3px -3px 0 #373737, 0 3px 0 #373737, 3px 0 0 #373737, -3px 3px 0 #373737, -3px -3px 0 #373737, 0 -3px 0 #373737, 0 3px 0 #373737, -3px 0 0 #373737;}\n\n        #loadcharacter h1, #confirmation h1, #error h1 {margin-top:30px;}\n        #playername {margin-top:15px;}\n        .loadcharacter .play, .confirmation .delete {margin:15px auto 15px auto;}\n        #confirmation p, #error p {font-size:30px;margin-top:60px;line-height:40px;}\n        #error p {width:70%;margin:60px auto 0;}\n        .button.delete {background-position:-687px -153px;}\n        .button.delete:active {background-position:0 -2178px;}\n        \n\t\t#container {width:1470px;margin:0 auto;position:absolute;top:50%;margin-top:-378px;left:50%;margin-left:-735px;}\n\t\t#canvasborder {padding:15px;background:url('../img/3/border.png') no-repeat;}\n\t\t#canvas {width:100%;height:672px;}\n\t\t#fade {width:1440px;height:672px;top:15px;left:15px;}\n\t\t\n\t\t#instructions {height:516px;width:1251px;background-position:0 -1581px;margin-left:-624px;margin-top:-279px;color:#373737;}\n\t\t#instructions h1 {font-size:40px;text-align:center;margin:50px 0;}\n        #instructions ul {font-size:30px;margin-top:30px;}\n        #instructions ul li {margin:20px 0; clear:left;}\n        #instructions li:nth-child(1) span {height:87px;width:45px;background-position:-1134px -36px; display:block;float:left;margin: 0 30px 9px 60px;position: relative;top: -39px;}\n        #instructions li:nth-child(2) span {height:48px;width:39px;background-position:-1179px -36px; display:block;float:left;margin: 0 36px 42px 60px;position: relative;top: -9px;}\n        #instructions li:nth-child(3) span {height:63px;width:48px;background-position:-1218px -36px; display:block;float:left;margin: 0 27px 0 60px;position: relative;top: -18px;}\n        #instructions p {text-align:center;font-family:'GraphicPixel';font-size:20px;clear:left;margin-top:50px;}\n        \n        #playerimage {height: 96px; width: 96px;}\n        \n        .close {height:48px;width:48px;top:-12px;right:-15px;background-position:-1062px -378px;}\n        .close:hover {background-position:-1110px -378px;}\n        .close:active {background-position:-1158px -378px;}\n     \n        .ribbon {width:54px;right:30px;top:12px;}\n        .ribbon .top {width:100%;height:18px;background-position:-1143px -516px;}\n        .ribbon .bottom {width:100%;height:66px;background-position:-1143px -555px;}\n        .ribbon:hover .top {height:30px;}\n        .ribbon:hover .bottom {background-position:-1197px -555px;}\n        #createcharacter .ribbon {right:30px;top:12px;}\n        #loadcharacter .ribbon {right:148px;top:-13px;}\n        \n        /*Death & Respawn*/\n        #death p {font-size:30px;margin-top:140px;}\n        #death p em {margin-top:50px;}\n\t\t#respawn {width:375px;height:153px;margin:60px auto 0 auto;background-position: 0 -1428px;}\n\t\t#respawn:active {background-position:-375px -1428px;}\n\t\t\n\t\t\n\t\t/*Bubbles*/\n\t\t#bubbles {width:1440px;height:672px;margin-bottom:-672px;position:relative;top:-672px;pointer-events:none;}\n\t\tp {font-family:arial, sans-serif;font-size:12px;margin:0;padding:12px 0}\n\t    .bubble p {font-family:\"GraphicPixel\"; font-size:18px;line-height:24px;}\n\t    \n\t    /*GUI Bar*/\n\t    #bar-container {height:51px;top:-3px;background-size:1440px;}\n\n\t\t#healthbar {height:39px;background-position:0 -51px;width:306px;top:9px;background-size:1440px;z-index:20;}\n\t\t#hitpoints {width:0px;height:33px;top:12px;left:33px;z-index:10;position:absolute;}\n\n        #armor, #weapon {width:48px;height:48px;position:absolute;background-size:288px;background-position:-96px;}\n        #weapon {left:312px;top:3px;background-size:288px;}\n        #armor {left:363px;top:3px;}\n\n        #notifications {width:588px;margin-left:-294px;font-size:20px;color:#eee;top:6px;height:45px;}\n        #notifications div.top {top:-45px;}\n        #notifications span {line-height:45px;height:45px;}\n\n        #playercount {font-size:20px;left:1076px;top:18px;width:172px;text-align:center;}\n        #population {background-size:1440px;right:105px;bottom:66px;width:393px;background-position:-720px -144px;font-size:20px;line-height:30px;}\n        #population.visible {height:96px;}\n        #instance-population {padding-top:18px;}\n\n\n        .barbutton {background-size:1440px;height:45px;width:42px;}\n        #chatbutton {background-position:-306px -51px;top:3px;left:1260px;}\n        #chatbutton:hover {background-position:-348px -51px;}\n        #chatbutton.active {background-position:-390px -51px;}\n        #achievementsbutton {background-position:-432px -51px;top:3px;left:1305px;}\n        #achievementsbutton:hover, #achievementsbutton.blink:hover {background-position:-474px -51px;}\n        #achievementsbutton.blink {background-position:-864px -51px;}\n        #achievementsbutton.active {background-position:-516px -51px;}\n        #helpbutton {background-position:-558px -51px;top:3px;left:1350px;}\n        #helpbutton:hover {background-position:-600px -51px;}\n        #helpbutton.active {background-position:-642px -51px;}\n        #mutebutton {background-position:-684px -51px;top:3px;left:1395px;}\n        #mutebutton:hover {background-position:-726px -51px;}\n        #mutebutton.active {background-position:-768px -51px;}\n        \n        #chatbox {height:48px;width:1182px;background-size:1440px;background-position:0 -96px;margin-left:-591px;bottom:18px;}\n        #chatbox.active {bottom:66px;}\n\t\t#chatbox input {font-size:20px;color:#eee;background:none;width:90%;border:0;margin-left:2%;padding:16px 0;}\n\t\t\n\t\t/*Credits*/\n        #credits, #death, #about {width:1266px;height:546px;margin-left:-633px;margin-top:-273px;font-size:30px;}\n        .parchment-left, .parchment-right, .parchment-middle {background-size:1266px;}\n        .parchment-left {width:114px;height:546px;background-position:0 -882px;}\n        .parchment-right {width:114px;height:546px;background-position:-1152px -882px;}\n        .parchment-middle {height:546px;background-position:-114px -882px;width:1038px;margin-left:-519px;}\n        \n        #credits h1, #about h1 {margin-top:35px;font-weight:normal;}\n        #credits h1 a {font-size:36px;}\n        .game #credits h1, .game #about h1 {margin-top:52px;}\n        #credits h1 span.title {max-width:300px;display:inline-block;line-height:39px;margin-top:-90px;position:relative;top:36px;}\n        #authors {clear:both;margin-top:100px;}\n        #guillaume, #franck {width:47%;line-height:36px;}\n        #guillaume {float:left;text-align:right;}\n        #franck {float:right;text-align:left;}\n        .avatar {height:75px;width:39px;}\n        #guillaume .avatar {float:right;background-position:-1062px -303px;margin-left:60px;}\n        #franck .avatar {float:left;background-position:-1101px -303px;margin-right:60px;}\n        #seb {margin:270px auto 0 auto;width:54%;color:#373737;font-size:25px;}\n        #seb a {color:#373737;text-decoration:none;}\n        #seb a:hover {color:#397cd8;}\n        #note {float:left;background-position:-1203px -336px;height:33px;width:30px;}\n        #close-credits {margin:45px auto 0 auto;text-align:center;clear:both;font-size:20px;color:#373737;}\n        #sharing {width:240px;}\n        \n        /*About*/\n        #about h1 span.title {max-width:400px;display:inline-block;line-height:39px;margin-top:-90px;position:relative;}\n        #close-about {margin:230px auto 0 auto;text-align:center;clear:both;font-size:20px;color:#373737;}\n        #about #game-desc {font-size:28px;text-align:center;max-width:70%;margin:30px auto;line-height:34px;}\n        #about .left p, #about .right p {font-size:20px;text-align:left;line-height:26px;padding:0;margin-top:-10px;}\n        #about .left {width:31%;float:left;margin-left:12%;}\n        #about .right {width:37%;float:right;margin-right:12%;}\n        #about .left .img {height:90px;width:81px;float:left;background-position:-1062px -516px;margin-right:20px;}\n        #about .right .img {height:90px;width:168px;float:left;background-position:-1062px -426px;margin-right:20px;}\n        #about .link {clear:both;font-size:20px;margin:30px 0;display:block;text-align:left;line-height:16px;}\n        #about .link a {color:#2e7fdd;text-decoration:none;}\n        #about .link .ext-link {height:18px;width:18px;background-position:-1197px -516px;display:block;float:left;margin-right:10px;}\n        \n        .animate .parchment-middle {-moz-animation:parchmiddle3 1s ease 1;-webkit-animation:parchmiddle3 1s ease 1;-o-animation:parchmiddle3 1s ease 1;-ms-animation:parchmiddle3 1s ease 1;}\n\n        .game .parchment-middle {background-position: -633px -882px;}\n        .game.credits .parchment-middle, .game.death .parchment-middle, .game.about .parchment-middle {width:1038px;margin-left:-519px;background-position: -114px -882px;}\n        \n\t    footer {font-size:20px;}\n        #resize-check {height:3px;}\n\t}\n\n\t@media screen and (max-width: 1500px) {\n\n\t    .upscaled #logo, .upscaled #logosparks, .upscaled .left-ornament, .upscaled .right-ornament, .upscaled #character, .upscaled #character div, .upscaled .button, .upscaled .button div, .upscaled #respawn, .upscaled #scroll, .upscaled #instructions, .upscaled .icon, .upscaled #tilt, .upscaled .parchment-left, .upscaled .parchment-middle, .upscaled .parchment-right, .upscaled .avatar, .upscaled .facebook, .upscaled .twitter, .upscaled .close, .upscaled .ribbon .top, .upscaled .ribbon .bottom, .upscaled #about .img, .upscaled .ext-link {background-image:url('../img/2/spritesheet.png');}\n\t    .upscaled #bar-container, .upscaled #healthbar, .upscaled .barbutton, .upscaled #chatbox, .upscaled #population {background-image:url('../img/2/barsheet.png');}\n\t    .upscaled #achievements, .upscaled #achievements li, .upscaled .coin, .upscaled #achievement-notification, .upscaled #coinsparks, .upscaled .achievement-sharing a, .upscaled #previous, .upscaled #next {background:url('../img/2/achievements.png');}\n\n        body {background:-moz-radial-gradient(rgba(0,0,0,0) 40%,rgba(0,0,0,1) 125%), url('../img/1/wood.png') repeat, #000; background-size:auto, 256px;}        \n        body {background:-webkit-gradient(radial, center center, 240, center center, 800, from(rgba(0,0,0,0)), to(rgba(0,0,0,1))), url('../img/2/wood.png') repeat, #000; background-size:auto, 256px;}\n        #logo, #logosparks, .left-ornament, .right-ornament, #character, #character div, .button, .button div, #respawn, #scroll, #instructions, .icon, .avatar, .close, #note, .ribbon .top, .ribbon .bottom, #about .img, .ext-link {background-size:844px auto;}\n        #logo {height:84px;width:458px;position:absolute;top:10%;left:50%;margin-left:-229px;z-index:3;}\n        #logosparks {width:458px;height:84px;z-index:4;-moz-animation:logo2 .8s steps(6, end) infinite;-webkit-animation:logo2 .8s steps(6, end) infinite;-o-animation:logo2 .8s steps(6, end) infinite;-ms-animation:logo2 .8s steps(6, end) infinite;}\n        #parchment, #loadcharacter, #confirmation, #error {width:844px;height:364px;position:absolute;top:55%;left:50%;margin-left:-422px;margin-top:-182px;font-size:20px;text-align:center; z-index:2;}\n        #parchment h1 {margin-top:40px;font-weight:normal;}\n        .left-ornament, .right-ornament {height:24px;width:62px;display:inline-block;margin:0 15px;position:relative;top:7px;}\n        .left-ornament {background-position:-708px 0;}\n        .right-ornament {background-position:-770px 0;}\n        #character {height:42px;width:24px;margin:0 auto;background-position:-708px -24px;margin-top:30px;position:relative;}\n        #character div {height:42px;width:24px;position:absolute;top:0;left:0;background-position:-732px -24px;opacity:1;}\n        #character.disabled div {opacity:0;pointer-events:none;}\n        #parchment input {margin-top:20px; padding:0 10px; border:2px dashed #b2af9b; font-size:20px;border-radius:6px;height:41px;}\n        .button {height:102px;width:250px;background-position:-458px -204px;margin:20px auto 0 auto;position:relative;}\n        .play div {height:102px;width:250px;background-position:-458px 0px;}\n        .play div:active {background-position:-458px -306px;}\n        .play.loading div {background-position:-454px -1452px;}\n        .play.loading img {margin-top:-12px;margin-left:-12px;height:24px;width:24px;}\n        .stroke, .achievement-name {text-shadow:2px 2px 0 #373737, 2px -2px 0 #373737, 0 2px 0 #373737, 2px 0 0 #373737, -2px 2px 0 #373737, -2px -2px 0 #373737, 0 -2px 0 #373737, 0 2px 0 #373737, -2px 0 0 #373737;}\n        \n        #loadcharacter h1, #confirmation h1, #error h1 {margin-top:20px;}\n        #playername {margin-top:10px;}\n        .loadcharacter .play, .confirmation .delete {margin:10px auto 10px auto;}\n        #confirmation p, #error p {font-size:20px;margin-top:40px;line-height:30px;}\n        #error p {width:70%;margin:40px auto 0;}\n        .button.delete {background-position:-458px -102px;}\n        .button.delete:active {background-position:0 -1452px;}\n        \n\t\t#container {width:980px;margin:0 auto;position:absolute;top:50%;margin-top:-252px;left:50%;margin-left:-490px;}\n\t\t#canvasborder {padding:10px;background:url('../img/2/border.png') no-repeat;}\n\t\t#canvas {width:100%;height:448px;}\n\t\t#fade {width:960px;height:448px;top:10px;left:10px;}\n\n\t\t#instructions {height:344px;width:834px;background-position:0 -1054px;margin-left:-416px;margin-top:-186px;color:#373737;}\n\t\t#instructions h1 {font-size:30px;text-align:center;margin:40px 0;}\n        #instructions ul {font-size:20px;margin-top:40px;}\n        #instructions ul li {margin:20px 0; clear:left;}\n        #instructions li:nth-child(1) span {height:58px;width:30px;background-position:-756px -24px; display:block;float:left;margin: 0 20px 6px 40px;position: relative;top: -26px;}\n        #instructions li:nth-child(2) span {height:32px;width:26px;background-position:-786px -24px; display:block;float:left;margin: 0 24px 28px 40px;position: relative;top: -6px;}\n        #instructions li:nth-child(3) span {height:42px;width:32px;background-position:-812px -24px; display:block;float:left;margin: 0 18px 0 40px;position: relative;top: -12px;}\n        #instructions p {text-align:center;font-family:'GraphicPixel';font-size:20px;clear:left;margin-top:20px;}\n\n        #playerimage {height: 64px; width: 64px;}\n        \n        .close {height:32px;width:32px;top:-8px;right:-10px;background-position:-708px -252px;}\n        .close:hover {background-position:-740px -252px;}\n        .close:active {background-position:-772px -252px;}\n        \n        .ribbon {width:36px;right:20px;top:8px;}\n        .ribbon .top {width:100%;height:12px;background-position:-762px -344px;}\n        .ribbon .bottom {width:100%;height:44px;background-position:-762px -370px;}\n        .ribbon:hover .top {height:20px;}\n        .ribbon:hover .bottom {background-position:-798px -370px;}\n        #createcharacter .ribbon {right:20px;top:8px;}\n        #loadcharacter .ribbon {right:99px;top:-8px;}\n        \n        /*Death & Respawn*/\n        #death p {font-size:20px;margin-top:90px;}\n        #death p em {margin-top:30px;}\n\t\t#respawn {width:250px;height:102px;margin:40px auto 0 auto;background-position: 0 -952px;}\n\t\t#respawn:active {background-position:-250px -952px;}\n\t\t\n\t\t/*Bubbles*/\n\t\t#bubbles {width:960px;height:448px;margin-bottom:-448px;position:relative;top:-448px;pointer-events:none;}\n\t\tp {font-family:arial, sans-serif;font-size:12px;margin:0;padding:0;line-height:35px;}\n\t    .bubble p {font-family:\"GraphicPixel\"; font-size:14px;}\n\t    \n\t    /*GUI Bar*/\n\t\t#bar-container {height:34px;top:-2px;background-size:960px;}\n\n\t\t#healthbar {height:26px;background-position:0 -34px;width:204px;top:6px;background-size:960px;z-index:20;}\n\t\t#hitpoints {width:0px;height:22px;top:8px;left:22px;z-index:10;position:absolute;}\n\n        #armor, #weapon {width:32px;height:32px;position:absolute;background-size:192px;background-position:-64px;}\n        #weapon {left:208px;top:2px;}\n        #armor {left:242px;top:2px;}\n\n        #notifications {width:392px;margin-left:-196px;font-size:16px;color:#eee;top:2px;height:30px;}\n        #notifications div.top {top:-30px;}\n        #notifications span {line-height:30px;height:30px;}\n        .windows #notifications span {line-height:34px;}\n\n        #playercount {font-size:16px;left:717px;top:10px;width:114px;text-align:center;}\n        #population {background-size:960px;right:70px;bottom:44px;width:262px;background-position:-480px -96px;font-size:14px;line-height:20px;}\n        #population.visible {height:64px;}\n        #instance-population {padding-top:12px;}\n\n        .barbutton {background-size:960px;height:30px;width:28px;}\n        #chatbutton {background-position:-204px -34px;top:2px;left:840px;}\n        #chatbutton:hover {background-position:-232px -34px;}\n        #chatbutton.active {background-position:-260px -34px;}\n        #achievementsbutton {background-position:-288px -34px;top:2px;left:870px;}\n        #achievementsbutton:hover, #achievementsbutton.blink:hover {background-position:-316px -34px;}\n        #achievementsbutton.blink {background-position:-576px -34px;}\n        #achievementsbutton.active {background-position:-344px -34px;}\n        #helpbutton {background-position:-372px -34px;top:2px;left:900px;}\n        #helpbutton:hover {background-position:-400px -34px;}\n        #helpbutton.active {background-position:-428px -34px;}\n        #mutebutton {background-position:-456px -34px;top:2px;left:930px;}\n        #mutebutton:hover {background-position:-484px -34px;}\n        #mutebutton.active {background-position:-512px -34px;}\n\n\t\t#chatbox {height:32px;width:788px;background-size:960px;background-position:0 -64px;margin-left:-394px;bottom:12px;}\n\t\t#chatbox.active {bottom:44px;}\n\t\t#chatbox input {font-size:20px;color:#eee;background:none;width:90%;border:0;margin-left:2%;padding:7px 0;}\n\t\t\n\t\t/*Credits*/\n        #credits, #death, #about {width:844px;height:364px;margin-left:-422px;margin-top:-182px;font-size:20px;}\n        .parchment-left, .parchment-right, .parchment-middle {background-size:844px;}\n        .parchment-left {width:76px;height:364px;background-position:0 -588px;}\n        .parchment-right {width:76px;height:364px;background-position:-768px -588px;}\n        .parchment-middle {height:364px;background-position:-76px -588px;width:692px;margin-left:-346px;}\n\n        #credits h1, #about h1 {margin-top:25px;font-weight:normal;}\n        #credits h1 a {font-size:24px;}\n        .game #credits h1, .game #about h1 {margin-top:40px;}\n        #credits h1 span.title {max-width:200px;display:inline-block;line-height:26px;margin-top:-60px;position:relative;top:24px;}\n        #authors {clear:both;margin-top:70px;}\n        #guillaume, #franck {width:47%;line-height:26px;}\n        #guillaume {float:left;text-align:right;}\n        #franck {float:right;text-align:left;}\n        .avatar {height:50px;width:26px;}\n        #guillaume .avatar {float:right;background-position:-708px -202px;margin-left:40px;}\n        #franck .avatar {float:left;background-position:-734px -202px;margin-right:40px;}\n        #seb {margin:180px auto 0 auto;width:52%;color:#373737;font-size:16px;}\n        #seb a {color:#373737;text-decoration:none;}\n        #seb a:hover {color:#397cd8;}\n        #note {float:left;background-position:-802px -224px;height:22px;width:20px;}\n        #close-credits {margin:20px auto 0 auto;text-align:center;clear:both;font-size:14px;}\n        #sharing {width:202px;}\n        \n        /*About*/\n        #about h1 span.title {max-width:400px;display:inline-block;line-height:24px;margin-top:-90px;position:relative;}\n        #close-about {margin:153px auto 0 auto;text-align:center;clear:both;font-size:14px;color:#373737;}\n        #about #game-desc {font-size:18px;text-align:center;max-width:70%;margin:25px auto;line-height:24px;}\n        #about .left p, #about .right p {font-size:14px;text-align:left;line-height:20px;padding:0;margin-top:-8px;}\n        .windows #about .left p, .windows #about .right p {font-size:13px;text-align:left;line-height:20px;padding:0;margin-top:-10px;}\n        #about .left {width:31%;float:left;margin-left:12%;}\n        #about .right {width:37%;float:right;margin-right:12%;}\n        #about .left .img {height:60px;width:54px;float:left;background-position:-708px -344px;margin-right:14px;}\n        #about .right .img {height:60px;width:112px;float:left;background-position:-708px -284px;margin-right:14px;}\n        #about .link {clear:both;font-size:14px;margin:20px 0;display:block;text-align:left;line-height:10px;}\n        #about .link a {color:#2e7fdd;text-decoration:none;}\n        #about .link .ext-link {height:12px;width:12px;background-position:-798px -344px;display:block;float:left;margin-right:7px;}\n        \n        .animate .parchment-middle {-moz-animation:parchmiddle2 1s ease 1;-webkit-animation:parchmiddle2 1s ease 1;-o-animation:parchmiddle2 1s ease 1;-ms-animation:parchmiddle2 1s ease 1;}\n\n        .game .parchment-middle {background-position: -422px -588px;}\n        .game.credits .parchment-middle, .game.death .parchment-middle, .game.about .parchment-middle {width:692px;margin-left:-346px;background-position: -76px -588px;}\n        \n\t    footer {font-size:16px;}\n        #resize-check {height:2px;}\n\t}\n\t\n\t@media screen and (max-height: 870px) {\n\n\t    .upscaled #logo, .upscaled #logosparks, .upscaled .left-ornament, .upscaled .right-ornament, .upscaled #character, .upscaled #character div, .upscaled .button, .upscaled .button div, .upscaled #respawn, .upscaled #scroll, .upscaled #instructions, .upscaled .icon, .upscaled #tilt, .upscaled .parchment-left, .upscaled .parchment-middle, .upscaled .parchment-right, .upscaled .avatar, .upscaled .facebook, .upscaled .twitter, .upscaled .close, .upscaled .ribbon .top, .upscaled .ribbon .bottom, .upscaled #about .img, .upscaled .ext-link {background-image:url('../img/2/spritesheet.png');}\n\t    .upscaled #bar-container, .upscaled #healthbar, .upscaled .barbutton, .upscaled #chatbox, .upscaled #population {background-image:url('../img/2/barsheet.png');}\n\t    .upscaled #achievements, .upscaled #achievements li, .upscaled .coin, .upscaled #achievement-notification, .upscaled #coinsparks, .upscaled .achievement-sharing a, .upscaled #previous, .upscaled #next {background:url('../img/2/achievements.png');}\n\n        body {background:-moz-radial-gradient(rgba(0,0,0,0) 40%,rgba(0,0,0,1) 125%), url('../img/1/wood.png') repeat, #000; background-size:auto, 256px;}        \n        body {background:-webkit-gradient(radial, center center, 240, center center, 800, from(rgba(0,0,0,0)), to(rgba(0,0,0,1))), url('../img/2/wood.png') repeat, #000; background-size:auto, 256px;}\n        #logo, #logosparks, .left-ornament, .right-ornament, #character, #character div, .button, .button div, #respawn, #scroll, #instructions, .icon, .avatar, .close, #note, .ribbon .top, .ribbon .bottom, #about .img, .ext-link {background-size:844px auto;}\n        #logo {height:84px;width:458px;position:absolute;top:10%;left:50%;margin-left:-229px;z-index:3;}\n        #logosparks {width:458px;height:84px;z-index:4;-moz-animation:logo2 .8s steps(6, end) infinite;-webkit-animation:logo2 .8s steps(6, end) infinite;-o-animation:logo2 .8s steps(6, end) infinite;-ms-animation:logo2 .8s steps(6, end) infinite;}\n        #parchment, #loadcharacter, #confirmation, #error {width:844px;height:364px;position:absolute;top:55%;left:50%;margin-left:-422px;margin-top:-182px;font-size:20px;text-align:center; z-index:2;}\n        #parchment h1 {margin-top:40px;font-weight:normal;}\n        .left-ornament, .right-ornament {height:24px;width:62px;display:inline-block;margin:0 15px;position:relative;top:7px;}\n        .left-ornament {background-position:-708px 0;}\n        .right-ornament {background-position:-770px 0;}\n        #character {height:42px;width:24px;margin:0 auto;background-position:-708px -24px;margin-top:30px;position:relative;}\n        #character div {height:42px;width:24px;position:absolute;top:0;left:0;background-position:-732px -24px;opacity:1;}\n        #character.disabled div {opacity:0;pointer-events:none;}\n        #parchment input {margin-top:20px; padding:0 10px; border:2px dashed #b2af9b; font-size:20px;border-radius:6px;height:41px;}\n        .button {height:102px;width:250px;background-position:-458px -204px;margin:20px auto 0 auto;position:relative;}\n        .play div {height:102px;width:250px;background-position:-458px 0px;}\n        .play div:active {background-position:-458px -306px;}\n        .play.loading div {background-position:-454px -1452px;}\n        .play.loading img {margin-top:-12px;margin-left:-12px;height:24px;width:24px;}\n        .stroke, .achievement-name {text-shadow:2px 2px 0 #373737, 2px -2px 0 #373737, 0 2px 0 #373737, 2px 0 0 #373737, -2px 2px 0 #373737, -2px -2px 0 #373737, 0 -2px 0 #373737, 0 2px 0 #373737, -2px 0 0 #373737;}\n        \n        #loadcharacter h1, #confirmation h1, #error h1 {margin-top:20px;}\n        #playername {margin-top:10px;}\n        .loadcharacter .play, .confirmation .delete {margin:10px auto 10px auto;}\n        #confirmation p, #error p {font-size:20px;margin-top:40px;line-height:30px;}\n        #error p {width:70%;margin:40px auto 0;}\n        .button.delete {background-position:-458px -102px;}\n        .button.delete:active {background-position:0 -1452px;}\n        \n\t\t#container {width:980px;margin:0 auto;position:absolute;top:50%;margin-top:-252px;left:50%;margin-left:-490px;}\n\t\t#canvasborder {padding:10px;background:url('../img/2/border.png') no-repeat;}\n\t\t#canvas {width:100%;height:448px;}\n\t\t#fade {width:960px;height:448px;top:10px;left:10px;}\n\n\t\t#instructions {height:344px;width:834px;background-position:0 -1054px;margin-left:-416px;margin-top:-186px;color:#373737;}\n\t\t#instructions h1 {font-size:30px;text-align:center;margin:40px 0;}\n        #instructions ul {font-size:20px;margin-top:40px;}\n        #instructions ul li {margin:20px 0; clear:left;}\n        #instructions li:nth-child(1) span {height:58px;width:30px;background-position:-756px -24px; display:block;float:left;margin: 0 20px 6px 40px;position: relative;top: -26px;}\n        #instructions li:nth-child(2) span {height:32px;width:26px;background-position:-786px -24px; display:block;float:left;margin: 0 24px 28px 40px;position: relative;top: -6px;}\n        #instructions li:nth-child(3) span {height:42px;width:32px;background-position:-812px -24px; display:block;float:left;margin: 0 18px 0 40px;position: relative;top: -12px;}\n        #instructions p {text-align:center;font-family:'GraphicPixel';font-size:20px;clear:left;margin-top:20px;}\n\n        #playerimage {height: 64px; width: 64px;}\n        \n        .close {height:32px;width:32px;top:-8px;right:-10px;background-position:-708px -252px;}\n        .close:hover {background-position:-740px -252px;}\n        .close:active {background-position:-772px -252px;}\n        \n        .ribbon {width:36px;right:20px;top:8px;}\n        .ribbon .top {width:100%;height:12px;background-position:-762px -344px;}\n        .ribbon .bottom {width:100%;height:44px;background-position:-762px -370px;}\n        .ribbon:hover .top {height:20px;}\n        .ribbon:hover .bottom {background-position:-798px -370px;}\n        #createcharacter .ribbon {right:20px;top:8px;}\n        #loadcharacter .ribbon {right:99px;top:-8px;}\n        \n        /*Death & Respawn*/\n        #death p {font-size:20px;margin-top:90px;}\n        #death p em {margin-top:30px;}\n\t\t#respawn {width:250px;height:102px;margin:40px auto 0 auto;background-position: 0 -952px;}\n\t\t#respawn:active {background-position:-250px -952px;}\n\t\t\n        /*Bubbles*/\n\t\t#bubbles {width:960px;height:448px;margin-bottom:-448px;position:relative;top:-448px;pointer-events:none;}\n\t\tp {font-family:arial, sans-serif;font-size:12px;margin:0;padding:0;}\n\t    .bubble p {font-family:\"GraphicPixel\"; font-size:14px;line-height:35px;}\n\t    \n\t    /*GUI Bar*/\n\t\t#bar-container {height:34px;top:-2px;background-size:960px;}\n\n\t\t#healthbar {height:26px;background-position:0 -34px;width:204px;top:6px;background-size:960px;z-index:20;}\n\t\t#hitpoints {width:0px;height:22px;top:8px;left:22px;z-index:10;position:absolute;}\n\n        #armor, #weapon {width:32px;height:32px;position:absolute;background-size:192px;background-position:-64px;}\n        #weapon {left:208px;top:2px;}\n        #armor {left:242px;top:2px;}\n\n        #notifications {width:392px;margin-left:-196px;font-size:16px;color:#eee;top:2px;height:30px;}\n        #notifications div.top {top:-30px;}\n        #notifications span {line-height:30px;height:30px;}\n        .windows #notifications span {line-height:34px;}\n\n        #playercount {font-size:16px;left:717px;top:10px;width:114px;text-align:center;}\n        #population {background-size:960px;right:70px;bottom:44px;width:262px;background-position:-480px -96px;font-size:14px;line-height:20px;}\n        #population.visible {height:64px;}\n        #instance-population {padding-top:12px;}\n\n        .barbutton {background-size:960px;height:30px;width:28px;}\n        #chatbutton {background-position:-204px -34px;top:2px;left:840px;}\n        #chatbutton:hover {background-position:-232px -34px;}\n        #chatbutton.active {background-position:-260px -34px;}\n        #achievementsbutton {background-position:-288px -34px;top:2px;left:870px;}\n        #achievementsbutton:hover, #achievementsbutton.blink:hover {background-position:-316px -34px;}\n        #achievementsbutton.blink {background-position:-576px -34px;}\n        #achievementsbutton.active {background-position:-344px -34px;}\n        #helpbutton {background-position:-372px -34px;top:2px;left:900px;}\n        #helpbutton:hover {background-position:-400px -34px;}\n        #helpbutton.active {background-position:-428px -34px;}\n        #mutebutton {background-position:-456px -34px;top:2px;left:930px;}\n        #mutebutton:hover {background-position:-484px -34px;}\n        #mutebutton.active {background-position:-512px -34px;}\n\n\t\t#chatbox {height:32px;width:788px;background-size:960px;background-position:0 -64px;margin-left:-394px;bottom:12px;}\n\t\t#chatbox.active {bottom:44px;}\n\t\t#chatbox input {font-size:20px;color:#eee;background:none;width:90%;border:0;margin-left:2%;padding:7px 0;}\n\t\t\n\t\t/*Credits*/\n        #credits, #death, #about {width:844px;height:364px;margin-left:-422px;margin-top:-182px;font-size:20px;}\n        .parchment-left, .parchment-right, .parchment-middle {background-size:844px;}\n        .parchment-left {width:76px;height:364px;background-position:0 -588px;}\n        .parchment-right {width:76px;height:364px;background-position:-768px -588px;}\n        .parchment-middle {height:364px;background-position:-76px -588px;width:692px;margin-left:-346px;}\n\n        #credits h1, #about h1 {margin-top:25px;font-weight:normal;}\n        #credits h1 a {font-size:24px;}\n        #credits h1 span.title {max-width:200px;display:inline-block;line-height:26px;margin-top:-60px;position:relative;top:24px;}\n        #authors {clear:both;margin-top:70px;}\n        #guillaume, #franck {width:47%;line-height:26px;}\n        #guillaume {float:left;text-align:right;}\n        #franck {float:right;text-align:left;}\n        .avatar {height:50px;width:26px;}\n        #guillaume .avatar {float:right;background-position:-708px -202px;margin-left:40px;}\n        #franck .avatar {float:left;background-position:-734px -202px;margin-right:40px;}\n        #seb {margin:180px auto 0 auto;width:52%;color:#373737;font-size:16px;}\n        #seb a {color:#373737;text-decoration:none;}\n        #seb a:hover {color:#397cd8;}\n        #note {float:left;background-position:-802px -224px;height:22px;width:20px;}\n        #close-credits {margin:20px auto 0 auto;text-align:center;clear:both;font-size:14px;}\n        #sharing {width:202px;}\n        \n        /*About*/\n        #about h1 span.title {max-width:400px;display:inline-block;line-height:24px;margin-top:-90px;position:relative;}\n        #close-about {margin:153px auto 0 auto;text-align:center;clear:both;font-size:14px;color:#373737;}\n        #about #game-desc {font-size:18px;text-align:center;max-width:70%;margin:25px auto;line-height:24px;}\n        #about .left p, #about .right p {font-size:14px;text-align:left;line-height:20px;padding:0;margin-top:-8px;}\n        .windows #about .left p, .windows #about .right p {font-size:13px;text-align:left;line-height:20px;padding:0;margin-top:-10px;}\n        #about .left {width:31%;float:left;margin-left:12%;}\n        #about .right {width:37%;float:right;margin-right:12%;}\n        #about .left .img {height:60px;width:54px;float:left;background-position:-708px -344px;margin-right:14px;}\n        #about .right .img {height:60px;width:112px;float:left;background-position:-708px -284px;margin-right:14px;}\n        #about .link {clear:both;font-size:14px;margin:20px 0;display:block;text-align:left;line-height:10px;}\n        #about .link a {color:#2e7fdd;text-decoration:none;}\n        #about .link .ext-link {height:12px;width:12px;background-position:-798px -344px;display:block;float:left;margin-right:7px;}\n        \n        .animate .parchment-middle {-moz-animation:parchmiddle2 1s ease 1;-webkit-animation:parchmiddle2 1s ease 1;-o-animation:parchmiddle2 1s ease 1;-ms-animation:parchmiddle2 1s ease 1;}\n\n        .game .parchment-middle {background-position: -422px -588px;}\n        .game.credits .parchment-middle, .game.death .parchment-middle, .game.about .parchment-middle {width:692px;margin-left:-346px;background-position: -76px -588px;}\n        \n\t    footer {font-size:16px;}\n        #resize-check {height:2px;}\n\t}\n\n\t@media screen and (max-width: 1000px) {\n\n        canvas {image-rendering:optimizeSpeed;}\n        body {background:-moz-radial-gradient(rgba(0,0,0,0) 40%,rgba(0,0,0,1) 125%), url('../img/1/wood.png') repeat, #000; background-size:auto, 128px;}\n        body {background:-webkit-gradient(radial, center center, 200, center center, 600, from(rgba(0,0,0,0)), to(rgba(0,0,0,1))), url('../img/1/wood.png') repeat, #000; background-size:auto, 128px;}\n        #logo, #logosparks, .left-ornament, .right-ornament, #character, #character div, .button, .button div, #respawn, #scroll, #instructions, .icon, .avatar, .close, #note, .ribbon .top, .ribbon .bottom, #about .img, .ext-link {background-size:422px auto;}\n        #logo {height:42px;width:229px;position:absolute;top:10%;left:50%;margin-left:-114px;z-index:3;}\n        #logosparks {width:229px;height:42px;z-index:4;-moz-animation:logo1 .8s steps(6, end) infinite;-webkit-animation:logo1 .8s steps(6, end) infinite;-o-animation:logo1 .8s steps(6, end) infinite;-ms-animation:logo1 .8s steps(6, end) infinite;}\n        #parchment, #loadcharacter, #confirmation, #error {width:422px;height:182px;position:absolute;top:50%;left:50%;margin-left:-211px;margin-top:-91px;font-size:10px;text-align:center;z-index:2;}\n        #parchment h1, #instructions h1 {margin-top:20px;font-weight:normal;}\n        .left-ornament, .right-ornament {height:12px;width:31px;display:inline-block;margin:0 10px;position:relative;top:3px;}\n        .left-ornament {background-position:-354px 0;}\n        .right-ornament {background-position:-385px 0;}\n        #character {height:21px;width:12px;margin:0 auto;background-position:-354px -12px;margin-top:15px;position:relative;}\n        #character div {height:21px;width:12px;position:absolute;top:0;left:0;background-position:-366px -12px;opacity:1;}\n        #character.disabled div {opacity:0;pointer-events:none;}\n        #parchment input {margin-top:10px; padding:0 5px; border:1px dashed #b2af9b; font-size:10px;border-radius:3px;height:21px;}\n        .button {height:51px;width:125px;background-position:-229px -102px;margin:10px auto 0 auto;position:relative;}\n        .play div {height:51px;width:125px;background-position:-229px 0px;}\n        .play div:active {background-position:-229px -153px;}\n        .play.loading div {background-position:-227px -726px;}\n        .play.loading img {margin-top:-8px;margin-left:-8px;height:16px;width:16px;}\n        .stroke, .achievement-name {text-shadow:1px 1px 0 #373737, 1px -1px 0 #373737, 0 1px 0 #373737, 1px 0 0 #373737, -1px 1px 0 #373737, -1px -1px 0 #373737, 0 -1px 0 #373737, 0 1px 0 #373737, -1px 0 0 #373737;}\n        \n        #loadcharacter h1, #confirmation h1, #error h1 {margin-top:20px;}\n        #playername {margin-top:5px;}\n        .loadcharacter .play, .confirmation .delete {margin:5px auto 5px auto;}\n        #confirmation p, #error p {font-size:10px;margin-top:20px;line-height:20px;}\n        #error p {width:70%;margin:40px auto 0;}\n        .button.delete {background-position:-229px -51px;}\n        .button.delete:active {background-position:0 -726px;}\n        \n\t\t#container {width:490px;margin:0 auto;position:absolute;top:50%;margin-top:-126px;left:50%;margin-left:-245px;}\n\t\t#canvasborder {padding:5px;background:url('../img/1/border.png') no-repeat;}\n\t\t#canvas {width:100%;height:224px;}\n\t\t#fade {width:480px;height:224px;top:5px;left:5px;}\n\t\t\n\t\t#instructions {height:172px;width:417px;background-position:0 -527px;margin-left:-208px;margin-top:-93px;color:#373737;}\n\t\t#instructions h1 {font-size:20px;text-align:center;margin-bottom:0;}\n        #instructions ul {font-size:10px;margin-top:10px;}\n        #instructions ul li {margin:10px 0; clear:left;}\n        #instructions li:nth-child(1) span {height:29px;width:15px;background-position:-378px -12px; display:block;float:left;margin: 0 10px 3px 20px;position: relative;top: -13px;}\n        #instructions li:nth-child(2) span {height:16px;width:13px;background-position:-393px -12px; display:block;float:left;margin: 0 12px 14px 20px;position: relative;top: -3px;}\n        #instructions li:nth-child(3) span {height:21px;width:16px;background-position:-406px -12px; display:block;float:left;margin: 0 9px 0 20px;position: relative;top: -6px;}\n        #instructions p {text-align:center;font-family:'GraphicPixel';font-size:10px;clear:left;margin:0;}\n\n        #foreground { cursor: default; }\n        \n        #playerimage {height: 32px; width: 32px;}\n        \n        .close {height:16px;width:16px;top:-4px;right:-5px;background-position:-354px -126px;}\n        .close:hover {background-position:-370px -126px;}\n        .close:active {background-position:-386px -126px;}\n        \n        .ribbon {width:18px;right:10px;top:4px;}\n        .ribbon .top {width:100%;height:6px;background-position:-381px -172px;}\n        .ribbon .bottom {width:100%;height:22px;background-position:-381px -185px;}\n        .ribbon:hover .top {height:10px;}\n        .ribbon:hover .bottom {background-position:-399px -185px;}\n        #createcharacter .ribbon {right:10px;top:4px;}\n        #loadcharacter .ribbon {right:50px;top:4px;}\n        \n        /*Death & Respawn*/\n        #death p {font-size:10px;margin-top:45px;}\n        #death p em {margin-top:0px;}\n\t\t#respawn {width:125px;height:51px;margin:21px auto 0 auto;background-position: 0 -476px;}\n\t\t#respawn:active {background-position:-125px -476px;}\n\t\t\n\t\t/*Bubbles*/\n\t\t#bubbles {width:480px;height:224px;margin-bottom:-224px;position:relative;top:-224px;pointer-events:none;}\n\t\tp {font-family:arial, sans-serif;font-size:12px;margin:0;padding:0;line-height:35px;}\n\t    .bubble p {font-family:\"GraphicPixel\"; font-size:10px;}\n\t    \n\t    /*GUI Bar*/\n\t    #bar-container {height:17px;top:-1px;background-size:480px;}\n\n\t\t#healthbar {height:13px;background-position:0 -17px;width:102px;top:3px;background-size:480px;z-index:20;}\n\t\t#hitpoints {width:0px;height:11px;top:4px;left:11px;z-index:10;position:absolute;}\n\n        #armor, #weapon {width:16px;height:16px;position:absolute;background-size:96px;background-position:-32px;}\n        #weapon {left:104px;top:1px;}\n        #armor {left:121px;top:1px;}\n\n        #notifications {width:196px;margin-left:-98px;font-size:10px;color:#eee;top:2px;height:15px;}\n        #notifications div.top {top:-15px;}\n        #notifications span {line-height:15px;height:15px;}\n\n        #playercount {font-size:10px;left:358px;top:4px;width:57px;text-align:center;}\n        #population {background-size:480px;right:35px;bottom:22px;width:131px;background-position:-240px -48px;font-size:9px;line-height:12px;}\n        #population.visible {height:32px;}\n        #instance-population {padding-top:5px;}\n\n        .barbutton {background-size:480px;height:15px;width:14px;}\n        #chatbutton {background-position:-102px -17px;top:1px;left:420px;}\n        #chatbutton:hover {background-position:-116px -17px;}\n        #chatbutton.active {background-position:-130px -17px;}\n        #achievementsbutton {background-position:-144px -17px;top:1px;left:435px;}\n        #achievementsbutton:hover, #achievementsbutton.blink:hover {background-position:-158px -17px;}\n        #achievementsbutton.blink {background-position:-288px -17px;}\n        #achievementsbutton.active {background-position:-172px -17px;}\n        #helpbutton {background-position:-186px -17px;top:1px;left:450px;}\n        #helpbutton:hover {background-position:-200px -17px;}\n        #helpbutton.active {background-position:-214px -17px;}\n        #mutebutton {background-position:-228px -17px;top:1px;left:465px;}\n        #mutebutton:hover {background-position:-242px -17px;}\n        #mutebutton.active {background-position:-256px -17px;}\n\n\t\t#chatbox {height:16px;width:394px;background-size:480px;background-position:0 -32px;margin-left:-197px;bottom:6px;}\n\t\t#chatbox.active {bottom:22px;}\n\t\t#chatbox input {font-size:10px;color:#eee;background:none;width:90%;border:0;margin-left:2%;padding:0;}\n\t\t\n\t\t/*Credits*/\n        #credits, #death, #about {width:422px;height:182px;top:50%;margin-left:-211px;margin-top:-91px;font-size:10px;}\n        #credits h1 a {font-size:12px;}\n        .parchment-left, .parchment-right, .parchment-middle {background-size:422px;}\n        .parchment-left {width:38px;height:182px;background-position:0 -294px;}\n        .parchment-right {width:38px;height:182px;background-position:-384px -294px;}\n        .parchment-middle {height:182px;background-position:-38px -294px;width:346px;margin-left:-173px;}\n        \n        #credits h1, #about h1 {margin-top:12px;font-weight:normal;}\n        .game #credits h1, .game #about h1 {margin-top:20px;}\n        #credits h1 span.title {max-width:100px;display:inline-block;line-height:13px;margin-top:-30px;position:relative;top:12px;}\n        #authors {clear:both;margin-top:36px;}\n        #guillaume, #franck {width:47%;line-height:13px;}\n        #guillaume {float:left;text-align:right;}\n        #franck {float:right;text-align:left;}\n        .avatar {height:25px;width:13px;}\n        #guillaume .avatar {float:right;background-position:-354px -101px;margin-left:20px;}\n        #franck .avatar {float:left;background-position:-367px -101px;margin-right:20px;}\n        #seb {margin:90px auto 0 auto;width:64%;color:#373737;font-size:10px;}\n        #seb a {color:#373737;text-decoration:none;}\n        #seb a:hover {color:#397cd8;}\n        #note {float:left;background-position:-401px -112px;height:11px;width:10px;}\n        #close-credits {margin:12px auto 0 auto;text-align:center;clear:both;font-size:10px;}\n        #sharing {width:202px;}\n        \n        /*About*/\n        #about h1 span.title {max-width:400px;display:inline-block;line-height:24px;margin-top:-30px;position:relative;margin-bottom:-10px;}\n        #close-about {margin:77px auto 0 auto;text-align:center;clear:both;font-size:10px;color:#373737;}\n        #about #game-desc {font-size:10px;text-align:center;max-width:70%;margin:10px auto;line-height:14px;}\n        #about .left p, #about .right p {font-size:9px;text-align:left;line-height:10px;padding:0;margin-top:-6px;}\n        #about .left {width:37%;float:left;margin-left:10%;}\n        #about .right {width:37%;float:right;margin-right:12%;}\n/*        #about .left .img {height:30px;width:27px;float:left;background-position:-354px -172px;margin-right:7px;}\n        #about .right .img {height:30px;width:56px;float:left;background-position:-354px -142px;margin-right:7px;}*/\n        #about .img {display:none;}\n        #about .link {clear:both;font-size:9px;margin:10px 0;display:block;text-align:left;line-height:5px;}\n        #about .link a {color:#2e7fdd;text-decoration:none;}\n        #about .link .ext-link {height:6px;width:6px;background-position:-399px -172px;display:block;float:left;margin-right:4px;}\n        \n        .animate .parchment-middle {-moz-animation:parchmiddle1 1s ease 1;-webkit-animation:parchmiddle1 1s ease 1;-o-animation:parchmiddle1 1s ease 1;-ms-animation:parchmiddle1 1s ease 1;}\n        \n        .game .parchment-middle {background-position: -211px -294px;}\n        .game.credits .parchment-middle, .game.death .parchment-middle, .game.about .parchment-middle {width:346px;margin-left:-173px;background-position: -38px -294px;}\n\n        #resize-check {height:1px;}\n\t}\n\n\t@media screen and (max-width: 800px) {\n\n        body {border-top:0px;}\n        .intro #container, .game #logo, .game #parchment {display:none;}\n        .game.about #parchment {display:block;left:50%;background:url('../img/1/spritesheet.png') no-repeat 0 -527px;height:172px;width:417px;top:50%;margin-left:-208px;margin-top:-98px;position:absolute;}\n        .game.about .parchment-middle {top:50%;left:50%;color:#000;position:absolute;}\n        #about .right {width:34%;}\n        #about #game-desc {margin:8px auto 16px;line-height:12px;}\n        #close-about {margin-top:83px;}\n        .game #container {display:block;padding:0;}\n        #mask, #fade {display:none;}\n        .game.death #parchment {display:block;}\n        .game .createcharacter #createcharacter, .game .loadcharacter #loadcharacter, .game .confirmation #confirmation, .game .error #error {display:none;}\n        \n\t\t.ribbon {display:none;}\n        \n        canvas {image-rendering:optimizeSpeed;}\n        #moztab {display:none;}\n        body.intro {background:-moz-radial-gradient(rgba(0,0,0,0) 40%,rgba(0,0,0,1) 125%), url('../img/1/wood.png') repeat, #000; background-size:auto, 128px;}\n        body.intro {background:-webkit-gradient(radial, center center, 120, center center, 400, from(rgba(0,0,0,0)), to(rgba(0,0,0,1))), url('../img/1/wood.png') repeat, #000; background-size:auto, 128px;}\n        body {background:#000;}\n        #logosparks {-moz-animation:none;-webkit-animation:none;-o-animation:none;-ms-animation:none;display:none;}\n\t\t#container {height:258px;width:480px;position:relative;left:50%;top:50%;margin:-128px auto 0 -240px;}\n\t\t#canvasborder {background:none;padding:0;}\n\t\t\n\t\t#parchment, #logosparks, .left-ornament, .right-ornament, #character, #character div, .button, .button div, #respawn, #scroll, #instructions, .icon {background-size:422px auto;}\n        #parchment {background:none;}\n        #logo {height:84px;width:458px;position:absolute;top:10%;left:50%;margin-left:-229px;z-index:3;background-size:844px;}\n        #parchment {width:100%;height:auto;position:absolute;left:0;top:125px;margin-left:0;margin-top:0;font-size:10px;text-align:center;z-index:2;color:#eee;}\n        #parchment h1 {margin-top:0px;font-weight:normal;}\n        #instructions h1 {margin-top:15px;font-size:14px;}\n        .left-ornament, .right-ornament {height:12px;width:31px;display:inline-block;margin:0 10px;position:relative;top:3px;}\n        .left-ornament {background-position:-354px 0;}\n        .right-ornament {background-position:-385px 0;}\n        #character {height:21px;width:12px;margin:0 auto;background-position:-354px -12px;margin-top:15px;position:relative;display:none;}\n        #character div {height:21px;width:12px;position:absolute;top:0;left:0;background-position:-366px -12px;opacity:1;}\n        #character.disabled div {opacity:0;pointer-events:none;}\n        #parchment input {margin-top:10px; padding-bottom:5px; border-bottom:1px dashed #b2af9b; font-size:20px;-moz-animation:none;-webkit-animation:none;-o-animation:none;-ms-animation:none;color:#eee;}\n        .button {height:54px;width:204px;background-position:-500px -952px;margin:20px auto 0 auto;position:relative;background-size:844px;}\n        .play div {height:54px;width:204px;background-position:-458px -512px; background-size:844px;}\n        .play div:active {background-position:0px -1398px;}\n        .stroke {text-shadow:1px 1px 0 #373737, 1px -1px 0 #373737, 0 1px 0 #373737, 1px 0 0 #373737, -1px 1px 0 #373737, -1px -1px 0 #373737, 0 -1px 0 #373737, 0 1px 0 #373737, -1px 0 0 #373737;}\n\t\t\n\t\t#instructions {height:172px;width:417px;background-position:0 -527px;margin-left:-208px;margin-top:-93px;color:#373737;}\n\t\t#instructions h1 {font-size:20px;text-align:center;margin-bottom:0;}\n        #instructions ul {font-size:13px;margin-top:15px;}\n        #instructions ul li {margin:10px 0; clear:left;}\n        #instructions li:nth-child(1) span {height:29px;width:15px;background-position:-378px -12px; display:block;float:left;margin: 0 10px 3px 20px;position: relative;top: -13px;}\n        #instructions li:nth-child(2) span {height:16px;width:13px;background-position:-393px -12px; display:block;float:left;margin: 0 12px 14px 20px;position: relative;top: -3px;}\n        #instructions li:nth-child(3) span {height:21px;width:16px;background-position:-406px -12px; display:block;float:left;margin: 0 9px 0 20px;position: relative;top: -6px;}\n        #instructions p {text-align:center;font-family:'GraphicPixel';font-size:10px;clear:left;margin:0;}\n\t\t\n\t\t#foreground { cursor: default; }\n\t\t\n\t\t#parchment.animate {-moz-animation:none;-webkit-animation:none;-o-animation:none;-webkit-animation:none;}\n\t\t\n\t\t#loadcharacter, #confirmation, #createcharacter, #error {display:none;margin-top:0;margin-left:0;left:0;width:auto;}\n\t\t.loadcharacter #loadcharacter, .confirmation #confirmation, .createcharacter #createcharacter, .error #error {display:block;width:100%;}\n\t\t\n\t\t#loadcharacter h1, #confirmation h1, #error h1 {font-size:12px;font-weight:normal;}\n\t\t\n\t\t#loadcharacter, #confirmation, #error {height:auto;}\n\t\n\t    #loadcharacter h1, #confirmation h1, #createcharacter h1, #error h1 {font-size:12px;}\n\t    #createcharacter{padding-bottom:20px;}\n\t\t#playername {font-size:20px;margin:10px 0px;}\n\t\t#create-new {margin:20px 0px;font-size:16px;}\n\t\t.button.delete {background-position:-612px -1398px;}\n\t\t.button.delete:active {background-position:-250px -1452px;}\n\t\t#confirmation, #error {top:70%;}\n\t\t#confirmation p, #error p {margin:10px 0;line-height:12px;font-size:12px;}\n\t\t#cancel {font-size:20px;margin:20px 0;}\n\t\t\n\t\t#playerimage {display:none;}\n\t\t\n\t\t/*GUI Bar*/\n\t\t#bar-container {height:34px;top:-2px;background-size:960px;background-position:0 -96px;}\n\n\t\t#healthbar {height:26px;background-position:0 -34px;width:204px;top:6px;background-size:960px;z-index:20;}\n\t\t#hitpoints {width:0px;height:22px;top:8px;left:22px;z-index:10;position:absolute;}\n\n        #armor, #weapon {width:32px;height:32px;position:absolute;background-size:192px;background-position:-64px;}\n        #weapon {left:208px;top:2px;}\n        #armor {left:242px;top:2px;}\n\n        #notifications {display:none;}\n\n        #playercount {font-size:20px;left:270px;top:10px;width:114px;text-align:center;}\n        #playercount span {display:none;}\n        #playercount span.count {display:inline;}\n\n        .barbutton {background-size:960px;height:30px;width:28px;}\n        #chatbutton {background-position:-204px -34px;top:2px;left:360px;}\n        #chatbutton:hover {background-position:-232px -34px;}\n        #chatbutton.active {background-position:-260px -34px;}\n        #achievementsbutton {background-position:-288px -34px;top:2px;left:390px;}\n        #achievementsbutton:hover, #achievementsbutton.blink {background-position:-316px -34px;}\n        #achievementsbutton.active {background-position:-344px -34px;}\n        #helpbutton {background-position:-372px -34px;top:2px;left:420px;}\n        #helpbutton:hover {background-position:-400px -34px;}\n        #helpbutton.active {background-position:-428px -34px;}\n        #mutebutton {background-position:-456px -34px;top:2px;left:450px;}\n        #mutebutton:hover {background-position:-484px -34px;}\n        #mutebutton.active {background-position:-512px -34px;}\n\n\t\t#chatbox {height:32px;width:480px;background-size:960px;background-position:0 -64px;margin-left:-240px;bottom:2px;}\n\t\t#chatbox.active {bottom:34px;}\n\t\t#chatbox input {font-size:20px;color:#eee;background:none;width:90%;border:0;margin-left:2%;padding:0px 0;}\n\t\t\n\t\t/*Credits*/\n        .parchment-left, .upscaled .parchment-left, .parchment-middle, .upscaled .parchment-middle, .parchment-right, .upscaled .parchment-right {background:none;}\n        .parchment-left, .parchment-right {display:none;}\n\t\t.parchment-middle {width:100%;left:0px;margin-left:0px;height:auto;position:relative;}\n\t\t#toggle-credits, #credits {display:none;}\n\t\t\n\t\t.game.death #parchment {background:url('../img/spritesheet.png') 0 -294px;height:182px;width:422px;position:absolute;top:50%;left:50%;margin-top:-91px;margin-left:-211px;}\n        .game.death .parchment-middle {width:100%;position:relative;top:0;left:0;margin-left:0;margin-top:0;}\n        .game.death #death {position:relative;top:0;left:0;margin-top:0;margin-left:0;width:100%;}\n        .game.death #death p {padding-top:30px;color:#373737;font-size:20px;margin-top:0;width:80%;margin:0 auto;}\n        .game.death #death p em {display:block;margin-top:15px;font-style:normal;}\n\n        #instructions, #achievements, #lists, #about {-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none;}\n\n\t\t.game.death #death {height:172px;width:417px;margin-left:-208px;margin-top:-93px;color:#373737;background:url('../img/1/spritesheet.png') 0 -527px;margin:-10px 0 0 0;}\n        #respawn { background-position: -204px -1398px; background-size: 844px auto; width: 204px; height: 54px;}\n\t\t#respawn:active {background-position:-408px -1398px;}\n\n        footer {display:none;}\n        #bubbles {overflow:hidden;}\n\t}\n\n\t@media screen and (max-width: 800px) and (orientation: portrait) {\n        #portrait {display:block;height:300px;width:300px;position:absolute;top:55%; left:50%; margin:-150px 0 0 -150px;}\n        #parchment {display:none;}\n        #container, .game #container {display:none;}\n        \n        #logo {height:84px;width:458px;position:absolute;top:10%;left:50%;margin-left:-229px;z-index:3;background-size:844px;}\n        #portrait p {color:#eee;font-family:'GraphicPixel', sans-serif;font-size:20px;text-align:center;}\n        \n        #tilt {height:120px;width:132px;background-position:-710px -82px;background-size:844px;margin:25px auto 0 auto;}\n    }\n    \n    @media screen and (max-width: 640px) and (orientation: portrait) {\n        #portrait {display:block;height:300px;width:300px;position:absolute;top:70%; left:50%; margin:-150px 0 0 -150px;}\n        \n        #logo {height:42px;width:229px;position:absolute;top:10%;left:50%;margin-left:-114px;z-index:3;background-size:422px;}\n    }\n\n/* Tablet mode */\n\n    .tablet .animate .parchment-left, .tablet .animate .parchment-right, .tablet .animate .parchment-middle {-webkit-animation:none;-moz-animation:none;-o-animation:none;-ms-animation:none;}\n    .tablet #instructions, .tablet #achievements, .tablet #lists {-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none;}\n    .tablet #achievements li.unlocked .achievement-sharing {display:block;}\n    .tablet #coinsparks {display:none; -moz-animation:none;}\n    \n    .tablet #logo, .tablet #parchment, .tablet #container {-moz-transition:none;}\n    .tablet #achievement-notification .name, .tablet #achievement-notification .title, .tablet #achievement-notification .coin, .tablet #achievement-notification {-moz-transition:none;}\n    \n/* Workarounds for chrome windows bugs */\n\n    .windows #parchment, .windows #parchment input, .windows #notifications, .windows #instructions, .windows #achievements, .windows #achievement-notification, \n    .windows #playercount, .windows #credits, .windows #loadcharacter, .windows #confirmation, .windows #death, .windows #error, .windows #about, \n    .windows #parchment p, .windows #portrait p, .windows .alert, .windows footer, .windows .bubble p, .windows #population {font-family:'AdvoCut';}\n\n/* Workarounds for opera's lack of pointer-events support */\n\n    .opera.intro #bubbles, .opera.intro #canvas, .opera.intro #container { z-index: -30000;}\n    .opera .credits #credits, .opera .createcharacter #createcharacter, .opera .loadcharacter #loadcharacter, .opera .confirmation #confirmation, .opera .death #death, \n    .opera .error #error, .opera .about #about { z-index: 30000; }\n    .opera #instructions, .opera #achievements { z-index: -30000;}\n    .opera #achievements.active, .opera #instructions.active { z-index: 30000;}\n    .opera #coinsparks {display:none;}\n    .opera #death, .opera #about, .opera #credits, .opera #error, .opera #confirmation, .opera #loadcharacter { z-index: -30000; }"
  },
  {
    "path": "client/index.html",
    "content": "<!DOCTYPE html>\n<!-- \n\n , __                                   __                      \n/|/  \\                                 /  \\                     \n | __/ ,_    __           ,   _   ,_  | __ |          _   , _|_ \n |   \\/  |  /  \\_|  |  |_/ \\_|/  /  | |/  \\|  |   |  |/  / \\_|  \n |(__/   |_/\\__/  \\/ \\/   \\/ |__/   |_/\\__/\\_/ \\_/|_/|__/ \\/ |_/\n\nMozilla presents an HTML5 mini-MMORPG by Little Workshop http://www.littleworkshop.fr\n\n* Client libraries used: RequireJS, Underscore.js, jQuery, Modernizr\n* Server-side: Node.js, Worlize/WebSocket-Node, miksago/node-websocket-server\n* Should work in latest versions of Firefox, Chrome, Safari, Opera, Safari Mobile and Firefox for Android\n\n -->\n<html lang=\"en\">\n\t<head>\n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge;chrome=1\">\n        <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no\">\n        <link rel=\"icon\" type=\"image/png\" href=\"img/common/favicon.png\">\n        <meta property=\"og:title\" content=\"BrowserQuest\">\n        <meta property=\"og:type\" content=\"website\">\n        <meta property=\"og:url\" content=\"http://browserquest.mozilla.org/\">\n        <meta property=\"og:image\" content=\"http://browserquest.mozilla.org/img/common/promo-title.jpg\">\n        <meta property=\"og:site_name\" content=\"BrowserQuest\">\n        <meta property=\"og:description\" content=\"Play Mozilla's BrowserQuest, an HTML5 massively multiplayer game demo powered by WebSockets!\">\n        <link rel=\"stylesheet\" href=\"css/main.css\" type=\"text/css\">\n        <link rel=\"stylesheet\" href=\"css/achievements.css\" type=\"text/css\">\n        <script src=\"js/lib/modernizr.js\" type=\"text/javascript\"></script>\n        <!--[if lt IE 9]>\n                <link rel=\"stylesheet\" href=\"css/ie.css\" type=\"text/css\">\n                <script src=\"js/lib/css3-mediaqueries.js\" type=\"text/javascript\"></script>\n                <script type=\"text/javascript\">\n                document.getElementById('parchment').className = ('error');\n                </script>\n        <![endif]-->\n        <script src=\"js/detect.js\" type=\"text/javascript\"></script>\n        <title>BrowserQuest</title>\n\t</head>\n    <!--[if lt IE 9]>\n\t<body class=\"intro upscaled\">\n    <![endif]-->\n\t<body class=\"intro\">\n\t    <noscript>\n\t       <div class=\"alert\">\n\t           You need to enable JavaScript to play BrowserQuest.\n\t       </div>\n\t    </noscript>\n\t    <a id=\"moztab\" class=\"clickable\" target=\"_blank\" href=\"http://www.mozilla.org/\"></a>\n\t    <div id=\"intro\">\n\t        <h1 id=\"logo\">\n\t           <span id=\"logosparks\">\n\t               \n\t           </span>\n\t        </h1>\n\t        <article id=\"portrait\">\n\t            <p>\n\t               Please rotate your device to landscape mode\n\t            </p>\n\t            <div id=\"tilt\"></div>\n\t        </article>\n\t        <section id=\"parchment\" class=\"createcharacter\">\n\t            <div class=\"parchment-left\"></div>\n\t            <div class=\"parchment-middle\">\n                    <article id=\"createcharacter\">\n          \t           <h1>\n          \t               <span class=\"left-ornament\"></span>\n          \t               A Massively Multiplayer Adventure\n          \t               <span class=\"right-ornament\"></span>\n                         </h1>\n                         <div id=\"character\" class=\"disabled\">\n                             <div></div>\n                         </div>\n                         <form action=\"none\" method=\"get\" accept-charset=\"utf-8\">\n                             <input type=\"text\" id=\"nameinput\" class=\"stroke\" name=\"player-name\" placeholder=\"Name your character\" maxlength=\"15\">\n                         </form>\n                         <div class=\"play button disabled\">\n                             <div></div>\n                             <img src=\"img/common/spinner.gif\" alt=\"\">\n                         </div>\n                         <div class=\"ribbon\">\n                            <div class=\"top\"></div>\n                            <div class=\"bottom\"></div>\n                         </div>\n                    </article>\n                    <article id=\"loadcharacter\">\n          \t           <h1>\n          \t               <span class=\"left-ornament\"></span>\n          \t               Load your character\n          \t               <span class=\"right-ornament\"></span>\n                         </h1>\n                         <div class=\"ribbon\">\n                            <div class=\"top\"></div>\n                            <div class=\"bottom\"></div>\n                         </div>\n                         <img id=\"playerimage\" src=\"\">\n                         <div id=\"playername\" class=\"stroke\">\n                         </div>\n                         <div class=\"play button\">\n                             <div></div>\n                             <img src=\"img/common/spinner.gif\" alt=\"\">\n                         </div>\n                         <div id=\"create-new\">\n                            <span><span>or</span> create a new character</span>\n                         </div>\n                    </article>\n                    <article id=\"confirmation\">\n          \t           <h1>\n          \t               <span class=\"left-ornament\"></span>\n          \t               Delete your character?\n          \t               <span class=\"right-ornament\"></span>\n                         </h1>\n                         <p>\n                             All your items and achievements will be lost.<br>\n                             Are you sure you wish to continue?\n                         </p>\n                         <div class=\"delete button\"></div>\n                         <div id=\"cancel\">\n                            <span>cancel</span>\n                         </div>\n                    </article>\n    \t            <article id=\"credits\">\n        \t            <h1>\n         \t               <span class=\"left-ornament\"></span>\n         \t               <span class=\"title\">\n         \t                   Made for Mozilla by <a target=\"_blank\" class=\"stroke clickable\" href=\"http://www.littleworkshop.fr/\">Little Workshop</a>\n         \t               </span>\n         \t               <span class=\"right-ornament\"></span>\n                        </h1>\n                        <div id=\"authors\">\n                            <div id=\"guillaume\">\n                                <div class=\"avatar\"></div>\n                                Pixels by\n                                <a class=\"stroke clickable\" target=\"_blank\" href=\"http://twitter.com/glecollinet\">Guillaume Lecollinet</a>\n                            </div>\n                            <div id=\"franck\">\n                                <div class=\"avatar\"></div>\n                                Code by\n                                <a class=\"stroke clickable\" target=\"_blank\" href=\"http://twitter.com/whatthefranck\">Franck Lecollinet</a>\n                            </div>\n                        </div>\n                        <div id=\"seb\">\n                            \n                            <span id=\"note\"></span>\n                            Music by <a class=\"clickable\" target=\"_blank\" href=\"http://soundcloud.com/gyrowolf/sets/gyrowolfs-rpg-maker-music-pack/\">Gyrowolf</a>, <a class=\"clickable\" target=\"_blank\" href=\"http://blog.dayjo.org/?p=335\">Dayjo</a>, <a class=\"clickable\" target=\"_blank\" href=\"http://soundcloud.com/freakified/what-dangers-await-campus-map\">Freakified</a>, &amp; <a target=\"_blank\" class=\"clickable\" href=\"http://www.newgrounds.com/audio/listen/349734\">Camoshark</a>\n                           \n                        </div>\n\t                    <div id=\"close-credits\">\n\t                        <span>- click anywhere to close -</span>\n                        </div>\n    \t            </article>\n    \t            <article id=\"about\">\n        \t            <h1>\n         \t               <span class=\"left-ornament\"></span>\n         \t               <span class=\"title\">\n         \t                   What is BrowserQuest?\n         \t               </span>\n         \t               <span class=\"right-ornament\"></span>\n                        </h1>\n                        <p id=\"game-desc\">\n                            BrowserQuest is a multiplayer game inviting you to explore a\n                            world of adventure from your Web browser.\n                        </p>\n                        <div class=\"left\">\n                            <div class=\"img\"></div>\n                            <p>\n                                This demo is powered by HTML5 and WebSockets, which allow for real-time gaming and apps on the Web.\n                            </p>\n                            <span class=\"link\">\n                                <span class=\"ext-link\"></span>\n                                <a target=\"_blank\" class=\"clickable\" href=\"http://hacks.mozilla.org/2012/03/browserquest/\">Learn more</a> about the technology\n                            </span>\n                        </div>\n                        <div class=\"right\">\n                            <div class=\"img\"></div>\n                            <p>\n                                BrowserQuest is available on Firefox, Chrome, Safari as well as iOS devices and Firefox for Android.\n                            </p>\n                            <span class=\"link\">\n                                <span class=\"ext-link\"></span>\n                                <a target=\"_blank\" class=\"clickable\" href=\"http://github.com/mozilla/BrowserQuest\">Grab the source</a> on Github\n                            </span>\n                        </div>\n\t                    <div id=\"close-about\">\n\t                        <span>- click anywhere to close -</span>\n                        </div>\n    \t            </article>\n    \t            <article id=\"death\">\n                        <p>You are dead...</p>\n    \t\t\t\t\t<div id=\"respawn\" class=\"button\"></div>\n    \t            </article>\n                    <article id=\"error\">\n          \t           <h1>\n          \t               <span class=\"left-ornament\"></span>\n          \t               Your browser cannot run BrowserQuest!\n          \t               <span class=\"right-ornament\"></span>\n                         </h1>\n                         <p>\n                             We're sorry, but your browser does not support WebSockets.<br>\n                             In order to play, we recommend using the latest version of Firefox, Chrome or Safari.\n                         </p>\n                    </article>\n\t            </div>\n\t            <div class=\"parchment-right\"></div>\n\t        </section>\n\t    </div>\n\t\t<div id=\"container\">\n\t\t    <div id=\"canvasborder\">\n\t\t        <article id=\"instructions\" class=\"clickable\">\n\t\t            <div class=\"close\"></div>\n\t\t            <h1>\n     \t               <span class=\"left-ornament\"></span>\n     \t               How to play\n     \t               <span class=\"right-ornament\"></span>\n\t                </h1>\n\t                <ul>\n\t                   <li><span class=\"icon\"></span>Left click or tap to move, attack and pick up items.</li>\n\t                   <li><span class=\"icon\"></span>Press ENTER to chat.</li>\n\t                   <li><span class=\"icon\"></span>Your character is automatically saved as you play.</li>\n\t                </ul>\n\t                    <p>- click anywhere to close -</p>\n\t\t        </article>\n\t\t        <article id=\"achievements\" class=\"page1 clickable\">\n\t\t            <div class=\"close\"></div>\n\t\t            <div id=\"achievements-wrapper\">\n\t\t                <div id=\"lists\">\n        \t\t        </div>\n    \t\t        </div>\n    \t\t        <div id=\"achievements-count\" class=\"stroke\">\n    \t\t            Completed\n    \t\t            <div>\n    \t\t                <span id=\"unlocked-achievements\">0</span>\n    \t\t                /\n    \t\t                <span id=\"total-achievements\"></span>\n    \t\t            </div> \n    \t\t        </div>\n\t\t            <nav class=\"clickable\">\n\t\t                <div id=\"previous\"></div>\n\t\t                <div id=\"next\"></div>\n\t\t            </nav>\n\t\t        </article>\n    \t\t\t<div id=\"canvas\">\n    \t\t\t\t<canvas id=\"background\"></canvas>\n    \t\t\t\t<canvas id=\"entities\"></canvas>\n    \t\t\t\t<canvas id=\"foreground\" class=\"clickable\"></canvas>\n    \t\t\t</div>\n    \t\t\t<div id=\"bubbles\">\t\t\t\t\n    \t\t\t</div>\n    \t\t\t<div id=\"achievement-notification\">\n    \t\t\t    <div class=\"coin\">\n    \t\t\t        <div id=\"coinsparks\"></div>\n    \t\t\t    </div>\n    \t\t\t    <div id=\"achievement-info\">\n        \t\t\t    <div class=\"title\">New Achievement Unlocked!</div>\n        \t\t\t    <div class=\"name\"></div>\n    \t\t\t    </div>\n    \t\t\t</div>\n    \t\t\t<div id=\"bar-container\">\n\t\t\t\t\t<div id=\"healthbar\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"hitpoints\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"weapon\"></div>\n\t\t\t\t\t<div id=\"armor\"></div>\n\t\t\t\t\t<div id=\"notifications\">\n\t\t\t\t\t    <div>\n\t\t\t\t\t       <span id=\"message1\"></span>\n\t\t\t\t\t       <span id=\"message2\"></span>\n\t\t\t\t\t    </div>\n\t\t\t\t\t</div>\n                    <div id=\"playercount\" class=\"clickable\">\n                        <span class=\"count\">0</span> <span>players</span>\n                    </div>\n                    <div id=\"barbuttons\">\n                        <div id=\"chatbutton\" class=\"barbutton clickable\"></div>\n                        <div id=\"achievementsbutton\" class=\"barbutton clickable\"></div>\n                        <div id=\"helpbutton\" class=\"barbutton clickable\"></div>\n                        <div id=\"mutebutton\" class=\"barbutton clickable active\"></div>\n                    </div>\n    \t\t\t</div>\n\t\t\t\t<div id=\"chatbox\">\n\t\t\t\t    <form action=\"none\" method=\"get\" accept-charset=\"utf-8\">\n\t\t\t\t\t    <input id=\"chatinput\" class=\"gp\" type=\"text\" maxlength=\"60\">\n\t\t\t\t    </form>\n\t\t\t\t</div>\n                <div id=\"population\">\n                    <div id=\"instance-population\" class=\"\">\n                        <span>0</span> <span>players</span> in your instance\n                    </div>\n                    <div id=\"world-population\" class=\"\">\n                        <span>0</span> <span>players</span> total\n                    </div>\n                </div>\n\t\t    </div>\n\t\t</div>\n\t\t<footer>\n\t\t    <div id=\"sharing\" class=\"clickable\">\n\t\t      Share this on \n              <a href=\"http://twitter.com/share?url=http%3A%2F%2Fbrowserquest.mozilla.org&amp;text=Mozilla%27s%20BrowserQuest%3A%20HTML5%20massively%20multiplayer%20adventure%20game%20%23demo%20%23websockets&amp;related=glecollinet:Creators%20of%20BrowserQuest%2Cwhatthefranck\" class=\"twitter\"></a>\n              <a href=\"http://www.facebook.com/share.php?u=http://browserquest.mozilla.org/\" class=\"facebook\"></a>\n\t\t    </div>\n\t\t    <div id=\"credits-link\" class=\"clickable\">\n\t\t      – <span id=\"toggle-credits\">Credits</span>\n\t\t    </div>\n\t\t</footer>\n\t\t\n\t\t<ul id=\"page-tmpl\" class=\"clickable\" style=\"display:none\">\n        </ul>\n        <ul>\n            <li id=\"achievement-tmpl\" style=\"display:none\">\n                <div class=\"coin\"></div>\n                <span class=\"achievement-name\">???</span>\n                <span class=\"achievement-description\">???</span>\n                <div class=\"achievement-sharing\">\n                  <a href=\"\" class=\"twitter\"></a>\n                </div>\n            </li>\n        </ul>\n        \n        <img src=\"img/common/thingy.png\" alt=\"\" class=\"preload\">\n        \n        <div id=\"resize-check\"></div>\n\t\t\n        <script type=\"text/javascript\">\n            var ctx = document.querySelector('canvas').getContext('2d'),\n                parchment = document.getElementById(\"parchment\");\n            \n            if(!Detect.supportsWebSocket()) {\n                parchment.className = \"error\";\n            }\n            \n            if(ctx.mozImageSmoothingEnabled === undefined) {\n                document.querySelector('body').className += ' upscaled';\n            }\n            \n            if(!Modernizr.localstorage) {\n                var alert = document.createElement(\"div\");\n                    alert.className = 'alert';\n                    alertMsg = document.createTextNode(\"You need to enable cookies/localStorage to play BrowserQuest\");\n                    alert.appendChild(alertMsg);\n\n                target = document.getElementById(\"intro\");\n                document.body.insertBefore(alert, target);\n            } else if(localStorage && localStorage.data) {\n                parchment.className = \"loadcharacter\";\n            }\n        </script>\n        \n        <script src=\"js/lib/log.js\"></script>\n        <script>\n                var require = { waitSeconds: 60 };\n        </script>\n        <script data-main=\"js/home\" src=\"js/lib/require-jquery.js\"></script>\n\t</body>\n</html>"
  },
  {
    "path": "client/js/animation.js",
    "content": "\ndefine(function() {\n\n    var Animation = Class.extend({\n        init: function(name, length, row, width, height) {\n            this.name = name;\n        \tthis.length = length;\n        \tthis.row = row;\n        \tthis.width = width;\n        \tthis.height = height;\n        \tthis.reset();\n        },\n    \n        tick: function() {\n        \tvar i = this.currentFrame.index;\n\t    \n    \t    i = (i < this.length - 1) ? i + 1 : 0;\n\t    \n    \t    if(this.count > 0) {\n    \t        if(i === 0) {\n                    this.count -= 1;\n                    if(this.count === 0) {\n                        this.currentFrame.index = 0;\n                        this.endcount_callback();\n                        return;\n                    }\n                }\n        \t}\n\t    \n        \tthis.currentFrame.x = this.width * i;\n        \tthis.currentFrame.y = this.height * this.row;\n        \tthis.currentFrame.index = i;\n        },\n    \n        setSpeed: function(speed) {\n            this.speed = speed;\n        },\n    \n        setCount: function(count, onEndCount) {\n            this.count = count;\n            this.endcount_callback = onEndCount;\n        },\n\n        isTimeToAnimate: function(time) {\n        \treturn (time - this.lastTime) > this.speed;\n        },\n    \n        update: function(time) {\n            if(this.lastTime === 0 && this.name.substr(0, 3) === \"atk\") {\n                this.lastTime = time;\n            }\n        \n            if(this.isTimeToAnimate(time)) {\n                this.lastTime = time;\n                this.tick();\n                return true;\n            } else {\n                return false;\n            }\n        },\n    \n        reset: function() {\n            this.lastTime = 0;\n            this.currentFrame = { index: 0, x: 0, y: this.row * this.height };\n        }\n    });\n\n    return Animation;\n});"
  },
  {
    "path": "client/js/app.js",
    "content": "\ndefine(['jquery', 'storage'], function($, Storage) {\n\n    var App = Class.extend({\n        init: function() {\n            this.currentPage = 1;\n            this.blinkInterval = null;\n            this.previousState = null;\n            this.isParchmentReady = true;\n            this.ready = false;\n            this.storage = new Storage();\n            this.watchNameInputInterval = setInterval(this.toggleButton.bind(this), 100);\n            this.$playButton = $('.play'),\n            this.$playDiv = $('.play div');\n        },\n        \n        setGame: function(game) {\n            this.game = game;\n            this.isMobile = this.game.renderer.mobile;\n            this.isTablet = this.game.renderer.tablet;\n            this.isDesktop = !(this.isMobile || this.isTablet);\n            this.supportsWorkers = !!window.Worker;\n            this.ready = true;\n        },\n    \n        center: function() {\n            window.scrollTo(0, 1);\n        },\n        \n        canStartGame: function() {\n            if(this.isDesktop) {\n                return (this.game && this.game.map && this.game.map.isLoaded);\n            } else {\n                return this.game;\n            }\n        },\n        \n        tryStartingGame: function(username, starting_callback) {\n            var self = this,\n                $play = this.$playButton;\n            \n            if(username !== '') {\n                if(!this.ready || !this.canStartGame()) {\n                    if(!this.isMobile) {\n                        // on desktop and tablets, add a spinner to the play button\n                        $play.addClass('loading');\n                    }\n                    this.$playDiv.unbind('click');\n                    var watchCanStart = setInterval(function() {\n                        log.debug(\"waiting...\");\n                        if(self.canStartGame()) {\n                            setTimeout(function() {\n                                if(!self.isMobile) {\n                                    $play.removeClass('loading');\n                                }\n                            }, 1500);\n                            clearInterval(watchCanStart);\n                            self.startGame(username, starting_callback);\n                        }\n                    }, 100);\n                } else {\n                    this.$playDiv.unbind('click');\n                    this.startGame(username, starting_callback);\n                }      \n            }\n        },\n        \n        startGame: function(username, starting_callback) {\n            var self = this;\n            \n            if(starting_callback) {\n                starting_callback();\n            }\n            this.hideIntro(function() {\n                if(!self.isDesktop) {\n                    // On mobile and tablet we load the map after the player has clicked\n                    // on the PLAY button instead of loading it in a web worker.\n                    self.game.loadMap();\n                }\n                self.start(username);\n            });\n        },\n\n        start: function(username) {\n            var self = this,\n                firstTimePlaying = !self.storage.hasAlreadyPlayed();\n            \n            if(username && !this.game.started) {\n                var optionsSet = false,\n                    config = this.config;\n\n                //>>includeStart(\"devHost\", pragmas.devHost);\n                if(config.local) {\n                    log.debug(\"Starting game with local dev config.\");\n                    this.game.setServerOptions(config.local.host, config.local.port, username);\n                } else {\n                    log.debug(\"Starting game with default dev config.\");\n                    this.game.setServerOptions(config.dev.host, config.dev.port, username);\n                }\n                optionsSet = true;\n                //>>includeEnd(\"devHost\");\n                \n                //>>includeStart(\"prodHost\", pragmas.prodHost);\n                if(!optionsSet) {\n                    log.debug(\"Starting game with build config.\");\n                    this.game.setServerOptions(config.build.host, config.build.port, username);\n                }\n                //>>includeEnd(\"prodHost\");\n\n                this.center();\n                this.game.run(function() {\n                    $('body').addClass('started');\n                \tif(firstTimePlaying) {\n                \t    self.toggleInstructions();\n                \t}\n            \t});\n            }\n        },\n\n        setMouseCoordinates: function(event) {\n            var gamePos = $('#container').offset(),\n                scale = this.game.renderer.getScaleFactor(),\n                width = this.game.renderer.getWidth(),\n                height = this.game.renderer.getHeight(),\n                mouse = this.game.mouse;\n\n            mouse.x = event.pageX - gamePos.left - (this.isMobile ? 0 : 5 * scale);\n        \tmouse.y = event.pageY - gamePos.top - (this.isMobile ? 0 : 7 * scale);\n\n        \tif(mouse.x <= 0) {\n        \t    mouse.x = 0;\n        \t} else if(mouse.x >= width) {\n        \t    mouse.x = width - 1;\n        \t}\n\n        \tif(mouse.y <= 0) {\n        \t    mouse.y = 0;\n        \t} else if(mouse.y >= height) {\n        \t    mouse.y = height - 1;\n        \t}\n        },\n\n        initHealthBar: function() {\n            var scale = this.game.renderer.getScaleFactor(),\n                healthMaxWidth = $(\"#healthbar\").width() - (12 * scale);\n\n        \tthis.game.onPlayerHealthChange(function(hp, maxHp) {\n        \t    var barWidth = Math.round((healthMaxWidth / maxHp) * (hp > 0 ? hp : 0));\n        \t    $(\"#hitpoints\").css('width', barWidth + \"px\");\n        \t});\n\n        \tthis.game.onPlayerHurt(this.blinkHealthBar.bind(this));\n        },\n\n        blinkHealthBar: function() {\n            var $hitpoints = $('#hitpoints');\n\n            $hitpoints.addClass('white');\n            setTimeout(function() {\n                $hitpoints.removeClass('white');\n            }, 500)\n        },\n\n        toggleButton: function() {\n            var name = $('#parchment input').val(),\n                $play = $('#createcharacter .play');\n    \n            if(name && name.length > 0) {\n                $play.removeClass('disabled');\n                $('#character').removeClass('disabled');\n            } else {\n                $play.addClass('disabled');\n                $('#character').addClass('disabled');\n            }\n        },\n\n        hideIntro: function(hidden_callback) {\n            clearInterval(this.watchNameInputInterval);\n            $('body').removeClass('intro');\n            setTimeout(function() {\n                $('body').addClass('game');\n                hidden_callback();\n            }, 1000);\n        },\n\n        showChat: function() {\n            if(this.game.started) {\n                $('#chatbox').addClass('active');\n                $('#chatinput').focus();\n                $('#chatbutton').addClass('active');\n            }\n        },\n\n        hideChat: function() {\n            if(this.game.started) {\n                $('#chatbox').removeClass('active');\n                $('#chatinput').blur();\n                $('#chatbutton').removeClass('active');\n            }\n        },\n\n        toggleInstructions: function() {\n            if($('#achievements').hasClass('active')) {\n        \t    this.toggleAchievements();\n        \t    $('#achievementsbutton').removeClass('active');\n        \t}\n            $('#instructions').toggleClass('active');\n        },\n\n        toggleAchievements: function() {\n        \tif($('#instructions').hasClass('active')) {\n        \t    this.toggleInstructions();\n        \t    $('#helpbutton').removeClass('active');\n        \t}\n            this.resetPage();\n            $('#achievements').toggleClass('active');\n        },\n\n        resetPage: function() {\n            var self = this,\n                $achievements = $('#achievements');\n\n            if($achievements.hasClass('active')) {\n                $achievements.bind(TRANSITIONEND, function() {\n                    $achievements.removeClass('page' + self.currentPage).addClass('page1');\n                    self.currentPage = 1;\n                    $achievements.unbind(TRANSITIONEND);\n                });\n            }\n        },\n\n        initEquipmentIcons: function() {\n            var scale = this.game.renderer.getScaleFactor();\n            var getIconPath = function(spriteName) {\n                    return 'img/'+ scale +'/item-' + spriteName + '.png';\n                },\n                weapon = this.game.player.getWeaponName(),\n                armor = this.game.player.getSpriteName(),\n                weaponPath = getIconPath(weapon),\n                armorPath = getIconPath(armor);\n\n            $('#weapon').css('background-image', 'url(\"' + weaponPath + '\")');\n            if(armor !== 'firefox') {\n                $('#armor').css('background-image', 'url(\"' + armorPath + '\")');\n            }\n        },\n\n        hideWindows: function() {\n            if($('#achievements').hasClass('active')) {\n        \t    this.toggleAchievements();\n        \t    $('#achievementsbutton').removeClass('active');\n        \t}\n        \tif($('#instructions').hasClass('active')) {\n        \t    this.toggleInstructions();\n        \t    $('#helpbutton').removeClass('active');\n        \t}\n        \tif($('body').hasClass('credits')) {\n        \t    this.closeInGameCredits();\n        \t}\n        \tif($('body').hasClass('about')) {\n        \t    this.closeInGameAbout();\n        \t}\n        },\n\n        showAchievementNotification: function(id, name) {\n            var $notif = $('#achievement-notification'),\n                $name = $notif.find('.name'),\n                $button = $('#achievementsbutton');\n\n            $notif.removeClass().addClass('active achievement' + id);\n            $name.text(name);\n            if(this.game.storage.getAchievementCount() === 1) {\n                this.blinkInterval = setInterval(function() {\n                    $button.toggleClass('blink');\n                }, 500);\n            }\n            setTimeout(function() {\n                $notif.removeClass('active');\n                $button.removeClass('blink');\n            }, 5000);\n        },\n\n        displayUnlockedAchievement: function(id) {\n            var $achievement = $('#achievements li.achievement' + id);\n\n            var achievement = this.game.getAchievementById(id);\n            if(achievement && achievement.hidden) {\n                this.setAchievementData($achievement, achievement.name, achievement.desc);\n            }\n            $achievement.addClass('unlocked');\n        },\n\n        unlockAchievement: function(id, name) {\n            this.showAchievementNotification(id, name);\n            this.displayUnlockedAchievement(id);\n\n            var nb = parseInt($('#unlocked-achievements').text());\n            $('#unlocked-achievements').text(nb + 1);\n        },\n\n        initAchievementList: function(achievements) {\n            var self = this,\n                $lists = $('#lists'),\n                $page = $('#page-tmpl'),\n                $achievement = $('#achievement-tmpl'),\n                page = 0,\n                count = 0,\n                $p = null;\n\n            _.each(achievements, function(achievement) {\n                count++;\n    \n                var $a = $achievement.clone();\n                $a.removeAttr('id');\n                $a.addClass('achievement'+count);\n                if(!achievement.hidden) {\n                    self.setAchievementData($a, achievement.name, achievement.desc);\n                }\n                $a.find('.twitter').attr('href', 'http://twitter.com/share?url=http%3A%2F%2Fbrowserquest.mozilla.org&text=I%20unlocked%20the%20%27'+ achievement.name +'%27%20achievement%20on%20Mozilla%27s%20%23BrowserQuest%21&related=glecollinet:Creators%20of%20BrowserQuest%2Cwhatthefranck');\n                $a.show();\n                $a.find('a').click(function() {\n                     var url = $(this).attr('href');\n\n                    self.openPopup('twitter', url);\n                    return false;\n                });\n    \n                if((count - 1) % 4 === 0) {\n                    page++;\n                    $p = $page.clone();\n                    $p.attr('id', 'page'+page);\n                    $p.show();\n                    $lists.append($p);\n                }\n                $p.append($a);\n            });\n\n            $('#total-achievements').text($('#achievements').find('li').length);\n        },\n\n        initUnlockedAchievements: function(ids) {\n            var self = this;\n            \n            _.each(ids, function(id) {\n                self.displayUnlockedAchievement(id);\n            });\n            $('#unlocked-achievements').text(ids.length);\n        },\n\n        setAchievementData: function($el, name, desc) {\n            $el.find('.achievement-name').html(name);\n            $el.find('.achievement-description').html(desc);\n        },\n\n        toggleCredits: function() {\n            var currentState = $('#parchment').attr('class');\n\n            if(this.game.started) {\n                $('#parchment').removeClass().addClass('credits');\n                \n                $('body').toggleClass('credits');\n                    \n                if(!this.game.player) {\n                    $('body').toggleClass('death');\n                }\n                if($('body').hasClass('about')) {\n                    this.closeInGameAbout();\n                    $('#helpbutton').removeClass('active');\n                }\n            } else {\n                if(currentState !== 'animate') {\n                    if(currentState === 'credits') {\n                        this.animateParchment(currentState, this.previousState);\n                    } else {\n            \t        this.animateParchment(currentState, 'credits');\n            \t        this.previousState = currentState;\n            \t    }\n                }\n            }\n        },\n        \n        toggleAbout: function() {\n            var currentState = $('#parchment').attr('class');\n\n            if(this.game.started) {\n                $('#parchment').removeClass().addClass('about');\n                $('body').toggleClass('about');\n                if(!this.game.player) {\n                    $('body').toggleClass('death');\n                }\n                if($('body').hasClass('credits')) {\n                    this.closeInGameCredits();\n                }\n            } else {\n                if(currentState !== 'animate') {\n                    if(currentState === 'about') {\n                        if(localStorage && localStorage.data) {\n                            this.animateParchment(currentState, 'loadcharacter');\n                        } else {\n                            this.animateParchment(currentState, 'createcharacter');\n                        }\n                    } else {\n            \t        this.animateParchment(currentState, 'about');\n            \t        this.previousState = currentState;\n            \t    }\n                }\n            }\n        },\n\n        closeInGameCredits: function() {\n            $('body').removeClass('credits');\n            $('#parchment').removeClass('credits');\n            if(!this.game.player) {\n                $('body').addClass('death');\n            }\n        },\n        \n        closeInGameAbout: function() {\n            $('body').removeClass('about');\n            $('#parchment').removeClass('about');\n            if(!this.game.player) {\n                $('body').addClass('death');\n            }\n            $('#helpbutton').removeClass('active');\n        },\n        \n        togglePopulationInfo: function() {\n            $('#population').toggleClass('visible');\n        },\n\n        openPopup: function(type, url) {\n            var h = $(window).height(),\n                w = $(window).width(),\n                popupHeight,\n                popupWidth,\n                top,\n                left;\n\n            switch(type) {\n                case 'twitter':\n                    popupHeight = 450;\n                    popupWidth = 550;\n                    break;\n                case 'facebook':\n                    popupHeight = 400;\n                    popupWidth = 580;\n                    break;\n            }\n\n            top = (h / 2) - (popupHeight / 2);\n            left = (w / 2) - (popupWidth / 2);\n\n        \tnewwindow = window.open(url,'name','height=' + popupHeight + ',width=' + popupWidth + ',top=' + top + ',left=' + left);\n        \tif (window.focus) {newwindow.focus()}\n        },\n\n        animateParchment: function(origin, destination) {\n            var self = this,\n                $parchment = $('#parchment'),\n                duration = 1;\n\n            if(this.isMobile) {\n                $parchment.removeClass(origin).addClass(destination);\n            } else {\n                if(this.isParchmentReady) {\n                    if(this.isTablet) {\n                        duration = 0;\n                    }\n                    this.isParchmentReady = !this.isParchmentReady;\n        \n                    $parchment.toggleClass('animate');\n                    $parchment.removeClass(origin);\n\n                    setTimeout(function() {\n                        $('#parchment').toggleClass('animate');\n                        $parchment.addClass(destination);\n                    }, duration * 1000);\n        \n                    setTimeout(function() {\n                        self.isParchmentReady = !self.isParchmentReady;\n                    }, duration * 1000);\n        \t    }\n            }\n        },\n\n        animateMessages: function() {\n            var $messages = $('#notifications div');\n\n            $messages.addClass('top');\n        },\n\n        resetMessagesPosition: function() {\n            var message = $('#message2').text();\n\n            $('#notifications div').removeClass('top');\n            $('#message2').text('');\n            $('#message1').text(message);\n        },\n\n        showMessage: function(message) {\n            var $wrapper = $('#notifications div'),\n                $message = $('#notifications #message2');\n\n            this.animateMessages();\n            $message.text(message);\n            if(this.messageTimer) {\n                this.resetMessageTimer();\n            }\n\n            this.messageTimer = setTimeout(function() {\n                    $wrapper.addClass('top');\n            }, 5000);\n        },\n\n        resetMessageTimer: function() {\n            clearTimeout(this.messageTimer);\n        },\n        \n        resizeUi: function() {\n            if(this.game) {\n                if(this.game.started) {\n                    this.game.resize();\n                    this.initHealthBar();\n                    this.game.updateBars();\n                } else {\n                    var newScale = this.game.renderer.getScaleFactor();\n                    this.game.renderer.rescale(newScale);\n                }\n            } \n        }\n    });\n\n    return App;\n});"
  },
  {
    "path": "client/js/area.js",
    "content": "\ndefine(function() {\n\n    var Area = Class.extend({\n        init: function(x, y, width, height) {\n            this.x = x;\n            this.y = y;\n            this.width = width;\n            this.height = height;\n        },\n    \n        contains: function(entity) {\n            if(entity) {\n                return entity.gridX >= this.x\n                    && entity.gridY >= this.y\n                    && entity.gridX < this.x + this.width\n                    && entity.gridY < this.y + this.height;\n            } else {\n                return false;\n            }\n        }\n    });\n    \n    return Area;\n});"
  },
  {
    "path": "client/js/audio.js",
    "content": "\ndefine(['area'], function(Area) {\n\n    var AudioManager = Class.extend({\n        init: function(game) {\n            var self = this;\n        \n            this.enabled = true;\n            this.extension = Detect.canPlayMP3() ? \"mp3\" : \"ogg\";\n            this.sounds = {};\n            this.game = game;\n            this.currentMusic = null;\n            this.areas = [];\n            this.musicNames = [\"village\", \"beach\", \"forest\", \"cave\", \"desert\", \"lavaland\", \"boss\"];\n            this.soundNames = [\"loot\", \"hit1\", \"hit2\", \"hurt\", \"heal\", \"chat\", \"revive\", \"death\", \"firefox\", \"achievement\", \"kill1\", \"kill2\", \"noloot\", \"teleport\", \"chest\", \"npc\", \"npc-end\"];\n            \n            var loadSoundFiles = function() {\n                var counter = _.size(self.soundNames);\n                log.info(\"Loading sound files...\");\n                _.each(self.soundNames, function(name) { self.loadSound(name, function() {\n                        counter -= 1;\n                        if(counter === 0) {\n                            if(!Detect.isSafari()) { // Disable music on Safari - See bug 738008\n                                loadMusicFiles();\n                            }\n                        }\n                    });\n                });\n            };\n            \n            var loadMusicFiles = function() {\n                if(!self.game.renderer.mobile) { // disable music on mobile devices\n                    log.info(\"Loading music files...\");\n                    // Load the village music first, as players always start here\n                    self.loadMusic(self.musicNames.shift(), function() {\n                        // Then, load all the other music files\n                        _.each(self.musicNames, function(name) {\n                            self.loadMusic(name);\n                        });\n                    });\n                }\n            };\n        \n            if(!(Detect.isSafari() && Detect.isWindows())) {\n                loadSoundFiles();\n            } else {\n                this.enabled = false; // Disable audio on Safari Windows\n            }\n        },\n    \n        toggle: function() {\n            if(this.enabled) {\n                this.enabled = false;\n            \n                if(this.currentMusic) {\n                    this.resetMusic(this.currentMusic);\n                }\n            } else {\n                this.enabled = true;\n            \n                if(this.currentMusic) {\n                    this.currentMusic = null;\n                }\n                this.updateMusic();\n            }\n        },\n    \n        load: function (basePath, name, loaded_callback, channels) {\n            var path = basePath + name + \".\" + this.extension,\n                sound = document.createElement('audio'),\n                self = this;\n            \n            sound.addEventListener('canplaythrough', function (e) {\n                this.removeEventListener('canplaythrough', arguments.callee, false);\n                log.debug(path + \" is ready to play.\");\n                if(loaded_callback) {\n                    loaded_callback();\n                }\n            }, false);\n            sound.addEventListener('error', function (e) {\n                log.error(\"Error: \"+ path +\" could not be loaded.\");\n                self.sounds[name] = null;\n            }, false);\n        \n            sound.preload = \"auto\";\n            sound.autobuffer = true;\n            sound.src = path;\n            sound.load();\n        \n            this.sounds[name] = [sound];\n            _.times(channels - 1, function() {\n                self.sounds[name].push(sound.cloneNode(true));\n            });\n        },\n    \n        loadSound: function(name, handleLoaded) {\n            this.load(\"audio/sounds/\", name, handleLoaded, 4);\n        },\n    \n        loadMusic: function(name, handleLoaded) {\n            this.load(\"audio/music/\", name, handleLoaded, 1);\n            var music = this.sounds[name][0];\n            music.loop = true;\n            music.addEventListener('ended', function() { music.play() }, false);\n        },\n    \n        getSound: function(name) {\n            if(!this.sounds[name]) {\n                return null;\n            }\n            var sound = _.detect(this.sounds[name], function(sound) {\n                return sound.ended || sound.paused;\n            });\n            if(sound && sound.ended) {\n                sound.currentTime = 0;\n            } else {\n                sound = this.sounds[name][0];\n            }\n            return sound;\n        },\n    \n        playSound: function(name) {\n            var sound = this.enabled && this.getSound(name);\n            if(sound) {\n                sound.play();\n            }\n        },\n    \n        addArea: function(x, y, width, height, musicName) {\n            var area = new Area(x, y, width, height);\n            area.musicName = musicName;\n            this.areas.push(area);\n        },\n    \n        getSurroundingMusic: function(entity) {\n            var music = null,\n                area = _.detect(this.areas, function(area) {\n                    return area.contains(entity);\n                });\n        \n            if(area) {\n                music = { sound: this.getSound(area.musicName), name: area.musicName };\n            }\n            return music;\n        },\n    \n        updateMusic: function() {\n            if(this.enabled) {\n                var music = this.getSurroundingMusic(this.game.player);\n        \n                if(music) {\n                    if(!this.isCurrentMusic(music)) {\n                        if(this.currentMusic) {\n                            this.fadeOutCurrentMusic();\n                        }\n                        this.playMusic(music);\n                    }\n                } else {\n                    this.fadeOutCurrentMusic();\n                }\n            }\n        },\n    \n        isCurrentMusic: function(music) {\n            return this.currentMusic && (music.name === this.currentMusic.name);\n        },\n    \n        playMusic: function(music) {\n            if(this.enabled && music && music.sound) {\n                if(music.sound.fadingOut) {\n                    this.fadeInMusic(music);\n                } else {\n                    music.sound.volume = 1;\n                    music.sound.play();\n                }\n                this.currentMusic = music;\n            }\n        },\n    \n        resetMusic: function(music) {\n            if(music && music.sound && music.sound.readyState > 0) {\n                music.sound.pause();\n                music.sound.currentTime = 0;\n            }\n        },\n    \n        fadeOutMusic: function(music, ended_callback) {\n            var self = this;\n            if(music && !music.sound.fadingOut) {\n                this.clearFadeIn(music);\n                music.sound.fadingOut = setInterval(function() {\n                    var step = 0.02;\n                        volume = music.sound.volume - step;\n                \n                    if(self.enabled && volume >= step) {\n                        music.sound.volume = volume;\n                    } else {\n                        music.sound.volume = 0;\n                        self.clearFadeOut(music);\n                        ended_callback(music);\n                    }\n                }, 50);\n            }\n        },\n    \n        fadeInMusic: function(music) {\n            var self = this;\n            if(music && !music.sound.fadingIn) {\n                this.clearFadeOut(music);\n                music.sound.fadingIn = setInterval(function() {\n                    var step = 0.01;\n                        volume = music.sound.volume + step;\n\n                    if(self.enabled && volume < 1 - step) {\n                        music.sound.volume = volume;\n                    } else {\n                        music.sound.volume = 1;\n                        self.clearFadeIn(music);\n                    }\n                }, 30);\n            }\n        },\n    \n        clearFadeOut: function(music) {\n            if(music.sound.fadingOut) {\n                clearInterval(music.sound.fadingOut);\n                music.sound.fadingOut = null;\n            }\n        },\n        \n        clearFadeIn: function(music) {\n            if(music.sound.fadingIn) {\n                clearInterval(music.sound.fadingIn);\n                music.sound.fadingIn = null;\n            }\n        },\n    \n        fadeOutCurrentMusic : function() {\n            var self = this;\n            if(this.currentMusic) {\n                this.fadeOutMusic(this.currentMusic, function(music) {\n                    self.resetMusic(music);\n                });\n                this.currentMusic = null;\n            }\n        }\n    });\n    \n    return AudioManager;\n});\n"
  },
  {
    "path": "client/js/bubble.js",
    "content": "\ndefine(['jquery', 'timer'], function($, Timer) {\n\n    var Bubble = Class.extend({\n        init: function(id, element, time) {\n            this.id = id;\n            this.element = element;\n            this.timer = new Timer(5000, time);\n        },\n    \n        isOver: function(time) {\n            if(this.timer.isOver(time)) {\n                return true;\n            }\n            return false;\n        },\n    \n        destroy: function() {\n            $(this.element).remove();\n        },\n    \n        reset: function(time) {\n            this.timer.lastTime = time;\n        }\n    });\n\n    var BubbleManager = Class.extend({\n        init: function(container) {\n            this.container = container;\n            this.bubbles = {};\n        },\n    \n        getBubbleById: function(id) {\n            if(id in this.bubbles) {\n                return this.bubbles[id];\n            }\n            return null;\n        },\n    \n        create: function(id, message, time) {\n            if(this.bubbles[id]) {\n                this.bubbles[id].reset(time);\n                $(\"#\"+id+\" p\").html(message);\n            }\n            else {\n                var el = $(\"<div id=\\\"\"+id+\"\\\" class=\\\"bubble\\\"><p>\"+message+\"</p><div class=\\\"thingy\\\"></div></div>\"); //.attr('id', id);\n                $(el).appendTo(this.container);\n            \n                this.bubbles[id] = new Bubble(id, el, time);\n            }\n        },\n    \n        update: function(time) {\n            var self = this,\n                bubblesToDelete = [];\n        \n            _.each(this.bubbles, function(bubble) {\n                if(bubble.isOver(time)) {\n                    bubble.destroy();\n                    bubblesToDelete.push(bubble.id);\n                }\n            });\n        \n            _.each(bubblesToDelete, function(id) {\n                delete self.bubbles[id];\n            });\n        },\n    \n        clean: function() {\n            var self = this,\n                bubblesToDelete = [];\n        \n            _.each(this.bubbles, function(bubble) {\n                bubble.destroy();\n                bubblesToDelete.push(bubble.id);\n            });\n        \n            _.each(bubblesToDelete, function(id) {\n                delete self.bubbles[id];\n            });\n        \n            this.bubbles = {};\n        },\n    \n        destroyBubble: function(id) {\n            var bubble = this.getBubbleById(id);\n        \n            if(bubble) {\n                bubble.destroy();\n                delete this.bubbles[id];\n            }\n        },\n        \n        forEachBubble: function(callback) {\n            _.each(this.bubbles, function(bubble) {\n                callback(bubble);\n            });\n        }\n    });\n    \n    return BubbleManager;\n});\n"
  },
  {
    "path": "client/js/build.js",
    "content": "({\n    appDir: \"../\",\n    baseUrl: \"js/\",\n    dir: \"../../client-build\",\n    optimize: \"uglify\",\n    optimizeCss: \"standard.keepLines\",\n    \n    paths: {\n        \"jquery\": \"lib/require-jquery\"\n    },\n\n    modules: [\n        //Optimize the require-jquery.js file by applying any minification\n        //that is desired via the optimize: setting above.\n        {\n            name: \"jquery\"\n        },\n        \n        {\n            name: \"game\",\n            exclude: [\"jquery\"]\n        },\n         \n        {\n            name: \"home\",\n            // Exclude the jquery module since it is included already in require-jquery.js\n            exclude: [\"jquery\", \"game\"]\n        }\n    ],\n    \n    pragmas: {\n        devHost: false,\n        prodHost: true\n    }\n})"
  },
  {
    "path": "client/js/camera.js",
    "content": "\ndefine(function() {\n\n    var Camera = Class.extend({\n        init: function(renderer) {\n            this.renderer = renderer;\n            this.x = 0;\n            this.y = 0;\n            this.gridX = 0;\n            this.gridY = 0;\n            this.offset = 0.5;\n            this.rescale();\n        },\n    \n        rescale: function() {\n            var factor = this.renderer.mobile ? 1 : 2;\n        \n            this.gridW = 15 * factor;\n            this.gridH = 7 * factor;\n        \n            log.debug(\"---------\");\n            log.debug(\"Factor:\"+factor);\n            log.debug(\"W:\"+this.gridW + \" H:\" + this.gridH);\n        },\n\n        setPosition: function(x, y) {\n            this.x = x;\n            this.y = y;\n    \n            this.gridX = Math.floor( x / 16 );\n            this.gridY = Math.floor( y / 16 );\n        },\n\n        setGridPosition: function(x, y) {\n            this.gridX = x;\n            this.gridY = y;\n        \n            this.x = this.gridX * 16;\n            this.y = this.gridY * 16;\n        },\n\n        lookAt: function(entity) {\n            var r = this.renderer,\n                x = Math.round( entity.x - (Math.floor(this.gridW / 2) * r.tilesize) ),\n                y = Math.round( entity.y - (Math.floor(this.gridH / 2) * r.tilesize) );\n    \n            this.setPosition(x, y);\n        },\n\n        forEachVisiblePosition: function(callback, extra) {\n            var extra = extra || 0;\n            for(var y=this.gridY-extra, maxY=this.gridY+this.gridH+(extra*2); y < maxY; y += 1) {\n                for(var x=this.gridX-extra, maxX=this.gridX+this.gridW+(extra*2); x < maxX; x += 1) {\n                    callback(x, y);\n                }\n            }\n        },\n        \n        isVisible: function(entity) {\n            return this.isVisiblePosition(entity.gridX, entity.gridY);\n        },\n        \n        isVisiblePosition: function(x, y) {\n            if(y >= this.gridY && y < this.gridY + this.gridH\n            && x >= this.gridX && x < this.gridX + this.gridW) {\n                return true;\n            } else {\n                return false;\n            }\n        },\n    \n        focusEntity: function(entity) {\n            var w = this.gridW - 2,\n                h = this.gridH - 2,\n                x = Math.floor((entity.gridX - 1) / w) * w,\n                y = Math.floor((entity.gridY - 1) / h) * h;\n\n            this.setGridPosition(x, y);\n        }\n    });\n\n    return Camera;\n});\n"
  },
  {
    "path": "client/js/character.js",
    "content": "\ndefine(['entity', 'transition', 'timer'], function(Entity, Transition, Timer) {\n\n    var Character = Entity.extend({\n        init: function(id, kind) {\n    \t    var self = this;\n\t    \n            this._super(id, kind);\n\t\t    \n    \t\t// Position and orientation\n    \t\tthis.nextGridX = -1;\n    \t\tthis.nextGridY = -1;\n    \t\tthis.orientation = Types.Orientations.DOWN;\n\t\t\n    \t\t// Speeds\n            this.atkSpeed = 50;\n    \t\tthis.moveSpeed = 120;\n    \t\tthis.walkSpeed = 100;\n    \t\tthis.idleSpeed = 450;\n    \t\tthis.setAttackRate(800);\n        \n            // Pathing\n    \t\tthis.movement = new Transition();\n    \t\tthis.path = null;\n    \t\tthis.newDestination = null;\n    \t\tthis.adjacentTiles = {};\n\t\t\n    \t\t// Combat\n    \t\tthis.target = null;\n            this.unconfirmedTarget = null;\n            this.attackers = {};\n        \n            // Health\n            this.hitPoints = 0;\n            this.maxHitPoints = 0;\n        \n            // Modes\n            this.isDead = false;\n            this.attackingMode = false;\n            this.followingMode = false;\n    \t},\n\t\n    \tclean: function() {\n    \t    this.forEachAttacker(function(attacker) {\n                attacker.disengage();\n                attacker.idle();\n            });\n    \t},\n\t\n    \tsetMaxHitPoints: function(hp) {\n    \t    this.maxHitPoints = hp;\n    \t    this.hitPoints = hp;\n    \t},\n    \n    \tsetDefaultAnimation: function() {\n    \t\tthis.idle();\n    \t},\n\t\n    \thasWeapon: function() {\n    \t    return false;\n    \t},\n\t\n    \thasShadow: function() {\n    \t    return true;\n    \t},\n\t\n    \tanimate: function(animation, speed, count, onEndCount) {\n    \t    var oriented = ['atk', 'walk', 'idle'];\n    \t        o = this.orientation;\n            \n            if(!(this.currentAnimation && this.currentAnimation.name === \"death\")) { // don't change animation if the character is dying\n            \tthis.flipSpriteX = false;\n        \t    this.flipSpriteY = false;\n\t    \n        \t    if(_.indexOf(oriented, animation) >= 0) {\n        \t        animation += \"_\" + (o === Types.Orientations.LEFT ? \"right\" : Types.getOrientationAsString(o));\n        \t        this.flipSpriteX = (this.orientation === Types.Orientations.LEFT) ? true : false;\n        \t    }\n\n        \t\tthis.setAnimation(animation, speed, count, onEndCount);\n        \t}\n    \t},\n    \n        turnTo: function(orientation) {\n            this.orientation = orientation;\n            this.idle();\n        },\n\t\n    \tsetOrientation: function(orientation) {\n    \t    if(orientation) {\n    \t        this.orientation = orientation;\n    \t    }\n    \t},\n\t\n    \tidle: function(orientation) {\n    \t    this.setOrientation(orientation);\n    \t    this.animate(\"idle\", this.idleSpeed);\n    \t},\n\t\n    \thit: function(orientation) {\n    \t    this.setOrientation(orientation);\n    \t    this.animate(\"atk\", this.atkSpeed, 1);\n    \t},\n\t\n    \twalk: function(orientation) {\n    \t    this.setOrientation(orientation);\n    \t    this.animate(\"walk\", this.walkSpeed);\n    \t},\n    \n        moveTo_: function(x, y, callback) {\n            this.destination = { gridX: x, gridY: y };\n            this.adjacentTiles = {};\n        \n            if(this.isMoving()) {\n                this.continueTo(x, y);\n            }\n            else {\n                var path = this.requestPathfindingTo(x, y);\n            \n                this.followPath(path);\n            }\n        },\n    \n        requestPathfindingTo: function(x, y) {\n            if(this.request_path_callback) {\n                return this.request_path_callback(x, y);\n            } else {\n                log.error(this.id + \" couldn't request pathfinding to \"+x+\", \"+y);\n                return [];\n            }\n        },\n    \n        onRequestPath: function(callback) {\n            this.request_path_callback = callback;\n        },\n    \n        onStartPathing: function(callback) {\n            this.start_pathing_callback = callback;\n        },\n    \n        onStopPathing: function(callback) {\n            this.stop_pathing_callback = callback;\n        },\n\t\n    \tfollowPath: function(path) {\n    \t\tif(path.length > 1) { // Length of 1 means the player has clicked on himself\n    \t\t\tthis.path = path;\n    \t\t\tthis.step = 0;\n\t\t\t\n                if(this.followingMode) { // following a character\n                    path.pop();\n                }\n\t\t\t\n                if(this.start_pathing_callback) {\n                    this.start_pathing_callback(path);\n                }\n                this.nextStep();\n    \t\t}\n    \t},\n\n    \tcontinueTo: function(x, y) {\n    \t\tthis.newDestination = { x: x, y: y };\n    \t},\n\t\n    \tupdateMovement: function() {\n    \t\tvar p = this.path,\n    \t\t\ti = this.step;\n\t\t\n    \t\tif(p[i][0] < p[i-1][0]) {\n    \t\t\tthis.walk(Types.Orientations.LEFT);\n    \t\t}\n    \t\tif(p[i][0] > p[i-1][0]) {\n    \t\t\tthis.walk(Types.Orientations.RIGHT);\n    \t\t}\n    \t\tif(p[i][1] < p[i-1][1]) {\n    \t\t\tthis.walk(Types.Orientations.UP);\n    \t\t}\n    \t\tif(p[i][1] > p[i-1][1]) {\n    \t\t\tthis.walk(Types.Orientations.DOWN);\n    \t\t}\n    \t},\n\n    \tupdatePositionOnGrid: function() {\n    \t\tthis.setGridPosition(this.path[this.step][0], this.path[this.step][1]);\n    \t},\n\n    \tnextStep: function() {\n            var stop = false,\n                x, y, path;\n        \n    \t\tif(this.isMoving()) {\n    \t\t    if(this.before_step_callback) {\n                    this.before_step_callback();\n                }\n            \n    \t\t    this.updatePositionOnGrid();\n                this.checkAggro();\n            \n                if(this.interrupted) { // if Character.stop() has been called\n                    stop = true;\n                    this.interrupted = false;\n                }\n                else {\n                    if(this.hasNextStep()) {\n                        this.nextGridX = this.path[this.step+1][0];\n                        this.nextGridY = this.path[this.step+1][1];\n                    }\n            \n                    if(this.step_callback) {\n                        this.step_callback();\n                    }\n\t\t\t    \n        \t\t\tif(this.hasChangedItsPath()) {\n        \t\t\t\tx = this.newDestination.x;\n        \t\t\t\ty = this.newDestination.y;\n        \t\t\t\tpath = this.requestPathfindingTo(x, y);\n                \n                        this.newDestination = null;\n        \t\t\t\tif(path.length < 2) {\n                            stop = true;\n                        }\n                        else {\n                            this.followPath(path);\n                        }\n        \t\t\t}\n        \t\t\telse if(this.hasNextStep()) {\n        \t\t\t\tthis.step += 1;\n        \t\t\t\tthis.updateMovement();\n        \t\t\t}\n                    else {\n                        stop = true;\n                    }\n                }\n            \n    \t\t    if(stop) { // Path is complete or has been interrupted\n    \t\t        this.path = null;\n        \t\t\tthis.idle();\n                \n                    if(this.stop_pathing_callback) {\n                        this.stop_pathing_callback(this.gridX, this.gridY);\n                    }\n        \t\t}\n        \t}\n    \t},\n    \n        onBeforeStep: function(callback) {\n            this.before_step_callback = callback;\n        },\n    \n        onStep: function(callback) {\n            this.step_callback = callback;\n        },\n\n    \tisMoving: function() {\n    \t\treturn !(this.path === null);\n    \t},\n\n    \thasNextStep: function() {\n    \t\treturn (this.path.length - 1 > this.step);\n    \t},\n\n    \thasChangedItsPath: function() {\n    \t\treturn !(this.newDestination === null);\n        },\n    \n        isNear: function(character, distance) {\n            var dx, dy, near = false;\n        \n            dx = Math.abs(this.gridX - character.gridX);\n            dy = Math.abs(this.gridY - character.gridY);\n        \n            if(dx <= distance && dy <= distance) {\n                near = true;\n            }\n            return near;\n        },\n    \n        onAggro: function(callback) {\n            this.aggro_callback = callback;\n        },\n        \n        onCheckAggro: function(callback) {\n            this.checkaggro_callback = callback;\n        },\n    \n        checkAggro: function() {\n            if(this.checkaggro_callback) {\n                this.checkaggro_callback();\n            }\n        },\n        \n        aggro: function(character) {\n            if(this.aggro_callback) {\n                this.aggro_callback(character);\n            }\n        },\n    \n        onDeath: function(callback) {\n            this.death_callback = callback;\n        },\n    \n        /**\n         * Changes the character's orientation so that it is facing its target.\n         */\n        lookAtTarget: function() {\n            if(this.target) {\n                this.turnTo(this.getOrientationTo(this.target));\n            }\n        },\n    \n        /**\n         * \n         */\n        go: function(x, y) {\n    \t    if(this.isAttacking()) {\n                this.disengage();\n            }\n            else if(this.followingMode) {\n                this.followingMode = false;\n                this.target = null;\n            }\n            this.moveTo_(x, y);\n        },\n    \n        /**\n         * Makes the character follow another one.\n         */\n        follow: function(entity) {\n            if(entity) {\n                this.followingMode = true;\n                this.moveTo_(entity.gridX, entity.gridY);\n            }\n        },\n    \n        /**\n    \t * Stops a moving character.\n    \t */\n    \tstop: function() {\n    \t    if(this.isMoving()) {\n                this.interrupted = true;\n    \t    }\n    \t},\n    \n        /**\n         * Makes the character attack another character. Same as Character.follow but with an auto-attacking behavior.\n         * @see Character.follow\n         */\n        engage: function(character) {\n            this.attackingMode = true;\n            this.setTarget(character);\n            this.follow(character);\n        },\n    \n        disengage: function() {\n            this.attackingMode = false;\n            this.followingMode = false;\n            this.removeTarget();\n        },\n    \n        /**\n         * Returns true if the character is currently attacking.\n         */\n        isAttacking: function() {\n            return this.attackingMode;\n        },\n        \n        /**\n         * Gets the right orientation to face a target character from the current position.\n         * Note:\n         * In order to work properly, this method should be used in the following\n         * situation :\n         *    S\n         *  S T S\n         *    S\n         * (where S is self, T is target character)\n         * \n         * @param {Character} character The character to face.\n         * @returns {String} The orientation.\n         */\n        getOrientationTo: function(character) {\n            if(this.gridX < character.gridX) {\n                return Types.Orientations.RIGHT;\n            } else if(this.gridX > character.gridX) {\n                return Types.Orientations.LEFT;\n            } else if(this.gridY > character.gridY) {\n                return Types.Orientations.UP;\n            } else {\n                return Types.Orientations.DOWN;\n            }\n        },\n    \n        /**\n         * Returns true if this character is currently attacked by a given character.\n         * @param {Character} character The attacking character.\n         * @returns {Boolean} Whether this is an attacker of this character.\n         */\n        isAttackedBy: function(character) {\n            return (character.id in this.attackers);\n        },\n    \n        /**\n        * Registers a character as a current attacker of this one.\n        * @param {Character} character The attacking character.\n        */\n        addAttacker: function(character) {\n            if(!this.isAttackedBy(character)) {\n                this.attackers[character.id] = character;\n            } else {\n                log.error(this.id + \" is already attacked by \" + character.id);\n            }\n        },\n    \n        /**\n        * Unregisters a character as a current attacker of this one.\n        * @param {Character} character The attacking character.\n        */\n        removeAttacker: function(character) {\n            if(this.isAttackedBy(character)) {\n                delete this.attackers[character.id];\n            } else {\n                log.error(this.id + \" is not attacked by \" + character.id);\n            }\n        },\n    \n        /**\n         * Loops through all the characters currently attacking this one.\n         * @param {Function} callback Function which must accept one character argument.\n         */\n        forEachAttacker: function(callback) {\n            _.each(this.attackers, function(attacker) {\n                callback(attacker);\n            });\n        },\n    \n        /**\n         * Sets this character's attack target. It can only have one target at any time.\n         * @param {Character} character The target character.\n         */\n        setTarget: function(character) {\n            if(this.target !== character) { // If it's not already set as the target\n                if(this.hasTarget()) {\n                    this.removeTarget(); // Cleanly remove the previous one\n                }\n                this.unconfirmedTarget = null;\n                this.target = character;\n            } else {\n                log.debug(character.id + \" is already the target of \" + this.id);\n            }\n        },\n    \n        /**\n         * Removes the current attack target.\n         */\n        removeTarget: function() {\n            var self = this;\n        \n            if(this.target) {\n                if(this.target instanceof Character) {\n                    this.target.removeAttacker(this);\n                }\n                this.target = null;\n            }\n        },\n    \n        /**\n         * Returns true if this character has a current attack target.\n         * @returns {Boolean} Whether this character has a target.\n         */\n        hasTarget: function() {\n            return !(this.target === null);\n        },\n\n        /**\n         * Marks this character as waiting to attack a target.\n         * By sending an \"attack\" message, the server will later confirm (or not)\n         * that this character is allowed to acquire this target.\n         *\n         * @param {Character} character The target character\n         */\n        waitToAttack: function(character) {\n            this.unconfirmedTarget = character;\n        },\n    \n        /**\n         * Returns true if this character is currently waiting to attack the target character.\n         * @param {Character} character The target character.\n         * @returns {Boolean} Whether this character is waiting to attack.\n         */\n        isWaitingToAttack: function(character) {\n            return (this.unconfirmedTarget === character);\n        },\n    \n        /**\n         * \n         */\n        canAttack: function(time) {\n            if(this.canReachTarget() && this.attackCooldown.isOver(time)) {\n                return true;\n            }\n            return false;\n        },\n        \n        canReachTarget: function() {\n            if(this.hasTarget() && this.isAdjacentNonDiagonal(this.target)) {\n                return true;\n            }\n            return false;\n        },\n    \n        /**\n         * \n         */\n    \tdie: function() {\n    \t    this.removeTarget();\n    \t    this.isDead = true;\n\t    \n    \t    if(this.death_callback) {\n    \t        this.death_callback();\n    \t    }\n    \t},\n\t\n    \tonHasMoved: function(callback) {\n    \t    this.hasmoved_callback = callback;\n    \t},\n\t\n    \thasMoved: function() {\n    \t    this.setDirty();\n    \t    if(this.hasmoved_callback) {\n    \t        this.hasmoved_callback(this);\n    \t    }\n    \t},\n\t\n    \thurt: function() {\n            var self = this;\n        \n            this.stopHurting();\n            this.sprite = this.hurtSprite;\n            this.hurting = setTimeout(this.stopHurting.bind(this), 75);\n        },\n    \n        stopHurting: function() {\n            this.sprite = this.normalSprite;\n            clearTimeout(this.hurting);\n        },\n    \n        setAttackRate: function(rate) {\n            this.attackCooldown = new Timer(rate);\n        }\n    });\n    \n    return Character;\n});"
  },
  {
    "path": "client/js/chest.js",
    "content": "\ndefine(['entity'], function(Entity) {\n\n    var Chest = Entity.extend({\n        init: function(id, kind) {\n    \t    this._super(id, Types.Entities.CHEST);\n        },\n    \n        getSpriteName: function() {\n            return \"chest\";\n        },\n    \n        isMoving: function() {\n            return false;\n        },\n    \n        open: function() {\n            if(this.open_callback) {\n                this.open_callback();\n            }\n        },\n    \n        onOpen: function(callback) {\n            this.open_callback = callback;\n        }\n    });\n    \n    return Chest;\n});"
  },
  {
    "path": "client/js/config.js",
    "content": "\ndefine(['text!../config/config_build.json'],\nfunction(build) {\n    var config = {\n        dev: { host: \"localhost\", port: 8000, dispatcher: false },\n        build: JSON.parse(build)\n    };\n    \n    //>>excludeStart(\"prodHost\", pragmas.prodHost);\n    require(['text!../config/config_local.json'], function(local) {\n        try {\n            config.local = JSON.parse(local);\n        } catch(e) {\n            // Exception triggered when config_local.json does not exist. Nothing to do here.\n        }\n    });\n    //>>excludeEnd(\"prodHost\");\n    \n    return config;\n});"
  },
  {
    "path": "client/js/detect.js",
    "content": "\nvar Detect = {};\n\nDetect.supportsWebSocket = function() {\n    return window.WebSocket || window.MozWebSocket;\n};\n\nDetect.userAgentContains = function(string) {\n    return navigator.userAgent.indexOf(string) != -1;\n};\n\nDetect.isTablet = function(screenWidth) {\n    if(screenWidth > 640) {\n        if((Detect.userAgentContains('Android') && Detect.userAgentContains('Firefox'))\n        || Detect.userAgentContains('Mobile')) {\n            return true;\n        }\n    }\n    return false;\n};\n\nDetect.isWindows = function() {\n    return Detect.userAgentContains('Windows');\n}\n\nDetect.isChromeOnWindows = function() {\n    return Detect.userAgentContains('Chrome') && Detect.userAgentContains('Windows');\n};\n\nDetect.canPlayMP3 = function() {\n    return Modernizr.audio.mp3;\n};\n\nDetect.isSafari = function() {\n    return Detect.userAgentContains('Safari') && !Detect.userAgentContains('Chrome');\n};\n\nDetect.isOpera = function() {\n    return Detect.userAgentContains('Opera');\n};"
  },
  {
    "path": "client/js/entity.js",
    "content": "\ndefine(function() {\n\n    var Entity = Class.extend({\n        init: function(id, kind) {\n    \t    var self = this;\n\t    \n            this.id = id;\n            this.kind = kind;\n\n            // Renderer\n    \t\tthis.sprite = null;\n    \t\tthis.flipSpriteX = false;\n        \tthis.flipSpriteY = false;\n    \t\tthis.animations = null;\n    \t\tthis.currentAnimation = null;\n            this.shadowOffsetY = 0;\n\t\t\n    \t\t// Position\n    \t\tthis.setGridPosition(0, 0);\n\t\t\n            // Modes\n            this.isLoaded = false;\n            this.isHighlighted = false;\n            this.visible = true;\n            this.isFading = false;\n            this.setDirty();\n    \t},\n\t\n    \tsetName: function(name) {\n    \t\tthis.name = name;\n    \t},\n\t\n    \tsetPosition: function(x, y) {\n    \t\tthis.x = x;\n    \t\tthis.y = y;\n    \t},\n\t\n    \tsetGridPosition: function(x, y) {\n    \t\tthis.gridX = x;\n    \t\tthis.gridY = y;\n\t\t\n    \t\tthis.setPosition(x * 16, y * 16);\n    \t},\n\t\n    \tsetSprite: function(sprite) {\n    \t    if(!sprite) {\n    \t        log.error(this.id + \" : sprite is null\", true);\n    \t        throw \"Error\";\n    \t    }\n\t    \n    \t    if(this.sprite && this.sprite.name === sprite.name) {\n    \t        return;\n    \t    }\n\n    \t    this.sprite = sprite;\n            this.normalSprite = this.sprite;\n        \n            if(Types.isMob(this.kind) || Types.isPlayer(this.kind)) {\n            \tthis.hurtSprite = sprite.getHurtSprite();\n            }\n\t\t\n    \t\tthis.animations = sprite.createAnimations();\n\t\t\n    \t\tthis.isLoaded = true;\n    \t\tif(this.ready_func) {\n    \t\t\tthis.ready_func();\n    \t\t}\n    \t},\n\t\n    \tgetSprite: function() {\n    \t    return this.sprite;\n    \t},\n\t\n    \tgetSpriteName: function() {\n    \t    return Types.getKindAsString(this.kind);\n    \t},\n\t\n    \tgetAnimationByName: function(name) {\n            var animation = null;\n        \n            if(name in this.animations) {\n                animation = this.animations[name];\n            }\n            else {\n                log.error(\"No animation called \"+ name);\n            }\n            return animation;\n        },\n    \n    \tsetAnimation: function(name, speed, count, onEndCount) {\n    \t    var self = this;\n\t    \n            if(this.isLoaded) {\n    \t\t    if(this.currentAnimation && this.currentAnimation.name === name) {\n    \t\t        return;\n    \t\t    }\n\t\t    \n    \t\t    var s = this.sprite,\n                    a = this.getAnimationByName(name);\n\t\t\n    \t\t\tif(a) {\n    \t\t\t\tthis.currentAnimation = a;\n    \t\t\t\tif(name.substr(0, 3) === \"atk\") {\n    \t\t\t\t    this.currentAnimation.reset();\n    \t\t\t\t}\n    \t\t\t\tthis.currentAnimation.setSpeed(speed);\n    \t\t\t\tthis.currentAnimation.setCount(count ? count : 0, onEndCount || function() {\n    \t\t\t\t    self.idle();\n    \t\t\t\t});\n    \t\t\t}\n    \t\t}\n    \t\telse {\n    \t\t\tthis.log_error(\"Not ready for animation\");\n    \t\t}\n    \t},\n\t\n    \thasShadow: function() {\n    \t    return false;\n    \t},\n\t\n    \tready: function(f) {\n    \t\tthis.ready_func = f;\n    \t},\n\t\n    \tclean: function() {\n            this.stopBlinking();\n    \t},\n\t\n        log_info: function(message) {\n            log.info(\"[\"+this.id+\"] \" + message);\n        },\n    \n        log_error: function(message) {\n            log.error(\"[\"+this.id+\"] \" + message);\n        },\n    \n        setHighlight: function(value) {\n            if(value === true) {\n                this.sprite = this.sprite.silhouetteSprite;\n                this.isHighlighted = true;\n            }\n            else {\n                this.sprite = this.normalSprite;\n                this.isHighlighted = false;\n            }\n        },\n    \n        setVisible: function(value) {\n            this.visible = value;\n        },\n    \n        isVisible: function() {\n            return this.visible;\n        },\n    \n        toggleVisibility: function() {\n            if(this.visible) {\n                this.setVisible(false);\n            } else {\n                this.setVisible(true);\n            }\n        },\n    \n        /**\n         * \n         */\n        getDistanceToEntity: function(entity) {\n            var distX = Math.abs(entity.gridX - this.gridX);\n            var distY = Math.abs(entity.gridY - this.gridY);\n\n            return (distX > distY) ? distX : distY;\n        },\n    \n        isCloseTo: function(entity) {\n            var dx, dy, d, close = false;\n            if(entity) {\n                dx = Math.abs(entity.gridX - this.gridX);\n                dy = Math.abs(entity.gridY - this.gridY);\n            \n                if(dx < 30 && dy < 14) {\n                    close = true;\n                }\n            }\n            return close;\n        },\n    \n        /**\n         * Returns true if the entity is adjacent to the given one.\n         * @returns {Boolean} Whether these two entities are adjacent.\n         */\n        isAdjacent: function(entity) {\n            var adjacent = false;\n        \n            if(entity) {\n                adjacent = this.getDistanceToEntity(entity) > 1 ? false : true;\n            }\n            return adjacent;\n        },\n    \n        /**\n         * \n         */\n        isAdjacentNonDiagonal: function(entity) {\n            var result = false;\n\n            if(this.isAdjacent(entity) && !(this.gridX !== entity.gridX && this.gridY !== entity.gridY)) {\n                result = true;\n            }\n        \n            return result;\n        },\n        \n        isDiagonallyAdjacent: function(entity) {\n            return this.isAdjacent(entity) && !this.isAdjacentNonDiagonal(entity);\n        },\n        \n        forEachAdjacentNonDiagonalPosition: function(callback) {\n            callback(this.gridX - 1, this.gridY, Types.Orientations.LEFT);\n            callback(this.gridX, this.gridY - 1, Types.Orientations.UP);\n            callback(this.gridX + 1, this.gridY, Types.Orientations.RIGHT);\n            callback(this.gridX, this.gridY + 1, Types.Orientations.DOWN);\n            \n        },\n    \n        fadeIn: function(currentTime) {\n            this.isFading = true;\n            this.startFadingTime = currentTime;\n        },\n    \n        blink: function(speed, callback) {\n            var self = this;\n        \n            this.blinking = setInterval(function() {\n                self.toggleVisibility();\n            }, speed);\n        },\n    \n        stopBlinking: function() {\n            if(this.blinking) {\n                clearInterval(this.blinking);\n            }\n            this.setVisible(true);\n        },\n        \n        setDirty: function() {\n            this.isDirty = true;\n            if(this.dirty_callback) {\n                this.dirty_callback(this);\n            }\n        },\n        \n        onDirty: function(dirty_callback) {\n            this.dirty_callback = dirty_callback;\n        }\n    });\n    \n    return Entity;\n});\n"
  },
  {
    "path": "client/js/entityfactory.js",
    "content": "\ndefine(['mobs', 'items', 'npcs', 'warrior', 'chest'], function(Mobs, Items, NPCs, Warrior, Chest) {\n\n    var EntityFactory = {};\n\n    EntityFactory.createEntity = function(kind, id, name) {\n        if(!kind) {\n            log.error(\"kind is undefined\", true);\n            return;\n        }\n    \n        if(!_.isFunction(EntityFactory.builders[kind])) {\n            throw Error(kind + \" is not a valid Entity type\");\n        }\n    \n        return EntityFactory.builders[kind](id, name);\n    };\n\n    //===== mobs ======\n\n    EntityFactory.builders = [];\n\n    EntityFactory.builders[Types.Entities.WARRIOR] = function(id, name) {\n        return new Warrior(id, name);\n    };\n\n    EntityFactory.builders[Types.Entities.RAT] = function(id) {\n        return new Mobs.Rat(id);\n    };\n\n    EntityFactory.builders[Types.Entities.SKELETON] = function(id) {\n        return new Mobs.Skeleton(id);\n    };\n\n    EntityFactory.builders[Types.Entities.SKELETON2] = function(id) {\n        return new Mobs.Skeleton2(id);\n    };\n\n    EntityFactory.builders[Types.Entities.SPECTRE] = function(id) {\n        return new Mobs.Spectre(id);\n    };\n    \n    EntityFactory.builders[Types.Entities.DEATHKNIGHT] = function(id) {\n        return new Mobs.Deathknight(id);\n    };\n\n    EntityFactory.builders[Types.Entities.GOBLIN] = function(id) {\n        return new Mobs.Goblin(id);\n    };\n\n    EntityFactory.builders[Types.Entities.OGRE] = function(id) {\n        return new Mobs.Ogre(id);\n    };\n\n    EntityFactory.builders[Types.Entities.CRAB] = function(id) {\n        return new Mobs.Crab(id);\n    };\n\n    EntityFactory.builders[Types.Entities.SNAKE] = function(id) {\n        return new Mobs.Snake(id);\n    };\n\n    EntityFactory.builders[Types.Entities.EYE] = function(id) {\n        return new Mobs.Eye(id);\n    };\n\n    EntityFactory.builders[Types.Entities.BAT] = function(id) {\n        return new Mobs.Bat(id);\n    };\n\n    EntityFactory.builders[Types.Entities.WIZARD] = function(id) {\n        return new Mobs.Wizard(id);\n    };\n\n    EntityFactory.builders[Types.Entities.BOSS] = function(id) {\n        return new Mobs.Boss(id);\n    };\n\n    //===== items ======\n \n    EntityFactory.builders[Types.Entities.SWORD2] = function(id) {\n        return new Items.Sword2(id);\n    };\n\n    EntityFactory.builders[Types.Entities.AXE] = function(id) {\n        return new Items.Axe(id);\n    };\n\n    EntityFactory.builders[Types.Entities.REDSWORD] = function(id) {\n        return new Items.RedSword(id);\n    };\n\n    EntityFactory.builders[Types.Entities.BLUESWORD] = function(id) {\n        return new Items.BlueSword(id);\n    };\n\n    EntityFactory.builders[Types.Entities.GOLDENSWORD] = function(id) {\n        return new Items.GoldenSword(id);\n    };\n\n    EntityFactory.builders[Types.Entities.MORNINGSTAR] = function(id) {\n        return new Items.MorningStar(id);\n    };\n\n    EntityFactory.builders[Types.Entities.MAILARMOR] = function(id) {\n        return new Items.MailArmor(id);\n    };\n\n    EntityFactory.builders[Types.Entities.LEATHERARMOR] = function(id) {\n        return new Items.LeatherArmor(id);\n    };\n\n    EntityFactory.builders[Types.Entities.PLATEARMOR] = function(id) {\n        return new Items.PlateArmor(id);\n    };\n\n    EntityFactory.builders[Types.Entities.REDARMOR] = function(id) {\n        return new Items.RedArmor(id);\n    };\n\n    EntityFactory.builders[Types.Entities.GOLDENARMOR] = function(id) {\n        return new Items.GoldenArmor(id);\n    };\n\n    EntityFactory.builders[Types.Entities.FLASK] = function(id) {\n        return new Items.Flask(id);\n    };\n    \n    EntityFactory.builders[Types.Entities.FIREPOTION] = function(id) {\n        return new Items.FirePotion(id);\n    };\n\n    EntityFactory.builders[Types.Entities.BURGER] = function(id) {\n        return new Items.Burger(id);\n    };\n    \n    EntityFactory.builders[Types.Entities.CAKE] = function(id) {\n        return new Items.Cake(id);\n    };\n\n    EntityFactory.builders[Types.Entities.CHEST] = function(id) {\n        return new Chest(id);\n    };\n\n    //====== NPCs ======\n\n    EntityFactory.builders[Types.Entities.GUARD] = function(id) {\n        return new NPCs.Guard(id);\n    };\n\n    EntityFactory.builders[Types.Entities.KING] = function(id) {\n        return new NPCs.King(id);\n    };\n\n    EntityFactory.builders[Types.Entities.VILLAGEGIRL] = function(id) {\n        return new NPCs.VillageGirl(id);\n    };\n\n    EntityFactory.builders[Types.Entities.VILLAGER] = function(id) {\n        return new NPCs.Villager(id);\n    };\n    \n    EntityFactory.builders[Types.Entities.CODER] = function(id) {\n        return new NPCs.Coder(id);\n    };\n\n    EntityFactory.builders[Types.Entities.AGENT] = function(id) {\n        return new NPCs.Agent(id);\n    };\n\n    EntityFactory.builders[Types.Entities.RICK] = function(id) {\n        return new NPCs.Rick(id);\n    };\n\n    EntityFactory.builders[Types.Entities.SCIENTIST] = function(id) {\n        return new NPCs.Scientist(id);\n    };\n\n    EntityFactory.builders[Types.Entities.NYAN] = function(id) {\n        return new NPCs.Nyan(id);\n    };\n\n    EntityFactory.builders[Types.Entities.PRIEST] = function(id) {\n        return new NPCs.Priest(id);\n    };\n    \n    EntityFactory.builders[Types.Entities.SORCERER] = function(id) {\n        return new NPCs.Sorcerer(id);\n    };\n\n    EntityFactory.builders[Types.Entities.OCTOCAT] = function(id) {\n        return new NPCs.Octocat(id);\n    };\n    \n    EntityFactory.builders[Types.Entities.BEACHNPC] = function(id) {\n        return new NPCs.BeachNpc(id);\n    };\n    \n    EntityFactory.builders[Types.Entities.FORESTNPC] = function(id) {\n        return new NPCs.ForestNpc(id);\n    };\n    \n    EntityFactory.builders[Types.Entities.DESERTNPC] = function(id) {\n        return new NPCs.DesertNpc(id);\n    };\n    \n    EntityFactory.builders[Types.Entities.LAVANPC] = function(id) {\n        return new NPCs.LavaNpc(id);\n    };\n    \n    return EntityFactory;\n});\n"
  },
  {
    "path": "client/js/exceptions.js",
    "content": "\ndefine(function() {\n    \n    var Exceptions = {\n        \n        LootException: Class.extend({\n            init: function(message) {\n                this.message = message;\n            }\n        })\n    };\n    \n    return Exceptions;\n});"
  },
  {
    "path": "client/js/game.js",
    "content": "\ndefine(['infomanager', 'bubble', 'renderer', 'map', 'animation', 'sprite', 'tile',\n        'warrior', 'gameclient', 'audio', 'updater', 'transition', 'pathfinder',\n        'item', 'mob', 'npc', 'player', 'character', 'chest', 'mobs', 'exceptions', 'config', '../../shared/js/gametypes'],\nfunction(InfoManager, BubbleManager, Renderer, Map, Animation, Sprite, AnimatedTile,\n         Warrior, GameClient, AudioManager, Updater, Transition, Pathfinder,\n         Item, Mob, Npc, Player, Character, Chest, Mobs, Exceptions, config) {\n    \n    var Game = Class.extend({\n        init: function(app) {\n            this.app = app;\n            this.app.config = config;\n            this.ready = false;\n            this.started = false;\n            this.hasNeverStarted = true;\n        \n            this.renderer = null;\n            this.updater = null;\n            this.pathfinder = null;\n            this.chatinput = null;\n            this.bubbleManager = null;\n            this.audioManager = null;\n        \n            // Player\n            this.player = new Warrior(\"player\", \"\");\n    \n            // Game state\n            this.entities = {};\n            this.deathpositions = {};\n            this.entityGrid = null;\n            this.pathingGrid = null;\n            this.renderingGrid = null;\n            this.itemGrid = null;\n            this.currentCursor = null;\n            this.mouse = { x: 0, y: 0 };\n            this.zoningQueue = [];\n            this.previousClickPosition = {};\n    \n            this.selectedX = 0;\n            this.selectedY = 0;\n            this.selectedCellVisible = false;\n            this.targetColor = \"rgba(255, 255, 255, 0.5)\";\n            this.targetCellVisible = true;\n            this.hoveringTarget = false;\n            this.hoveringMob = false;\n            this.hoveringItem = false;\n            this.hoveringCollidingTile = false;\n        \n            // combat\n            this.infoManager = new InfoManager(this);\n        \n            // zoning\n            this.currentZoning = null;\n        \n            this.cursors = {};\n\n            this.sprites = {};\n        \n            // tile animation\n            this.animatedTiles = null;\n        \n            // debug\n            this.debugPathing = false;\n        \n            // sprites\n            this.spriteNames = [\"hand\", \"sword\", \"loot\", \"target\", \"talk\", \"sparks\", \"shadow16\", \"rat\", \"skeleton\", \"skeleton2\", \"spectre\", \"boss\", \"deathknight\", \n                                \"ogre\", \"crab\", \"snake\", \"eye\", \"bat\", \"goblin\", \"wizard\", \"guard\", \"king\", \"villagegirl\", \"villager\", \"coder\", \"agent\", \"rick\", \"scientist\", \"nyan\", \"priest\", \n                                \"sorcerer\", \"octocat\", \"beachnpc\", \"forestnpc\", \"desertnpc\", \"lavanpc\", \"clotharmor\", \"leatherarmor\", \"mailarmor\", \n                                \"platearmor\", \"redarmor\", \"goldenarmor\", \"firefox\", \"death\", \"sword1\", \"axe\", \"chest\",\n                                \"sword2\", \"redsword\", \"bluesword\", \"goldensword\", \"item-sword2\", \"item-axe\", \"item-redsword\", \"item-bluesword\", \"item-goldensword\", \"item-leatherarmor\", \"item-mailarmor\", \n                                \"item-platearmor\", \"item-redarmor\", \"item-goldenarmor\", \"item-flask\", \"item-cake\", \"item-burger\", \"morningstar\", \"item-morningstar\", \"item-firepotion\"];\n        },\n    \n        setup: function($bubbleContainer, canvas, background, foreground, input) {\n    \t\tthis.setBubbleManager(new BubbleManager($bubbleContainer));\n    \t\tthis.setRenderer(new Renderer(this, canvas, background, foreground));\n    \t\tthis.setChatInput(input);\n        },\n        \n        setStorage: function(storage) {\n            this.storage = storage;\n        },\n    \n        setRenderer: function(renderer) {\n            this.renderer = renderer;\n        },\n\n        setUpdater: function(updater) {\n            this.updater = updater;\n        },\n    \n        setPathfinder: function(pathfinder) {\n            this.pathfinder = pathfinder;\n        },\n    \n        setChatInput: function(element) {\n            this.chatinput = element;\n        },\n    \n        setBubbleManager: function(bubbleManager) {\n            this.bubbleManager = bubbleManager;\n        },\n\n        loadMap: function() {\n            var self = this;\n    \n            this.map = new Map(!this.renderer.upscaledRendering, this);\n    \n        \tthis.map.ready(function() {\n                log.info(\"Map loaded.\");\n                var tilesetIndex = self.renderer.upscaledRendering ? 0 : self.renderer.scale - 1;\n                self.renderer.setTileset(self.map.tilesets[tilesetIndex]);\n        \t});\n        },\n    \n        initPlayer: function() {\n            if(this.storage.hasAlreadyPlayed()) {\n                this.player.setSpriteName(this.storage.data.player.armor);\n                this.player.setWeaponName(this.storage.data.player.weapon);\n            }\n        \n        \tthis.player.setSprite(this.sprites[this.player.getSpriteName()]);\n        \tthis.player.idle();\n        \n    \t    log.debug(\"Finished initPlayer\");\n        },\n\n        initShadows: function() {\n            this.shadows = {};\n            this.shadows[\"small\"] = this.sprites[\"shadow16\"];\n        },\n\n        initCursors: function() {\n            this.cursors[\"hand\"] = this.sprites[\"hand\"];\n            this.cursors[\"sword\"] = this.sprites[\"sword\"];\n            this.cursors[\"loot\"] = this.sprites[\"loot\"];\n            this.cursors[\"target\"] = this.sprites[\"target\"];\n            this.cursors[\"arrow\"] = this.sprites[\"arrow\"];\n            this.cursors[\"talk\"] = this.sprites[\"talk\"];\n        },\n    \n        initAnimations: function() {\n            this.targetAnimation = new Animation(\"idle_down\", 4, 0, 16, 16);\n            this.targetAnimation.setSpeed(50);\n        \n            this.sparksAnimation = new Animation(\"idle_down\", 6, 0, 16, 16);\n            this.sparksAnimation.setSpeed(120);\n        },\n    \n        initHurtSprites: function() {\n            var self = this;\n        \n            Types.forEachArmorKind(function(kind, kindName) {\n                self.sprites[kindName].createHurtSprite();\n            });\n        },\n    \n        initSilhouettes: function() {\n            var self = this;\n\n            Types.forEachMobOrNpcKind(function(kind, kindName) {\n                self.sprites[kindName].createSilhouette();\n            });\n            self.sprites[\"chest\"].createSilhouette();\n            self.sprites[\"item-cake\"].createSilhouette();\n        },\n    \n        initAchievements: function() {\n            var self = this;\n        \n            this.achievements = {\n                A_TRUE_WARRIOR: {\n                    id: 1,\n                    name: \"A True Warrior\",\n                    desc: \"Find a new weapon\"\n                },\n                INTO_THE_WILD: {\n                    id: 2,\n                    name: \"Into the Wild\",\n                    desc: \"Venture outside the village\"\n                },\n                ANGRY_RATS: {\n                    id: 3,\n                    name: \"Angry Rats\",\n                    desc: \"Kill 10 rats\",\n                    isCompleted: function() {\n                        return self.storage.getRatCount() >= 10;\n                    }\n                },\n                SMALL_TALK: {\n                    id: 4,\n                    name: \"Small Talk\",\n                    desc: \"Talk to a non-player character\"\n                },\n                FAT_LOOT: {\n                    id: 5,\n                    name: \"Fat Loot\",\n                    desc: \"Get a new armor set\"\n                },\n                UNDERGROUND: {\n                    id: 6,\n                    name: \"Underground\",\n                    desc: \"Explore at least one cave\"\n                },\n                AT_WORLDS_END: {\n                    id: 7,\n                    name: \"At World's End\",\n                    desc: \"Reach the south shore\"\n                },\n                COWARD: {\n                    id: 8,\n                    name: \"Coward\",\n                    desc: \"Successfully escape an enemy\"\n                },\n                TOMB_RAIDER: {\n                    id: 9,\n                    name: \"Tomb Raider\",\n                    desc: \"Find the graveyard\"\n                },\n                SKULL_COLLECTOR: {\n                    id: 10,\n                    name: \"Skull Collector\",\n                    desc: \"Kill 10 skeletons\",\n                    isCompleted: function() {\n                        return self.storage.getSkeletonCount() >= 10;\n                    }\n                },\n                NINJA_LOOT: {\n                    id: 11,\n                    name: \"Ninja Loot\",\n                    desc: \"Get hold of an item you didn't fight for\"\n                },\n                NO_MANS_LAND: {\n                    id: 12,\n                    name: \"No Man's Land\",\n                    desc: \"Travel through the desert\"\n                },\n                HUNTER: {\n                    id: 13,\n                    name: \"Hunter\",\n                    desc: \"Kill 50 enemies\",\n                    isCompleted: function() {\n                        return self.storage.getTotalKills() >= 50;\n                    }\n                },\n                STILL_ALIVE: {\n                    id: 14,\n                    name: \"Still Alive\",\n                    desc: \"Revive your character five times\",\n                    isCompleted: function() {\n                        return self.storage.getTotalRevives() >= 5;\n                    }\n                },\n                MEATSHIELD: {\n                    id: 15,\n                    name: \"Meatshield\",\n                    desc: \"Take 5,000 points of damage\",\n                    isCompleted: function() {\n                        return self.storage.getTotalDamageTaken() >= 5000;\n                    }\n                },\n                HOT_SPOT: {\n                    id: 16,\n                    name: \"Hot Spot\",\n                    desc: \"Enter the volcanic mountains\"\n                },\n                HERO: {\n                    id: 17,\n                    name: \"Hero\",\n                    desc: \"Defeat the final boss\"\n                },\n                FOXY: {\n                    id: 18,\n                    name: \"Foxy\",\n                    desc: \"Find the Firefox costume\",\n                    hidden: true\n                },\n                FOR_SCIENCE: {\n                    id: 19,\n                    name: \"For Science\",\n                    desc: \"Enter into a portal\",\n                    hidden: true\n                },\n                RICKROLLD: {\n                    id: 20,\n                    name: \"Rickroll'd\",\n                    desc: \"Take some singing lessons\",\n                    hidden: true\n                }\n            };\n        \n            _.each(this.achievements, function(obj) {\n                if(!obj.isCompleted) {\n                    obj.isCompleted = function() { return true; }\n                }\n                if(!obj.hidden) {\n                    obj.hidden = false;\n                }\n            });\n        \n            this.app.initAchievementList(this.achievements);\n        \n            if(this.storage.hasAlreadyPlayed()) {\n                this.app.initUnlockedAchievements(this.storage.data.achievements.unlocked);\n            }\n        },\n    \n        getAchievementById: function(id) {\n            var found = null;\n            _.each(this.achievements, function(achievement, key) {\n                if(achievement.id === parseInt(id)) {\n                    found = achievement;\n                }\n            });\n            return found;\n        },\n    \n        loadSprite: function(name) {\n            if(this.renderer.upscaledRendering) {\n                this.spritesets[0][name] = new Sprite(name, 1);\n            } else {\n                this.spritesets[1][name] = new Sprite(name, 2);\n                if(!this.renderer.mobile && !this.renderer.tablet) {\n                    this.spritesets[2][name] = new Sprite(name, 3);\n                }\n            }\n        },\n    \n        setSpriteScale: function(scale) {\n            var self = this;\n            \n            if(this.renderer.upscaledRendering) {\n                this.sprites = this.spritesets[0];\n            } else {\n                this.sprites = this.spritesets[scale - 1];\n                \n                _.each(this.entities, function(entity) {\n                    entity.sprite = null;\n                    entity.setSprite(self.sprites[entity.getSpriteName()]);\n                });\n                this.initHurtSprites();\n                this.initShadows();\n                this.initCursors();\n            }\n        },\n    \n        loadSprites: function() {\n            log.info(\"Loading sprites...\");\n            this.spritesets = [];\n            this.spritesets[0] = {};\n            this.spritesets[1] = {};\n            this.spritesets[2] = {};\n            _.map(this.spriteNames, this.loadSprite, this);\n        },\n    \n        spritesLoaded: function() {\n            if(_.any(this.sprites, function(sprite) { return !sprite.isLoaded; })) {\n                return false;\n            }\n            return true;\n        },\n    \n        setCursor: function(name, orientation) {\n            if(name in this.cursors) {\n                this.currentCursor = this.cursors[name];\n                this.currentCursorOrientation = orientation;\n            } else {\n                log.error(\"Unknown cursor name :\"+name);\n            }\n        },\n    \n        updateCursorLogic: function() {\n            if(this.hoveringCollidingTile && this.started) {\n                this.targetColor = \"rgba(255, 50, 50, 0.5)\";\n            }\n            else {\n                this.targetColor = \"rgba(255, 255, 255, 0.5)\";\n            }\n        \n            if(this.hoveringMob && this.started) {\n                this.setCursor(\"sword\");\n                this.hoveringTarget = false;\n                this.targetCellVisible = false;\n            }\n            else if(this.hoveringNpc && this.started) {\n                this.setCursor(\"talk\");\n                this.hoveringTarget = false;\n                this.targetCellVisible = false;\n            }\n            else if((this.hoveringItem || this.hoveringChest) && this.started) {\n                this.setCursor(\"loot\");\n                this.hoveringTarget = false;\n                this.targetCellVisible = true;\n            }\n            else {\n                this.setCursor(\"hand\");\n                this.hoveringTarget = false;\n                this.targetCellVisible = true;\n            }\n        },\n    \n        focusPlayer: function() {\n            this.renderer.camera.lookAt(this.player);\n        },\n\n        addEntity: function(entity) {\n            var self = this;\n            \n            if(this.entities[entity.id] === undefined) {\n                this.entities[entity.id] = entity;\n                this.registerEntityPosition(entity);\n                \n                if(!(entity instanceof Item && entity.wasDropped)\n                && !(this.renderer.mobile || this.renderer.tablet)) {\n                    entity.fadeIn(this.currentTime);\n                }\n                \n                if(this.renderer.mobile || this.renderer.tablet) {\n                    entity.onDirty(function(e) {\n                        if(self.camera.isVisible(e)) {\n                            e.dirtyRect = self.renderer.getEntityBoundingRect(e);\n                            self.checkOtherDirtyRects(e.dirtyRect, e, e.gridX, e.gridY);\n                        }\n                    });\n                }\n            }\n            else {\n                log.error(\"This entity already exists : \" + entity.id + \" (\"+entity.kind+\")\");\n            }\n        },\n\n        removeEntity: function(entity) {\n            if(entity.id in this.entities) {\n                this.unregisterEntityPosition(entity);\n                delete this.entities[entity.id];\n            }\n            else {\n                log.error(\"Cannot remove entity. Unknown ID : \" + entity.id);\n            }\n        },\n    \n        addItem: function(item, x, y) {\n            item.setSprite(this.sprites[item.getSpriteName()]);\n            item.setGridPosition(x, y);\n            item.setAnimation(\"idle\", 150);\n            this.addEntity(item);\n        },\n    \n        removeItem: function(item) {\n            if(item) {\n                this.removeFromItemGrid(item, item.gridX, item.gridY);\n                this.removeFromRenderingGrid(item, item.gridX, item.gridY);\n                delete this.entities[item.id];\n            } else {\n                log.error(\"Cannot remove item. Unknown ID : \" + item.id);\n            }\n        },\n    \n        initPathingGrid: function() {\n            this.pathingGrid = [];\n            for(var i=0; i < this.map.height; i += 1) {\n                this.pathingGrid[i] = [];\n                for(var j=0; j < this.map.width; j += 1) {\n                    this.pathingGrid[i][j] = this.map.grid[i][j];\n                }\n            }\n            log.info(\"Initialized the pathing grid with static colliding cells.\");\n        },\n    \n        initEntityGrid: function() {\n            this.entityGrid = [];\n            for(var i=0; i < this.map.height; i += 1) {\n                this.entityGrid[i] = [];\n                for(var j=0; j < this.map.width; j += 1) {\n                    this.entityGrid[i][j] = {};\n                }\n            }\n            log.info(\"Initialized the entity grid.\");\n        },\n    \n        initRenderingGrid: function() {\n            this.renderingGrid = [];\n            for(var i=0; i < this.map.height; i += 1) {\n                this.renderingGrid[i] = [];\n                for(var j=0; j < this.map.width; j += 1) {\n                    this.renderingGrid[i][j] = {};\n                }\n            }\n            log.info(\"Initialized the rendering grid.\");\n        },\n    \n        initItemGrid: function() {\n            this.itemGrid = [];\n            for(var i=0; i < this.map.height; i += 1) {\n                this.itemGrid[i] = [];\n                for(var j=0; j < this.map.width; j += 1) {\n                    this.itemGrid[i][j] = {};\n                }\n            }\n            log.info(\"Initialized the item grid.\");\n        },\n    \n        /**\n         * \n         */\n        initAnimatedTiles: function() {\n            var self = this,\n                m = this.map;\n\n            this.animatedTiles = [];\n            this.forEachVisibleTile(function (id, index) {\n                if(m.isAnimatedTile(id)) {\n                    var tile = new AnimatedTile(id, m.getTileAnimationLength(id), m.getTileAnimationDelay(id), index),\n                        pos = self.map.tileIndexToGridPosition(tile.index);\n                    \n                    tile.x = pos.x;\n                    tile.y = pos.y;\n                    self.animatedTiles.push(tile);\n                }\n            }, 1);\n            //log.info(\"Initialized animated tiles.\");\n        },\n    \n        addToRenderingGrid: function(entity, x, y) {\n            if(!this.map.isOutOfBounds(x, y)) {\n                this.renderingGrid[y][x][entity.id] = entity;\n            }\n        },\n    \n        removeFromRenderingGrid: function(entity, x, y) {\n            if(entity && this.renderingGrid[y][x] && entity.id in this.renderingGrid[y][x]) {\n                delete this.renderingGrid[y][x][entity.id];\n            }\n        },\n    \n        removeFromEntityGrid: function(entity, x, y) {\n            if(this.entityGrid[y][x][entity.id]) {\n                delete this.entityGrid[y][x][entity.id];\n            }\n        },\n        \n        removeFromItemGrid: function(item, x, y) {\n            if(item && this.itemGrid[y][x][item.id]) {\n                delete this.itemGrid[y][x][item.id];\n            }\n        },\n    \n        removeFromPathingGrid: function(x, y) {\n            this.pathingGrid[y][x] = 0;\n        },\n    \n        /**\n         * Registers the entity at two adjacent positions on the grid at the same time.\n         * This situation is temporary and should only occur when the entity is moving.\n         * This is useful for the hit testing algorithm used when hovering entities with the mouse cursor.\n         *\n         * @param {Entity} entity The moving entity\n         */\n        registerEntityDualPosition: function(entity) {\n            if(entity) {\n                this.entityGrid[entity.gridY][entity.gridX][entity.id] = entity;\n            \n                this.addToRenderingGrid(entity, entity.gridX, entity.gridY);\n            \n                if(entity.nextGridX >= 0 && entity.nextGridY >= 0) {\n                    this.entityGrid[entity.nextGridY][entity.nextGridX][entity.id] = entity;\n                    if(!(entity instanceof Player)) {\n                        this.pathingGrid[entity.nextGridY][entity.nextGridX] = 1;\n                    }\n                }\n            }\n        },\n    \n        /**\n         * Clears the position(s) of this entity in the entity grid.\n         *\n         * @param {Entity} entity The moving entity\n         */\n        unregisterEntityPosition: function(entity) {\n            if(entity) {\n                this.removeFromEntityGrid(entity, entity.gridX, entity.gridY);\n                this.removeFromPathingGrid(entity.gridX, entity.gridY);\n            \n                this.removeFromRenderingGrid(entity, entity.gridX, entity.gridY);\n            \n                if(entity.nextGridX >= 0 && entity.nextGridY >= 0) {\n                    this.removeFromEntityGrid(entity, entity.nextGridX, entity.nextGridY);\n                    this.removeFromPathingGrid(entity.nextGridX, entity.nextGridY);\n                }\n            }\n        },\n    \n        registerEntityPosition: function(entity) {\n            var x = entity.gridX,\n                y = entity.gridY;\n        \n            if(entity) {\n                if(entity instanceof Character || entity instanceof Chest) {\n                    this.entityGrid[y][x][entity.id] = entity;\n                    if(!(entity instanceof Player)) {\n                        this.pathingGrid[y][x] = 1;\n                    }\n                }\n                if(entity instanceof Item) {\n                    this.itemGrid[y][x][entity.id] = entity;\n                }\n            \n                this.addToRenderingGrid(entity, x, y);\n            }\n        },\n    \n        setServerOptions: function(host, port, username) {\n            this.host = host;\n            this.port = port;\n            this.username = username;\n        },\n    \n        loadAudio: function() {\n            this.audioManager = new AudioManager(this);\n        },\n    \n        initMusicAreas: function() {\n            var self = this;\n            _.each(this.map.musicAreas, function(area) {\n                self.audioManager.addArea(area.x, area.y, area.w, area.h, area.id);\n            });\n        },\n\n        run: function(started_callback) {\n            var self = this;\n        \n            this.loadSprites();\n            this.setUpdater(new Updater(this));\n            this.camera = this.renderer.camera;\n        \n            this.setSpriteScale(this.renderer.scale);\n        \n        \tvar wait = setInterval(function() {\n                if(self.map.isLoaded && self.spritesLoaded()) {\n                    self.ready = true;\n                    log.debug('All sprites loaded.');\n                            \n                    self.loadAudio();\n                    \n                    self.initMusicAreas();\n                    self.initAchievements();\n                    self.initCursors();\n                    self.initAnimations();\n                    self.initShadows();\n                    self.initHurtSprites();\n                \n                    if(!self.renderer.mobile\n                    && !self.renderer.tablet \n                    && self.renderer.upscaledRendering) {\n                        self.initSilhouettes();\n                    }\n            \n                    self.initEntityGrid();\n                    self.initItemGrid();\n                    self.initPathingGrid();\n                    self.initRenderingGrid();\n                \n                    self.setPathfinder(new Pathfinder(self.map.width, self.map.height));\n            \n                    self.initPlayer();\n                    self.setCursor(\"hand\");\n                    \n                    self.connect(started_callback);\n                \n                    clearInterval(wait);\n                }\n        \t}, 100);\n        },\n    \n        tick: function() {\n            this.currentTime = new Date().getTime();\n\n            if(this.started) {\n                this.updateCursorLogic();\n                this.updater.update();\n                this.renderer.renderFrame();\n            }\n\n            if(!this.isStopped) {\n                requestAnimFrame(this.tick.bind(this));\n            }\n        },\n\n        start: function() {\n            this.tick();\n            this.hasNeverStarted = false;\n            log.info(\"Game loop started.\");\n        },\n\n        stop: function() {\n            log.info(\"Game stopped.\");\n            this.isStopped = true;\n        },\n    \n        entityIdExists: function(id) {\n            return id in this.entities;\n        },\n\n        getEntityById: function(id) {\n            if(id in this.entities) {\n                return this.entities[id];\n            }\n            else {\n                log.error(\"Unknown entity id : \" + id, true);\n            }\n        },\n\n        connect: function(started_callback) {\n            var self = this,\n                connecting = false; // always in dispatcher mode in the build version\n    \n            this.client = new GameClient(this.host, this.port);\n            \n            //>>excludeStart(\"prodHost\", pragmas.prodHost);\n            var config = this.app.config.local || this.app.config.dev;\n            if(config) {\n                this.client.connect(config.dispatcher); // false if the client connects directly to a game server\n                connecting = true;\n            }\n            //>>excludeEnd(\"prodHost\");\n            \n            //>>includeStart(\"prodHost\", pragmas.prodHost);\n            if(!connecting) {\n                this.client.connect(true); // always use the dispatcher in production\n            }\n            //>>includeEnd(\"prodHost\");\n            \n            this.client.onDispatched(function(host, port) {\n                log.debug(\"Dispatched to game server \"+host+ \":\"+port);\n                \n                self.client.host = host;\n                self.client.port = port;\n                self.client.connect(); // connect to actual game server\n            });\n            \n            this.client.onConnected(function() {\n                log.info(\"Starting client/server handshake\");\n                \n                self.player.name = self.username;\n                self.started = true;\n            \n                self.sendHello(self.player);\n            });\n        \n            this.client.onEntityList(function(list) {\n                var entityIds = _.pluck(self.entities, 'id'),\n                    knownIds = _.intersection(entityIds, list),\n                    newIds = _.difference(list, knownIds);\n            \n                self.obsoleteEntities = _.reject(self.entities, function(entity) {\n                    return _.include(knownIds, entity.id) || entity.id === self.player.id;\n                });\n            \n                // Destroy entities outside of the player's zone group\n                self.removeObsoleteEntities();\n                \n                // Ask the server for spawn information about unknown entities\n                if(_.size(newIds) > 0) {\n                    self.client.sendWho(newIds);\n                }\n            });\n        \n            this.client.onWelcome(function(id, name, x, y, hp) {\n                log.info(\"Received player ID from server : \"+ id);\n                self.player.id = id;\n                self.playerId = id;\n                // Always accept name received from the server which will\n                // sanitize and shorten names exceeding the allowed length.\n                self.player.name = name;\n                self.player.setGridPosition(x, y);\n                self.player.setMaxHitPoints(hp);\n            \n                self.updateBars();\n                self.resetCamera();\n                self.updatePlateauMode();\n                self.audioManager.updateMusic();\n            \n                self.addEntity(self.player);\n                self.player.dirtyRect = self.renderer.getEntityBoundingRect(self.player);\n\n                setTimeout(function() {\n                    self.tryUnlockingAchievement(\"STILL_ALIVE\");\n                }, 1500);\n            \n                if(!self.storage.hasAlreadyPlayed()) {\n                    self.storage.initPlayer(self.player.name);\n                    self.storage.savePlayer(self.renderer.getPlayerImage(),\n                                            self.player.getSpriteName(),\n                                            self.player.getWeaponName());\n                    self.showNotification(\"Welcome to BrowserQuest!\");\n                } else {\n                    self.showNotification(\"Welcome back to BrowserQuest!\");\n                    self.storage.setPlayerName(name);\n                }\n        \n                self.player.onStartPathing(function(path) {\n                    var i = path.length - 1,\n                        x =  path[i][0],\n                        y =  path[i][1];\n                \n                    if(self.player.isMovingToLoot()) {\n                        self.player.isLootMoving = false;\n                    }\n                    else if(!self.player.isAttacking()) {\n                        self.client.sendMove(x, y);\n                    }\n                \n                    // Target cursor position\n                    self.selectedX = x;\n                    self.selectedY = y;\n                    self.selectedCellVisible = true;\n\n                    if(self.renderer.mobile || self.renderer.tablet) {\n        \t            self.drawTarget = true;\n        \t            self.clearTarget = true;\n        \t            self.renderer.targetRect = self.renderer.getTargetBoundingRect();\n        \t            self.checkOtherDirtyRects(self.renderer.targetRect, null, self.selectedX, self.selectedY);\n        \t        }\n                });\n                \n                self.player.onCheckAggro(function() {\n                    self.forEachMob(function(mob) {\n                        if(mob.isAggressive && !mob.isAttacking() && self.player.isNear(mob, mob.aggroRange)) {\n                            self.player.aggro(mob);\n                        }\n                    });\n                });\n            \n                self.player.onAggro(function(mob) {\n                    if(!mob.isWaitingToAttack(self.player) && !self.player.isAttackedBy(mob)) {\n                        self.player.log_info(\"Aggroed by \" + mob.id + \" at (\"+self.player.gridX+\", \"+self.player.gridY+\")\");\n                        self.client.sendAggro(mob);\n                        mob.waitToAttack(self.player);\n                    }\n                });\n\n                self.player.onBeforeStep(function() {\n                    var blockingEntity = self.getEntityAt(self.player.nextGridX, self.player.nextGridY);\n                    if(blockingEntity && blockingEntity.id !== self.playerId) {\n                        log.debug(\"Blocked by \" + blockingEntity.id);\n                    }\n                    self.unregisterEntityPosition(self.player);\n                });\n            \n                self.player.onStep(function() {\n                    if(self.player.hasNextStep()) {\n                        self.registerEntityDualPosition(self.player);\n                    }\n                \n                    if(self.isZoningTile(self.player.gridX, self.player.gridY)) {\n                        self.enqueueZoningFrom(self.player.gridX, self.player.gridY);\n                    }\n                \n                    self.player.forEachAttacker(function(attacker) {\n                        if(attacker.isAdjacent(attacker.target)) {\n                            attacker.lookAtTarget();\n                        } else {\n                            attacker.follow(self.player);\n                        }\n                    });\n                \n                    if((self.player.gridX <= 85 && self.player.gridY <= 179 && self.player.gridY > 178) || (self.player.gridX <= 85 && self.player.gridY <= 266 && self.player.gridY > 265)) {\n                        self.tryUnlockingAchievement(\"INTO_THE_WILD\");\n                    }\n                    \n                    if(self.player.gridX <= 85 && self.player.gridY <= 293 && self.player.gridY > 292) {\n                        self.tryUnlockingAchievement(\"AT_WORLDS_END\");\n                    }\n                    \n                    if(self.player.gridX <= 85 && self.player.gridY <= 100 && self.player.gridY > 99) {\n                        self.tryUnlockingAchievement(\"NO_MANS_LAND\");\n                    }\n                    \n                    if(self.player.gridX <= 85 && self.player.gridY <= 51 && self.player.gridY > 50) {\n                        self.tryUnlockingAchievement(\"HOT_SPOT\");\n                    }\n                    \n                    if(self.player.gridX <= 27 && self.player.gridY <= 123 && self.player.gridY > 112) {\n                        self.tryUnlockingAchievement(\"TOMB_RAIDER\");\n                    }\n                \n                    self.updatePlayerCheckpoint();\n                \n                    if(!self.player.isDead) {\n                        self.audioManager.updateMusic();\n                    }\n                });\n            \n                self.player.onStopPathing(function(x, y) {\n                    if(self.player.hasTarget()) {\n                        self.player.lookAtTarget();\n                    }\n                \n                    self.selectedCellVisible = false;\n                \n                    if(self.isItemAt(x, y)) {\n                        var item = self.getItemAt(x, y);\n                    \n                        try {\n                            self.player.loot(item);\n                            self.client.sendLoot(item); // Notify the server that this item has been looted\n                            self.removeItem(item);\n                            self.showNotification(item.getLootMessage());\n                        \n                            if(item.type === \"armor\") {\n                                self.tryUnlockingAchievement(\"FAT_LOOT\");\n                            }\n                            \n                            if(item.type === \"weapon\") {\n                                self.tryUnlockingAchievement(\"A_TRUE_WARRIOR\");\n                            }\n\n                            if(item.kind === Types.Entities.CAKE) {\n                                self.tryUnlockingAchievement(\"FOR_SCIENCE\");\n                            }\n                            \n                            if(item.kind === Types.Entities.FIREPOTION) {\n                                self.tryUnlockingAchievement(\"FOXY\");\n                                self.audioManager.playSound(\"firefox\");\n                            }\n                        \n                            if(Types.isHealingItem(item.kind)) {\n                                self.audioManager.playSound(\"heal\");\n                            } else {\n                                self.audioManager.playSound(\"loot\");\n                            }\n                            \n                            if(item.wasDropped && !_(item.playersInvolved).include(self.playerId)) {\n                                self.tryUnlockingAchievement(\"NINJA_LOOT\");\n                            }\n                        } catch(e) {\n                            if(e instanceof Exceptions.LootException) {\n                                self.showNotification(e.message);\n                                self.audioManager.playSound(\"noloot\");\n                            } else {\n                                throw e;\n                            }\n                        }\n                    }\n                \n                    if(!self.player.hasTarget() && self.map.isDoor(x, y)) {\n                        var dest = self.map.getDoorDestination(x, y);\n                    \n                        self.player.setGridPosition(dest.x, dest.y);\n                        self.player.nextGridX = dest.x;\n                        self.player.nextGridY = dest.y;\n                        self.player.turnTo(dest.orientation);\n                        self.client.sendTeleport(dest.x, dest.y);\n                        \n                        if(self.renderer.mobile && dest.cameraX && dest.cameraY) {\n                            self.camera.setGridPosition(dest.cameraX, dest.cameraY);\n                            self.resetZone();\n                        } else {\n                            if(dest.portal) {\n                                self.assignBubbleTo(self.player);\n                            } else {\n                                self.camera.focusEntity(self.player);\n                                self.resetZone();\n                            }\n                        }\n                        \n                        if(_.size(self.player.attackers) > 0) {\n                            setTimeout(function() { self.tryUnlockingAchievement(\"COWARD\"); }, 500);\n                        }\n                        self.player.forEachAttacker(function(attacker) {\n                            attacker.disengage();\n                            attacker.idle();\n                        });\n                    \n                        self.updatePlateauMode();\n                        \n                        self.checkUndergroundAchievement();\n                        \n                        if(self.renderer.mobile || self.renderer.tablet) {\n                            // When rendering with dirty rects, clear the whole screen when entering a door.\n                            self.renderer.clearScreen(self.renderer.context);\n                        }\n                        \n                        if(dest.portal) {\n                            self.audioManager.playSound(\"teleport\");\n                        }\n                        \n                        if(!self.player.isDead) {\n                            self.audioManager.updateMusic();\n                        }\n                    }\n                \n                    if(self.player.target instanceof Npc) {\n                        self.makeNpcTalk(self.player.target);\n                    } else if(self.player.target instanceof Chest) {\n                        self.client.sendOpen(self.player.target);\n                        self.audioManager.playSound(\"chest\");\n                    }\n                    \n                    self.player.forEachAttacker(function(attacker) {\n                        if(!attacker.isAdjacentNonDiagonal(self.player)) {\n                            attacker.follow(self.player);\n                        }\n                    });\n                \n                    self.unregisterEntityPosition(self.player);\n                    self.registerEntityPosition(self.player);\n                });\n            \n                self.player.onRequestPath(function(x, y) {\n                    var ignored = [self.player]; // Always ignore self\n                \n                    if(self.player.hasTarget()) {\n                        ignored.push(self.player.target);\n                    }\n                    return self.findPath(self.player, x, y, ignored);\n                });\n            \n                self.player.onDeath(function() {\n                    log.info(self.playerId + \" is dead\");\n                \n                    self.player.stopBlinking();\n                    self.player.setSprite(self.sprites[\"death\"]);\n                    self.player.animate(\"death\", 120, 1, function() {\n                        log.info(self.playerId + \" was removed\");\n                    \n                        self.removeEntity(self.player);\n                        self.removeFromRenderingGrid(self.player, self.player.gridX, self.player.gridY);\n                    \n                        self.player = null;\n                        self.client.disable();\n                    \n                        setTimeout(function() {\n                            self.playerdeath_callback();\n                        }, 1000);\n                    });\n                \n                    self.player.forEachAttacker(function(attacker) {\n                        attacker.disengage();\n                        attacker.idle();\n                    });\n                \n                    self.audioManager.fadeOutCurrentMusic();\n                    self.audioManager.playSound(\"death\");\n                });\n            \n                self.player.onHasMoved(function(player) {\n                    self.assignBubbleTo(player);\n                });\n                \n                self.player.onArmorLoot(function(armorName) {\n                    self.player.switchArmor(self.sprites[armorName]);\n                });\n            \n                self.player.onSwitchItem(function() {\n                    self.storage.savePlayer(self.renderer.getPlayerImage(),\n                                            self.player.getArmorName(),\n                                            self.player.getWeaponName());\n                    if(self.equipment_callback) {\n                        self.equipment_callback();\n                    }\n                });\n                \n                self.player.onInvincible(function() {\n                    self.invincible_callback();\n                    self.player.switchArmor(self.sprites[\"firefox\"]);\n                });\n            \n                self.client.onSpawnItem(function(item, x, y) {\n                    log.info(\"Spawned \" + Types.getKindAsString(item.kind) + \" (\" + item.id + \") at \"+x+\", \"+y);\n                    self.addItem(item, x, y);\n                });\n            \n                self.client.onSpawnChest(function(chest, x, y) {\n                    log.info(\"Spawned chest (\" + chest.id + \") at \"+x+\", \"+y);\n                    chest.setSprite(self.sprites[chest.getSpriteName()]);\n                    chest.setGridPosition(x, y);\n                    chest.setAnimation(\"idle_down\", 150);\n                    self.addEntity(chest, x, y);\n                \n                    chest.onOpen(function() {\n                        chest.stopBlinking();\n                        chest.setSprite(self.sprites[\"death\"]);\n                        chest.setAnimation(\"death\", 120, 1, function() {\n                            log.info(chest.id + \" was removed\");\n                            self.removeEntity(chest);\n                            self.removeFromRenderingGrid(chest, chest.gridX, chest.gridY);\n                            self.previousClickPosition = {};\n                        });\n                    });\n                });\n            \n                self.client.onSpawnCharacter(function(entity, x, y, orientation, targetId) {\n                    if(!self.entityIdExists(entity.id)) {\n                        try {\n                            if(entity.id !== self.playerId) {\n                                entity.setSprite(self.sprites[entity.getSpriteName()]);\n                                entity.setGridPosition(x, y);\n                                entity.setOrientation(orientation);\n                                entity.idle();\n\n                                self.addEntity(entity);\n                        \n                                log.debug(\"Spawned \" + Types.getKindAsString(entity.kind) + \" (\" + entity.id + \") at \"+entity.gridX+\", \"+entity.gridY);\n                        \n                                if(entity instanceof Character) {\n                                    entity.onBeforeStep(function() {\n                                        self.unregisterEntityPosition(entity);\n                                    });\n\n                                    entity.onStep(function() {\n                                        if(!entity.isDying) {\n                                            self.registerEntityDualPosition(entity);\n\n                                            entity.forEachAttacker(function(attacker) {\n                                                if(attacker.isAdjacent(attacker.target)) {\n                                                    attacker.lookAtTarget();\n                                                } else {\n                                                    attacker.follow(entity);\n                                                }\n                                            });\n                                        }\n                                    });\n\n                                    entity.onStopPathing(function(x, y) {\n                                        if(!entity.isDying) {\n                                            if(entity.hasTarget() && entity.isAdjacent(entity.target)) {\n                                                entity.lookAtTarget();\n                                            }\n                                \n                                            if(entity instanceof Player) {\n                                                var gridX = entity.destination.gridX,\n                                                    gridY = entity.destination.gridY;\n\n                                                if(self.map.isDoor(gridX, gridY)) {\n                                                    var dest = self.map.getDoorDestination(gridX, gridY);\n                                                    entity.setGridPosition(dest.x, dest.y);\n                                                }\n                                            }\n                                        \n                                            entity.forEachAttacker(function(attacker) {\n                                                if(!attacker.isAdjacentNonDiagonal(entity) && attacker.id !== self.playerId) {\n                                                    attacker.follow(entity);\n                                                }\n                                            });\n                                \n                                            self.unregisterEntityPosition(entity);\n                                            self.registerEntityPosition(entity);\n                                        }\n                                    });\n\n                                    entity.onRequestPath(function(x, y) {\n                                        var ignored = [entity], // Always ignore self\n                                            ignoreTarget = function(target) {\n                                                ignored.push(target);\n\n                                                // also ignore other attackers of the target entity\n                                                target.forEachAttacker(function(attacker) {\n                                                    ignored.push(attacker);\n                                                });\n                                            };\n                                        \n                                        if(entity.hasTarget()) {\n                                            ignoreTarget(entity.target);\n                                        } else if(entity.previousTarget) {\n                                            // If repositioning before attacking again, ignore previous target\n                                            // See: tryMovingToADifferentTile()\n                                            ignoreTarget(entity.previousTarget);\n                                        }\n                                        \n                                        return self.findPath(entity, x, y, ignored);\n                                    });\n\n                                    entity.onDeath(function() {\n                                        log.info(entity.id + \" is dead\");\n                                \n                                        if(entity instanceof Mob) {\n                                            // Keep track of where mobs die in order to spawn their dropped items\n                                            // at the right position later.\n                                            self.deathpositions[entity.id] = {x: entity.gridX, y: entity.gridY};\n                                        }\n\n                                        entity.isDying = true;\n                                        entity.setSprite(self.sprites[entity instanceof Mobs.Rat ? \"rat\" : \"death\"]);\n                                        entity.animate(\"death\", 120, 1, function() {\n                                            log.info(entity.id + \" was removed\");\n\n                                            self.removeEntity(entity);\n                                            self.removeFromRenderingGrid(entity, entity.gridX, entity.gridY);\n                                        });\n\n                                        entity.forEachAttacker(function(attacker) {\n                                            attacker.disengage();\n                                        });\n                                        \n                                        if(self.player.target && self.player.target.id === entity.id) {\n                                            self.player.disengage();\n                                        }\n                                    \n                                        // Upon death, this entity is removed from both grids, allowing the player\n                                        // to click very fast in order to loot the dropped item and not be blocked.\n                                        // The entity is completely removed only after the death animation has ended.\n                                        self.removeFromEntityGrid(entity, entity.gridX, entity.gridY);\n                                        self.removeFromPathingGrid(entity.gridX, entity.gridY);\n                                    \n                                        if(self.camera.isVisible(entity)) {\n                                            self.audioManager.playSound(\"kill\"+Math.floor(Math.random()*2+1));\n                                        }\n                                    \n                                        self.updateCursor();\n                                    });\n\n                                    entity.onHasMoved(function(entity) {\n                                        self.assignBubbleTo(entity); // Make chat bubbles follow moving entities\n                                    });\n\n                                    if(entity instanceof Mob) {\n                                        if(targetId) {\n                                            var player = self.getEntityById(targetId);\n                                            if(player) {\n                                                self.createAttackLink(entity, player);\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                        catch(e) {\n                            log.error(e);\n                        }\n                    } else {\n                        log.debug(\"Character \"+entity.id+\" already exists. Don't respawn.\");\n                    }\n                });\n\n                self.client.onDespawnEntity(function(entityId) {\n                    var entity = self.getEntityById(entityId);\n            \n                    if(entity) {\n                        log.info(\"Despawning \" + Types.getKindAsString(entity.kind) + \" (\" + entity.id+ \")\");\n                        \n                        if(entity.gridX === self.previousClickPosition.x\n                        && entity.gridY === self.previousClickPosition.y) {\n                            self.previousClickPosition = {};\n                        }\n                        \n                        if(entity instanceof Item) {\n                            self.removeItem(entity);\n                        } else if(entity instanceof Character) {\n                            entity.forEachAttacker(function(attacker) {\n                                if(attacker.canReachTarget()) {\n                                    attacker.hit();\n                    \t        }\n                            });\n                            entity.die();\n                        } else if(entity instanceof Chest) {\n                            entity.open();\n                        }\n                        \n                        entity.clean();\n                    }\n                });\n            \n                self.client.onItemBlink(function(id) {\n                    var item = self.getEntityById(id);\n\n                    if(item) {\n                        item.blink(150);\n                    }\n                });\n\n                self.client.onEntityMove(function(id, x, y) {\n                    var entity = null;\n\n                    if(id !== self.playerId) {\n                        entity = self.getEntityById(id);\n                \n                        if(entity) {\n                            if(self.player.isAttackedBy(entity)) {\n                                self.tryUnlockingAchievement(\"COWARD\");\n                            }\n                            entity.disengage();\n                            entity.idle();\n                            self.makeCharacterGoTo(entity, x, y);\n                        }\n                    }\n                });\n            \n                self.client.onEntityDestroy(function(id) {\n                    var entity = self.getEntityById(id);\n                    if(entity) {\n                        if(entity instanceof Item) {\n                            self.removeItem(entity);\n                        } else {\n                            self.removeEntity(entity);\n                        }\n                        log.debug(\"Entity was destroyed: \"+entity.id);\n                    }\n                });\n            \n                self.client.onPlayerMoveToItem(function(playerId, itemId) {\n                    var player, item;\n\n                    if(playerId !== self.playerId) {\n                        player = self.getEntityById(playerId);\n                        item = self.getEntityById(itemId);\n                \n                        if(player && item) {\n                            self.makeCharacterGoTo(player, item.gridX, item.gridY);\n                        }\n                    }\n                });\n            \n                self.client.onEntityAttack(function(attackerId, targetId) {\n                    var attacker = self.getEntityById(attackerId),\n                        target = self.getEntityById(targetId);\n                \n                    if(attacker && target && attacker.id !== self.playerId) {\n                        log.debug(attacker.id + \" attacks \" + target.id);\n                        \n                        if(attacker && target instanceof Player && target.id !== self.playerId && target.target && target.target.id === attacker.id && attacker.getDistanceToEntity(target) < 3) {\n                            setTimeout(function() {\n                                self.createAttackLink(attacker, target);\n                            }, 200); // delay to prevent other players attacking mobs from ending up on the same tile as they walk towards each other.\n                        } else {\n                            self.createAttackLink(attacker, target);\n                        }\n                    }\n                });\n            \n                self.client.onPlayerDamageMob(function(mobId, points) {\n                    var mob = self.getEntityById(mobId);\n                    if(mob && points) {\n                        self.infoManager.addDamageInfo(points, mob.x, mob.y - 15, \"inflicted\");\n                    }\n                });\n            \n                self.client.onPlayerKillMob(function(kind) {\n                    var mobName = Types.getKindAsString(kind);\n                    \n                    if(mobName === 'skeleton2') {\n                        mobName = 'greater skeleton';\n                    }\n                    \n                    if(mobName === 'eye') {\n                        mobName = 'evil eye';\n                    }\n                    \n                    if(mobName === 'deathknight') {\n                        mobName = 'death knight';\n                    }\n                    \n                    if(mobName === 'boss') {\n                        self.showNotification(\"You killed the skeleton king\");\n                    } else {\n                        if(_.include(['a', 'e', 'i', 'o', 'u'], mobName[0])) {\n                            self.showNotification(\"You killed an \" + mobName);\n                        } else {\n                            self.showNotification(\"You killed a \" + mobName);\n                        }\n                    }\n                    \n                    self.storage.incrementTotalKills();\n                    self.tryUnlockingAchievement(\"HUNTER\");\n\n                    if(kind === Types.Entities.RAT) {\n                        self.storage.incrementRatCount();\n                        self.tryUnlockingAchievement(\"ANGRY_RATS\");\n                    }\n                    \n                    if(kind === Types.Entities.SKELETON || kind === Types.Entities.SKELETON2) {\n                        self.storage.incrementSkeletonCount();\n                        self.tryUnlockingAchievement(\"SKULL_COLLECTOR\");\n                    }\n\n                    if(kind === Types.Entities.BOSS) {\n                        self.tryUnlockingAchievement(\"HERO\");\n                    }\n                });\n            \n                self.client.onPlayerChangeHealth(function(points, isRegen) {\n                    var player = self.player,\n                        diff,\n                        isHurt;\n                \n                    if(player && !player.isDead && !player.invincible) {\n                        isHurt = points <= player.hitPoints;\n                        diff = points - player.hitPoints;\n                        player.hitPoints = points;\n\n                        if(player.hitPoints <= 0) {\n                            player.die();\n                        }\n                        if(isHurt) {\n                            player.hurt();\n                            self.infoManager.addDamageInfo(diff, player.x, player.y - 15, \"received\");\n                            self.audioManager.playSound(\"hurt\");\n                            self.storage.addDamage(-diff);\n                            self.tryUnlockingAchievement(\"MEATSHIELD\");\n                            if(self.playerhurt_callback) {\n                                self.playerhurt_callback();\n                            }\n                        } else if(!isRegen){\n                            self.infoManager.addDamageInfo(\"+\"+diff, player.x, player.y - 15, \"healed\");\n                        }\n                        self.updateBars();\n                    }\n                });\n            \n                self.client.onPlayerChangeMaxHitPoints(function(hp) {\n                    self.player.maxHitPoints = hp;\n                    self.player.hitPoints = hp;\n                    self.updateBars();\n                });\n            \n                self.client.onPlayerEquipItem(function(playerId, itemKind) {\n                    var player = self.getEntityById(playerId),\n                        itemName = Types.getKindAsString(itemKind);\n                \n                    if(player) {\n                        if(Types.isArmor(itemKind)) {\n                            player.setSprite(self.sprites[itemName]);\n                        } else if(Types.isWeapon(itemKind)) {\n                            player.setWeaponName(itemName);\n                        }\n                    }\n                });\n            \n                self.client.onPlayerTeleport(function(id, x, y) {\n                    var entity = null,\n                        currentOrientation;\n\n                    if(id !== self.playerId) {\n                        entity = self.getEntityById(id);\n                \n                        if(entity) {\n                            currentOrientation = entity.orientation;\n                        \n                            self.makeCharacterTeleportTo(entity, x, y);\n                            entity.setOrientation(currentOrientation);\n                        \n                            entity.forEachAttacker(function(attacker) {\n                                attacker.disengage();\n                                attacker.idle();\n                                attacker.stop();\n                            });\n                        }\n                    }\n                });\n            \n                self.client.onDropItem(function(item, mobId) {\n                    var pos = self.getDeadMobPosition(mobId);\n                \n                    if(pos) {\n                        self.addItem(item, pos.x, pos.y);\n                        self.updateCursor();\n                    }\n                });\n            \n                self.client.onChatMessage(function(entityId, message) {\n                    var entity = self.getEntityById(entityId);\n                    self.createBubble(entityId, message);\n                    self.assignBubbleTo(entity);\n                    self.audioManager.playSound(\"chat\");\n                });\n            \n                self.client.onPopulationChange(function(worldPlayers, totalPlayers) {\n                    if(self.nbplayers_callback) {\n                        self.nbplayers_callback(worldPlayers, totalPlayers);\n                    }\n                });\n                \n                self.client.onDisconnected(function(message) {\n                    if(self.player) {\n                        self.player.die();\n                    }\n                    if(self.disconnect_callback) {\n                        self.disconnect_callback(message);\n                    }\n                });\n            \n                self.gamestart_callback();\n            \n                if(self.hasNeverStarted) {\n                    self.start();\n                    started_callback();\n                }\n            });\n        },\n\n        /**\n         * Links two entities in an attacker<-->target relationship.\n         * This is just a utility method to wrap a set of instructions.\n         *\n         * @param {Entity} attacker The attacker entity\n         * @param {Entity} target The target entity\n         */\n        createAttackLink: function(attacker, target) {\n            if(attacker.hasTarget()) {\n                attacker.removeTarget();\n            }\n            attacker.engage(target);\n            \n            if(attacker.id !== this.playerId) {\n                target.addAttacker(attacker);\n            }\n        },\n\n        /**\n         * Sends a \"hello\" message to the server, as a way of initiating the player connection handshake.\n         * @see GameClient.sendHello\n         */\n        sendHello: function() {\n            this.client.sendHello(this.player);\n        },\n\n        /**\n         * Converts the current mouse position on the screen to world grid coordinates.\n         * @returns {Object} An object containing x and y properties.\n         */\n        getMouseGridPosition: function() {\n            var mx = this.mouse.x,\n                my = this.mouse.y,\n                c = this.renderer.camera,\n                s = this.renderer.scale,\n                ts = this.renderer.tilesize,\n                offsetX = mx % (ts * s),\n                offsetY = my % (ts * s),\n                x = ((mx - offsetX) / (ts * s)) + c.gridX,\n                y = ((my - offsetY) / (ts * s)) + c.gridY;\n        \n                return { x: x, y: y };\n        },\n    \n        /**\n         * Moves a character to a given location on the world grid.\n         *\n         * @param {Number} x The x coordinate of the target location.\n         * @param {Number} y The y coordinate of the target location.\n         */\n        makeCharacterGoTo: function(character, x, y) {\n            if(!this.map.isOutOfBounds(x, y)) {\n                character.go(x, y);\n            }\n        },\n    \n        /**\n         *\n         */\n        makeCharacterTeleportTo: function(character, x, y) {\n            if(!this.map.isOutOfBounds(x, y)) {\n                this.unregisterEntityPosition(character);\n\n                character.setGridPosition(x, y);\n                \n                this.registerEntityPosition(character);\n                this.assignBubbleTo(character);\n            } else {\n                log.debug(\"Teleport out of bounds: \"+x+\", \"+y);\n            }\n        },\n\n        /**\n         * Moves the current player to a given target location.\n         * @see makeCharacterGoTo\n         */\n        makePlayerGoTo: function(x, y) {\n            this.makeCharacterGoTo(this.player, x, y);\n        },\n    \n        /**\n         * Moves the current player towards a specific item.\n         * @see makeCharacterGoTo\n         */\n        makePlayerGoToItem: function(item) {\n            if(item) {\n                this.player.isLootMoving = true;\n                this.makePlayerGoTo(item.gridX, item.gridY);\n                this.client.sendLootMove(item, item.gridX, item.gridY);\n            }\n        },\n    \n        /**\n         *\n         */\n        makePlayerTalkTo: function(npc) {\n            if(npc) {\n                this.player.setTarget(npc);\n                this.player.follow(npc);\n            }\n        },\n    \n        makePlayerOpenChest: function(chest) {\n            if(chest) {\n                this.player.setTarget(chest);\n                this.player.follow(chest);\n            }\n        },\n    \n        /**\n         * \n         */\n        makePlayerAttack: function(mob) {\n            this.createAttackLink(this.player, mob);\n            this.client.sendAttack(mob);\n        },\n    \n        /**\n         *\n         */\n        makeNpcTalk: function(npc) {\n            var msg;\n        \n            if(npc) {\n                msg = npc.talk();\n                this.previousClickPosition = {};\n                if(msg) {\n                    this.createBubble(npc.id, msg);\n                    this.assignBubbleTo(npc);\n                    this.audioManager.playSound(\"npc\");\n                } else {\n                    this.destroyBubble(npc.id);\n                    this.audioManager.playSound(\"npc-end\");\n                }\n                this.tryUnlockingAchievement(\"SMALL_TALK\");\n                \n                if(npc.kind === Types.Entities.RICK) {\n                    this.tryUnlockingAchievement(\"RICKROLLD\");\n                }\n            }\n        },\n\n        /**\n         * Loops through all the entities currently present in the game.\n         * @param {Function} callback The function to call back (must accept one entity argument).\n         */\n        forEachEntity: function(callback) {\n            _.each(this.entities, function(entity) {\n                callback(entity);\n            });\n        },\n    \n        /**\n         * Same as forEachEntity but only for instances of the Mob subclass.\n         * @see forEachEntity\n         */\n        forEachMob: function(callback) {\n            _.each(this.entities, function(entity) {\n                if(entity instanceof Mob) {\n                    callback(entity);\n                }\n            });\n        },\n    \n        /**\n         * Loops through all entities visible by the camera and sorted by depth :\n         * Lower 'y' value means higher depth.\n         * Note: This is used by the Renderer to know in which order to render entities.\n         */\n        forEachVisibleEntityByDepth: function(callback) {\n            var self = this,\n                m = this.map;\n        \n            this.camera.forEachVisiblePosition(function(x, y) {\n                if(!m.isOutOfBounds(x, y)) {\n                    if(self.renderingGrid[y][x]) {\n                        _.each(self.renderingGrid[y][x], function(entity) {\n                            callback(entity);\n                        });\n                    }\n                }\n            }, this.renderer.mobile ? 0 : 2);\n        },\n    \n        /**\n         * \n         */    \n        forEachVisibleTileIndex: function(callback, extra) {\n            var m = this.map;\n        \n            this.camera.forEachVisiblePosition(function(x, y) {\n                if(!m.isOutOfBounds(x, y)) {\n                    callback(m.GridPositionToTileIndex(x, y) - 1);\n                }\n            }, extra);\n        },\n    \n        /**\n         * \n         */\n        forEachVisibleTile: function(callback, extra) {\n            var self = this,\n                m = this.map;\n        \n            if(m.isLoaded) {\n                this.forEachVisibleTileIndex(function(tileIndex) {\n                    if(_.isArray(m.data[tileIndex])) {\n                        _.each(m.data[tileIndex], function(id) {\n                            callback(id-1, tileIndex);\n                        });\n                    }\n                    else {\n                        if(_.isNaN(m.data[tileIndex]-1)) {\n                            //throw Error(\"Tile number for index:\"+tileIndex+\" is NaN\");\n                        } else {\n                            callback(m.data[tileIndex]-1, tileIndex);\n                        }\n                    }\n                }, extra);\n            }\n        },\n    \n        /**\n         * \n         */\n        forEachAnimatedTile: function(callback) {\n            if(this.animatedTiles) {\n                _.each(this.animatedTiles, function(tile) {\n                    callback(tile);\n                });\n            }\n        },\n    \n        /**\n         * Returns the entity located at the given position on the world grid.\n         * @returns {Entity} the entity located at (x, y) or null if there is none.\n         */\n        getEntityAt: function(x, y) {\n            if(this.map.isOutOfBounds(x, y) || !this.entityGrid) {\n                return null;\n            }\n            \n            var entities = this.entityGrid[y][x],\n                entity = null;\n            if(_.size(entities) > 0) {\n                entity = entities[_.keys(entities)[0]];\n            } else {\n                entity = this.getItemAt(x, y);\n            }\n            return entity;\n        },\n\n        getMobAt: function(x, y) {\n            var entity = this.getEntityAt(x, y);\n            if(entity && (entity instanceof Mob)) {\n                return entity;\n            }\n            return null;\n        },\n\n        getNpcAt: function(x, y) {\n            var entity = this.getEntityAt(x, y);\n            if(entity && (entity instanceof Npc)) {\n                return entity;\n            }\n            return null;\n        },\n\n        getChestAt: function(x, y) {\n            var entity = this.getEntityAt(x, y);\n            if(entity && (entity instanceof Chest)) {\n                return entity;\n            }\n            return null;\n        },\n\n        getItemAt: function(x, y) {\n            if(this.map.isOutOfBounds(x, y) || !this.itemGrid) {\n                return null;\n            }\n            var items = this.itemGrid[y][x],\n                item = null;\n\n            if(_.size(items) > 0) {\n                // If there are potions/burgers stacked with equipment items on the same tile, always get expendable items first.\n                _.each(items, function(i) {\n                    if(Types.isExpendableItem(i.kind)) {\n                        item = i;\n                    };\n                });\n\n                // Else, get the first item of the stack\n                if(!item) {\n                    item = items[_.keys(items)[0]];\n                }\n            }\n            return item;\n        },\n    \n        /**\n         * Returns true if an entity is located at the given position on the world grid.\n         * @returns {Boolean} Whether an entity is at (x, y).\n         */\n        isEntityAt: function(x, y) {\n            return !_.isNull(this.getEntityAt(x, y));\n        },\n\n        isMobAt: function(x, y) {\n            return !_.isNull(this.getMobAt(x, y));\n        },\n\n        isItemAt: function(x, y) {\n            return !_.isNull(this.getItemAt(x, y));\n        },\n\n        isNpcAt: function(x, y) {\n            return !_.isNull(this.getNpcAt(x, y));\n        },\n\n        isChestAt: function(x, y) {\n            return !_.isNull(this.getChestAt(x, y));\n        },\n\n        /**\n         * Finds a path to a grid position for the specified character.\n         * The path will pass through any entity present in the ignore list.\n         */\n        findPath: function(character, x, y, ignoreList) {\n            var self = this,\n                grid = this.pathingGrid;\n                path = [],\n                isPlayer = (character === this.player);\n        \n            if(this.map.isColliding(x, y)) {\n                return path;\n            }\n        \n            if(this.pathfinder && character) {\n                if(ignoreList) {\n                    _.each(ignoreList, function(entity) {\n                        self.pathfinder.ignoreEntity(entity);\n                    });\n                }\n            \n                path = this.pathfinder.findPath(grid, character, x, y, false);\n            \n                if(ignoreList) {\n                    this.pathfinder.clearIgnoreList();\n                }\n            } else {\n                log.error(\"Error while finding the path to \"+x+\", \"+y+\" for \"+character.id);\n            }\n            return path;\n        },\n    \n        /**\n         * Toggles the visibility of the pathing grid for debugging purposes.\n         */\n        togglePathingGrid: function() {\n            if(this.debugPathing) {\n                this.debugPathing = false;\n            } else {\n                this.debugPathing = true;\n            }\n        },\n    \n        /**\n         * Toggles the visibility of the FPS counter and other debugging info.\n         */\n        toggleDebugInfo: function() {\n            if(this.renderer && this.renderer.isDebugInfoVisible) {\n                this.renderer.isDebugInfoVisible = false;\n            } else {\n                this.renderer.isDebugInfoVisible = true;\n            }\n        },\n    \n        /**\n         * \n         */\n        movecursor: function() {\n            var mouse = this.getMouseGridPosition(),\n                x = mouse.x,\n                y = mouse.y;\n\n            if(this.player && !this.renderer.mobile && !this.renderer.tablet) {\n                this.hoveringCollidingTile = this.map.isColliding(x, y);\n                this.hoveringPlateauTile = this.player.isOnPlateau ? !this.map.isPlateau(x, y) : this.map.isPlateau(x, y);\n                this.hoveringMob = this.isMobAt(x, y);\n                this.hoveringItem = this.isItemAt(x, y);\n                this.hoveringNpc = this.isNpcAt(x, y);\n                this.hoveringChest = this.isChestAt(x, y);\n        \n                if(this.hoveringMob || this.hoveringNpc || this.hoveringChest) {\n                    var entity = this.getEntityAt(x, y);\n            \n                    if(!entity.isHighlighted && this.renderer.supportsSilhouettes) {\n                        if(this.lastHovered) {\n                            this.lastHovered.setHighlight(false);\n                        }\n                        this.lastHovered = entity;\n                        entity.setHighlight(true);\n                    }\n                }\n                else if(this.lastHovered) {\n                    this.lastHovered.setHighlight(false);\n                    this.lastHovered = null;\n                }\n            }\n        },\n    \n        /**\n         * Processes game logic when the user triggers a click/touch event during the game.\n         */\n        click: function() {\n            var pos = this.getMouseGridPosition(),\n                entity;\n            \n            if(pos.x === this.previousClickPosition.x\n            && pos.y === this.previousClickPosition.y) {\n                return;\n            } else {\n                this.previousClickPosition = pos;\n            }\n\t        \n    \t    if(this.started\n    \t    && this.player\n    \t    && !this.isZoning()\n    \t    && !this.isZoningTile(this.player.nextGridX, this.player.nextGridY)\n    \t    && !this.player.isDead\n    \t    && !this.hoveringCollidingTile\n    \t    && !this.hoveringPlateauTile) {\n        \t    entity = this.getEntityAt(pos.x, pos.y);\n    \t    \n        \t    if(entity instanceof Mob) {\n        \t        this.makePlayerAttack(entity);\n        \t    }\n        \t    else if(entity instanceof Item) {\n        \t        this.makePlayerGoToItem(entity);\n        \t    }\n        \t    else if(entity instanceof Npc) {\n        \t        if(this.player.isAdjacentNonDiagonal(entity) === false) {\n                        this.makePlayerTalkTo(entity);\n        \t        } else {\n                        this.makeNpcTalk(entity);\n        \t        }\n        \t    }\n        \t    else if(entity instanceof Chest) {\n        \t        this.makePlayerOpenChest(entity);\n        \t    }\n        \t    else {\n        \t        this.makePlayerGoTo(pos.x, pos.y);\n        \t    }\n        \t}\n        },\n        \n        isMobOnSameTile: function(mob, x, y) {\n            var X = x || mob.gridX,\n                Y = y || mob.gridY,\n                list = this.entityGrid[Y][X],\n                result = false;\n            \n            _.each(list, function(entity) {\n                if(entity instanceof Mob && entity.id !== mob.id) {\n                    result = true;\n                }\n            });\n            return result;\n        },\n        \n        getFreeAdjacentNonDiagonalPosition: function(entity) {\n            var self = this,\n                result = null;\n            \n            entity.forEachAdjacentNonDiagonalPosition(function(x, y, orientation) {\n                if(!result && !self.map.isColliding(x, y) && !self.isMobAt(x, y)) {\n                    result = {x: x, y: y, o: orientation};\n                }\n            });\n            return result;\n        },\n        \n        tryMovingToADifferentTile: function(character) {\n            var attacker = character,\n                target = character.target;\n            \n            if(attacker && target && target instanceof Player) {\n                if(!target.isMoving() && attacker.getDistanceToEntity(target) === 0) {\n                    var pos;\n                    \n                    switch(target.orientation) {\n                        case Types.Orientations.UP:\n                            pos = {x: target.gridX, y: target.gridY - 1, o: target.orientation}; break;\n                        case Types.Orientations.DOWN:\n                            pos = {x: target.gridX, y: target.gridY + 1, o: target.orientation}; break;\n                        case Types.Orientations.LEFT:\n                            pos = {x: target.gridX - 1, y: target.gridY, o: target.orientation}; break;\n                        case Types.Orientations.RIGHT:\n                            pos = {x: target.gridX + 1, y: target.gridY, o: target.orientation}; break;\n                    }\n                    \n                    if(pos) {\n                        attacker.previousTarget = target;\n                        attacker.disengage();\n                        attacker.idle();\n                        this.makeCharacterGoTo(attacker, pos.x, pos.y);\n                        target.adjacentTiles[pos.o] = true;\n                        \n                        return true;\n                    }\n                }\n            \n                if(!target.isMoving() && attacker.isAdjacentNonDiagonal(target) && this.isMobOnSameTile(attacker)) {\n                    var pos = this.getFreeAdjacentNonDiagonalPosition(target);\n            \n                    // avoid stacking mobs on the same tile next to a player\n                    // by making them go to adjacent tiles if they are available\n                    if(pos && !target.adjacentTiles[pos.o]) {\n                        if(this.player.target && attacker.id === this.player.target.id) {\n                            return false; // never unstack the player's target\n                        }\n                        \n                        attacker.previousTarget = target;\n                        attacker.disengage();\n                        attacker.idle();\n                        this.makeCharacterGoTo(attacker, pos.x, pos.y);\n                        target.adjacentTiles[pos.o] = true;\n                        \n                        return true;\n                    }\n                }\n            }\n            return false;\n        },\n    \n        /**\n         * \n         */\n        onCharacterUpdate: function(character) {\n            var time = this.currentTime,\n                self = this;\n            \n            // If mob has finished moving to a different tile in order to avoid stacking, attack again from the new position.\n            if(character.previousTarget && !character.isMoving() && character instanceof Mob) {\n                var t = character.previousTarget;\n                \n                if(this.getEntityById(t.id)) { // does it still exist?\n                    character.previousTarget = null;\n                    this.createAttackLink(character, t);\n                    return;\n                }\n            }\n        \n            if(character.isAttacking() && !character.previousTarget) {\n                var isMoving = this.tryMovingToADifferentTile(character); // Don't let multiple mobs stack on the same tile when attacking a player.\n                \n                if(character.canAttack(time)) {\n                    if(!isMoving) { // don't hit target if moving to a different tile.\n                        if(character.hasTarget() && character.getOrientationTo(character.target) !== character.orientation) {\n                            character.lookAtTarget();\n                        }\n                        \n                        character.hit();\n                        \n                        if(character.id === this.playerId) {\n                            this.client.sendHit(character.target);\n                        }\n                        \n                        if(character instanceof Player && this.camera.isVisible(character)) {\n                            this.audioManager.playSound(\"hit\"+Math.floor(Math.random()*2+1));\n                        }\n                        \n                        if(character.hasTarget() && character.target.id === this.playerId && this.player && !this.player.invincible) {\n                            this.client.sendHurt(character);\n                        }\n                    }\n                } else {\n                    if(character.hasTarget()\n                    && character.isDiagonallyAdjacent(character.target)\n                    && character.target instanceof Player\n                    && !character.target.isMoving()) {\n                        character.follow(character.target);\n                    }\n                }\n            }\n        },\n    \n        /**\n         * \n         */\n        isZoningTile: function(x, y) {\n            var c = this.camera;\n        \n            x = x - c.gridX;\n            y = y - c.gridY;\n            \n            if(x === 0 || y === 0 || x === c.gridW-1 || y === c.gridH-1) {\n                return true;\n            }\n            return false;\n        },\n    \n        /**\n         * \n         */\n        getZoningOrientation: function(x, y) {\n            var orientation = \"\",\n                c = this.camera;\n\n            x = x - c.gridX;\n            y = y - c.gridY;\n       \n            if(x === 0) {\n                orientation = Types.Orientations.LEFT;\n            }\n            else if(y === 0) {\n                orientation = Types.Orientations.UP;\n            }\n            else if(x === c.gridW-1) {\n                orientation = Types.Orientations.RIGHT;\n            }\n            else if(y === c.gridH-1) {\n                orientation = Types.Orientations.DOWN;\n            }\n        \n            return orientation;\n        },\n    \n        startZoningFrom: function(x, y) {\n            this.zoningOrientation = this.getZoningOrientation(x, y);\n        \n            if(this.renderer.mobile || this.renderer.tablet) {\n                var z = this.zoningOrientation,\n                    c = this.camera,\n                    ts = this.renderer.tilesize,\n                    x = c.x,\n                    y = c.y,\n                    xoffset = (c.gridW - 2) * ts,\n                    yoffset = (c.gridH - 2) * ts;\n            \n                if(z === Types.Orientations.LEFT || z === Types.Orientations.RIGHT) {\n                    x = (z === Types.Orientations.LEFT) ? c.x - xoffset : c.x + xoffset;\n                } else if(z === Types.Orientations.UP || z === Types.Orientations.DOWN) {\n                    y = (z === Types.Orientations.UP) ? c.y - yoffset : c.y + yoffset;\n                }\n                c.setPosition(x, y);\n            \n                this.renderer.clearScreen(this.renderer.context);\n                this.endZoning();\n                \n                // Force immediate drawing of all visible entities in the new zone\n                this.forEachVisibleEntityByDepth(function(entity) {\n                    entity.setDirty();\n                });\n            }\n            else {\n                this.currentZoning = new Transition();\n            }\n            this.bubbleManager.clean();\n            this.client.sendZone();\n        },\n        \n        enqueueZoningFrom: function(x, y) {\n            this.zoningQueue.push({x: x, y: y});\n            \n            if(this.zoningQueue.length === 1) {\n                this.startZoningFrom(x, y);\n            }\n        },\n    \n        endZoning: function() {\n            this.currentZoning = null;\n            this.resetZone();\n            this.zoningQueue.shift();\n            \n            if(this.zoningQueue.length > 0) {\n                var pos = this.zoningQueue[0];\n                this.startZoningFrom(pos.x, pos.y);\n            }\n        },\n    \n        isZoning: function() {\n            return !_.isNull(this.currentZoning);\n        },\n    \n        resetZone: function() {\n            this.bubbleManager.clean();\n            this.initAnimatedTiles();\n            this.renderer.renderStaticCanvases();\n        },\n    \n        resetCamera: function() {\n            this.camera.focusEntity(this.player);\n            this.resetZone();\n        },\n    \n        say: function(message) {\n            this.client.sendChat(message);\n        },\n    \n        createBubble: function(id, message) {\n            this.bubbleManager.create(id, message, this.currentTime);\n        },\n    \n        destroyBubble: function(id) {\n            this.bubbleManager.destroyBubble(id);\n        },\n    \n        assignBubbleTo: function(character) {\n            var bubble = this.bubbleManager.getBubbleById(character.id);\n        \n            if(bubble) {\n                var s = this.renderer.scale,\n                    t = 16 * s, // tile size\n                    x = ((character.x - this.camera.x) * s),\n                    w = parseInt(bubble.element.css('width')) + 24,\n                    offset = (w / 2) - (t / 2),\n                    offsetY,\n                    y;\n            \n                if(character instanceof Npc) {\n                    offsetY = 0;\n                } else {\n                    if(s === 2) {\n                        if(this.renderer.mobile) {\n                            offsetY = 0;\n                        } else {\n                            offsetY = 15;\n                        }\n                    } else {\n                        offsetY = 12;\n                    }\n                }\n            \n                y = ((character.y - this.camera.y) * s) - (t * 2) - offsetY;\n            \n                bubble.element.css('left', x - offset + 'px');\n                bubble.element.css('top', y + 'px');\n            }\n        },\n    \n        restart: function() {\n            log.debug(\"Beginning restart\");\n        \n            this.entities = {};\n            this.initEntityGrid();\n            this.initPathingGrid();\n            this.initRenderingGrid();\n\n            this.player = new Warrior(\"player\", this.username);\n            this.initPlayer();\n        \n            this.started = true;\n            this.client.enable();\n            this.sendHello(this.player);\n        \n            this.storage.incrementRevives();\n            \n            if(this.renderer.mobile || this.renderer.tablet) {\n                this.renderer.clearScreen(this.renderer.context);\n            }\n        \n            log.debug(\"Finished restart\");\n        },\n    \n        onGameStart: function(callback) {\n            this.gamestart_callback = callback;\n        },\n        \n        onDisconnect: function(callback) {\n            this.disconnect_callback = callback;\n        },\n    \n        onPlayerDeath: function(callback) {\n            this.playerdeath_callback = callback;\n        },\n    \n        onPlayerHealthChange: function(callback) {\n            this.playerhp_callback = callback;\n        },\n    \n        onPlayerHurt: function(callback) {\n            this.playerhurt_callback = callback;\n        },\n    \n        onPlayerEquipmentChange: function(callback) {\n            this.equipment_callback = callback;\n        },\n\n        onNbPlayersChange: function(callback) {\n            this.nbplayers_callback = callback;\n        },\n    \n        onNotification: function(callback) {\n            this.notification_callback = callback;\n        },\n    \n        onPlayerInvincible: function(callback) {\n            this.invincible_callback = callback\n        },\n    \n        resize: function() {\n            var x = this.camera.x,\n                y = this.camera.y,\n                currentScale = this.renderer.scale,\n                newScale = this.renderer.getScaleFactor();\n    \n                this.renderer.rescale(newScale);\n                this.camera = this.renderer.camera;\n                this.camera.setPosition(x, y);\n\n                this.renderer.renderStaticCanvases();\n        },\n    \n        updateBars: function() {\n            if(this.player && this.playerhp_callback) {\n                this.playerhp_callback(this.player.hitPoints, this.player.maxHitPoints);\n            }\n        },\n    \n        getDeadMobPosition: function(mobId) {\n            var position;\n\n            if(mobId in this.deathpositions) {\n                position = this.deathpositions[mobId];\n                delete this.deathpositions[mobId];\n            }\n        \n            return position;\n        },\n    \n        onAchievementUnlock: function(callback) {\n            this.unlock_callback = callback;\n        },\n    \n        tryUnlockingAchievement: function(name) {\n            var achievement = null;\n            if(name in this.achievements) {\n                achievement = this.achievements[name];\n            \n                if(achievement.isCompleted() && this.storage.unlockAchievement(achievement.id)) {\n                    if(this.unlock_callback) {\n                        this.unlock_callback(achievement.id, achievement.name, achievement.desc);\n                        this.audioManager.playSound(\"achievement\");\n                    }\n                }\n            }\n        },\n    \n        showNotification: function(message) {\n            if(this.notification_callback) {\n                this.notification_callback(message);\n            }\n        },\n\n        removeObsoleteEntities: function() {\n            var nb = _.size(this.obsoleteEntities),\n                self = this;\n        \n            if(nb > 0) {\n                _.each(this.obsoleteEntities, function(entity) {\n                    if(entity.id != self.player.id) { // never remove yourself\n                        self.removeEntity(entity);\n                    }\n                });\n                log.debug(\"Removed \"+nb+\" entities: \"+_.pluck(_.reject(this.obsoleteEntities, function(id) { return id === self.player.id }), 'id'));\n                this.obsoleteEntities = null;\n            }\n        },\n    \n        /**\n         * Fake a mouse move event in order to update the cursor.\n         *\n         * For instance, to get rid of the sword cursor in case the mouse is still hovering over a dying mob.\n         * Also useful when the mouse is hovering a tile where an item is appearing.\n         */\n        updateCursor: function() {\n            this.movecursor();\n            this.updateCursorLogic();\n        },\n    \n        /**\n         * Change player plateau mode when necessary\n         */\n        updatePlateauMode: function() {\n            if(this.map.isPlateau(this.player.gridX, this.player.gridY)) {\n                this.player.isOnPlateau = true;\n            } else {\n                this.player.isOnPlateau = false;\n            }\n        },\n    \n        updatePlayerCheckpoint: function() {\n            var checkpoint = this.map.getCurrentCheckpoint(this.player);\n        \n            if(checkpoint) {\n                var lastCheckpoint = this.player.lastCheckpoint;\n                if(!lastCheckpoint || (lastCheckpoint && lastCheckpoint.id !== checkpoint.id)) {\n                    this.player.lastCheckpoint = checkpoint;\n                    this.client.sendCheck(checkpoint.id);\n                }\n            }\n        },\n        \n        checkUndergroundAchievement: function() {\n            var music = this.audioManager.getSurroundingMusic(this.player);\n\n            if(music) {\n                if(music.name === 'cave') {\n                    this.tryUnlockingAchievement(\"UNDERGROUND\");\n                }\n            }\n        },\n        \n        forEachEntityAround: function(x, y, r, callback) {\n            for(var i = x-r, max_i = x+r; i <= max_i; i += 1) {\n                for(var j = y-r, max_j = y+r; j <= max_j; j += 1) {\n                    if(!this.map.isOutOfBounds(i, j)) {\n                        _.each(this.renderingGrid[j][i], function(entity) {\n                            callback(entity);\n                        });\n                    }\n                }\n            }\n        },\n        \n        checkOtherDirtyRects: function(r1, source, x, y) {\n            var r = this.renderer;\n            \n            this.forEachEntityAround(x, y, 2, function(e2) {\n                if(source && source.id && e2.id === source.id) {\n                    return;\n                }\n                if(!e2.isDirty) {\n                    var r2 = r.getEntityBoundingRect(e2);\n                    if(r.isIntersecting(r1, r2)) {\n                        e2.setDirty();\n                    }\n                }\n            });\n            \n            if(source && !(source.hasOwnProperty(\"index\"))) {\n                this.forEachAnimatedTile(function(tile) {\n                    if(!tile.isDirty) {\n                        var r2 = r.getTileBoundingRect(tile);\n                        if(r.isIntersecting(r1, r2)) {\n                            tile.isDirty = true;\n                        }\n                    }\n                });\n            }\n            \n            if(!this.drawTarget && this.selectedCellVisible) {\n                var targetRect = r.getTargetBoundingRect();\n                if(r.isIntersecting(r1, targetRect)) {\n                    this.drawTarget = true;\n                    this.renderer.targetRect = targetRect;\n                }\n            }\n        }\n    });\n    \n    return Game;\n});\n"
  },
  {
    "path": "client/js/gameclient.js",
    "content": "\ndefine(['player', 'entityfactory', 'lib/bison'], function(Player, EntityFactory, BISON) {\n\n    var GameClient = Class.extend({\n        init: function(host, port) {\n            this.connection = null;\n            this.host = host;\n            this.port = port;\n    \n            this.connected_callback = null;\n            this.spawn_callback = null;\n            this.movement_callback = null;\n        \n            this.handlers = [];\n            this.handlers[Types.Messages.WELCOME] = this.receiveWelcome;\n            this.handlers[Types.Messages.MOVE] = this.receiveMove;\n            this.handlers[Types.Messages.LOOTMOVE] = this.receiveLootMove;\n            this.handlers[Types.Messages.ATTACK] = this.receiveAttack;\n            this.handlers[Types.Messages.SPAWN] = this.receiveSpawn;\n            this.handlers[Types.Messages.DESPAWN] = this.receiveDespawn;\n            this.handlers[Types.Messages.SPAWN_BATCH] = this.receiveSpawnBatch;\n            this.handlers[Types.Messages.HEALTH] = this.receiveHealth;\n            this.handlers[Types.Messages.CHAT] = this.receiveChat;\n            this.handlers[Types.Messages.EQUIP] = this.receiveEquipItem;\n            this.handlers[Types.Messages.DROP] = this.receiveDrop;\n            this.handlers[Types.Messages.TELEPORT] = this.receiveTeleport;\n            this.handlers[Types.Messages.DAMAGE] = this.receiveDamage;\n            this.handlers[Types.Messages.POPULATION] = this.receivePopulation;\n            this.handlers[Types.Messages.LIST] = this.receiveList;\n            this.handlers[Types.Messages.DESTROY] = this.receiveDestroy;\n            this.handlers[Types.Messages.KILL] = this.receiveKill;\n            this.handlers[Types.Messages.HP] = this.receiveHitPoints;\n            this.handlers[Types.Messages.BLINK] = this.receiveBlink;\n        \n            this.useBison = false;\n            this.enable();\n        },\n    \n        enable: function() {\n            this.isListening = true;\n        },\n    \n        disable: function() {\n            this.isListening = false;\n        },\n        \n        connect: function(dispatcherMode) {\n            var url = \"ws://\"+ this.host +\":\"+ this.port +\"/\",\n                self = this;\n            \n            log.info(\"Trying to connect to server : \"+url);\n\n            if(window.MozWebSocket) {\n                this.connection = new MozWebSocket(url);\n            } else {\n                this.connection = new WebSocket(url);\n            }\n            \n            if(dispatcherMode) {\n                this.connection.onmessage = function(e) {\n                    var reply = JSON.parse(e.data);\n\n                    if(reply.status === 'OK') {\n                        self.dispatched_callback(reply.host, reply.port);\n                    } else if(reply.status === 'FULL') {\n                        alert(\"BrowserQuest is currently at maximum player population. Please retry later.\");\n                    } else {\n                        alert(\"Unknown error while connecting to BrowserQuest.\");\n                    }\n                };\n            } else {\n                this.connection.onopen = function(e) {\n                    log.info(\"Connected to server \"+self.host+\":\"+self.port);\n                };\n\n                this.connection.onmessage = function(e) {\n                    if(e.data === \"go\") {\n                        if(self.connected_callback) {\n                            self.connected_callback();\n                        }\n                        return;\n                    }\n                    if(e.data === 'timeout') {\n                        self.isTimeout = true;\n                        return;\n                    }\n                    \n                    self.receiveMessage(e.data);\n                };\n\n                this.connection.onerror = function(e) {\n                    log.error(e, true);\n                };\n\n                this.connection.onclose = function() {\n                    log.debug(\"Connection closed\");\n                    $('#container').addClass('error');\n                    \n                    if(self.disconnected_callback) {\n                        if(self.isTimeout) {\n                            self.disconnected_callback(\"You have been disconnected for being inactive for too long\");\n                        } else {\n                            self.disconnected_callback(\"The connection to BrowserQuest has been lost\");\n                        }\n                    }\n                };\n            }\n        },\n\n        sendMessage: function(json) {\n            var data;\n            if(this.connection.readyState === 1) {\n                if(this.useBison) {\n                    data = BISON.encode(json);\n                } else {\n                    data = JSON.stringify(json);\n                }\n                this.connection.send(data);\n            }\n        },\n\n        receiveMessage: function(message) {\n            var data, action;\n        \n            if(this.isListening) {\n                if(this.useBison) {\n                    data = BISON.decode(message);\n                } else {\n                    data = JSON.parse(message);\n                }\n\n                log.debug(\"data: \" + message);\n\n                if(data instanceof Array) {\n                    if(data[0] instanceof Array) {\n                        // Multiple actions received\n                        this.receiveActionBatch(data);\n                    } else {\n                        // Only one action received\n                        this.receiveAction(data);\n                    }\n                }\n            }\n        },\n    \n        receiveAction: function(data) {\n            var action = data[0];\n            if(this.handlers[action] && _.isFunction(this.handlers[action])) {\n                this.handlers[action].call(this, data);\n            }\n            else {\n                log.error(\"Unknown action : \" + action);\n            }\n        },\n    \n        receiveActionBatch: function(actions) {\n            var self = this;\n\n            _.each(actions, function(action) {\n                self.receiveAction(action);\n            });\n        },\n    \n        receiveWelcome: function(data) {\n            var id = data[1],\n                name = data[2],\n                x = data[3],\n                y = data[4],\n                hp = data[5];\n        \n            if(this.welcome_callback) {\n                this.welcome_callback(id, name, x, y, hp);\n            }\n        },\n    \n        receiveMove: function(data) {\n            var id = data[1],\n                x = data[2],\n                y = data[3];\n        \n            if(this.move_callback) {\n                this.move_callback(id, x, y);\n            }\n        },\n    \n        receiveLootMove: function(data) {\n            var id = data[1], \n                item = data[2];\n        \n            if(this.lootmove_callback) {\n                this.lootmove_callback(id, item);\n            }\n        },\n    \n        receiveAttack: function(data) {\n            var attacker = data[1], \n                target = data[2];\n        \n            if(this.attack_callback) {\n                this.attack_callback(attacker, target);\n            }\n        },\n    \n        receiveSpawn: function(data) {\n            var id = data[1],\n                kind = data[2],\n                x = data[3],\n                y = data[4];\n        \n            if(Types.isItem(kind)) {\n                var item = EntityFactory.createEntity(kind, id);\n            \n                if(this.spawn_item_callback) {\n                    this.spawn_item_callback(item, x, y);\n                }\n            } else if(Types.isChest(kind)) {\n                var item = EntityFactory.createEntity(kind, id);\n            \n                if(this.spawn_chest_callback) {\n                    this.spawn_chest_callback(item, x, y);\n                }\n            } else {\n                var name, orientation, target, weapon, armor;\n            \n                if(Types.isPlayer(kind)) {\n                    name = data[5];\n                    orientation = data[6];\n                    armor = data[7];\n                    weapon = data[8];\n                    if(data.length > 9) {\n                        target = data[9];\n                    }\n                }\n                else if(Types.isMob(kind)) {\n                    orientation = data[5];\n                    if(data.length > 6) {\n                        target = data[6];\n                    }\n                }\n\n                var character = EntityFactory.createEntity(kind, id, name);\n            \n                if(character instanceof Player) {\n                    character.weaponName = Types.getKindAsString(weapon);\n                    character.spriteName = Types.getKindAsString(armor);\n                }\n            \n                if(this.spawn_character_callback) {\n                    this.spawn_character_callback(character, x, y, orientation, target);\n                }\n            }\n        },\n    \n        receiveDespawn: function(data) {\n            var id = data[1];\n        \n            if(this.despawn_callback) {\n                this.despawn_callback(id);\n            }\n        },\n    \n        receiveHealth: function(data) {\n            var points = data[1],\n                isRegen = false;\n        \n            if(data[2]) {\n                isRegen = true;\n            }\n        \n            if(this.health_callback) {\n                this.health_callback(points, isRegen);\n            }\n        },\n    \n        receiveChat: function(data) {\n            var id = data[1],\n                text = data[2];\n        \n            if(this.chat_callback) {\n                this.chat_callback(id, text);\n            }\n        },\n    \n        receiveEquipItem: function(data) {\n            var id = data[1],\n                itemKind = data[2];\n        \n            if(this.equip_callback) {\n                this.equip_callback(id, itemKind);\n            }\n        },\n    \n        receiveDrop: function(data) {\n            var mobId = data[1],\n                id = data[2],\n                kind = data[3];\n        \n            var item = EntityFactory.createEntity(kind, id);\n            item.wasDropped = true;\n            item.playersInvolved = data[4];\n        \n            if(this.drop_callback) {\n                this.drop_callback(item, mobId);\n            }\n        },\n    \n        receiveTeleport: function(data) {\n            var id = data[1],\n                x = data[2],\n                y = data[3];\n        \n            if(this.teleport_callback) {\n                this.teleport_callback(id, x, y);\n            }\n        },\n    \n        receiveDamage: function(data) {\n            var id = data[1],\n                dmg = data[2];\n        \n            if(this.dmg_callback) {\n                this.dmg_callback(id, dmg);\n            }\n        },\n    \n        receivePopulation: function(data) {\n            var worldPlayers = data[1],\n                totalPlayers = data[2];\n        \n            if(this.population_callback) {\n                this.population_callback(worldPlayers, totalPlayers);\n            }\n        },\n    \n        receiveKill: function(data) {\n            var mobKind = data[1];\n        \n            if(this.kill_callback) {\n                this.kill_callback(mobKind);\n            }\n        },\n    \n        receiveList: function(data) {\n            data.shift();\n        \n            if(this.list_callback) {\n                this.list_callback(data);\n            }\n        },\n    \n        receiveDestroy: function(data) {\n            var id = data[1];\n        \n            if(this.destroy_callback) {\n                this.destroy_callback(id);\n            }\n        },\n    \n        receiveHitPoints: function(data) {\n            var maxHp = data[1];\n        \n            if(this.hp_callback) {\n                this.hp_callback(maxHp);\n            }\n        },\n    \n        receiveBlink: function(data) {\n            var id = data[1];\n        \n            if(this.blink_callback) {\n                this.blink_callback(id);\n            }\n        },\n        \n        onDispatched: function(callback) {\n            this.dispatched_callback = callback;\n        },\n\n        onConnected: function(callback) {\n            this.connected_callback = callback;\n        },\n        \n        onDisconnected: function(callback) {\n            this.disconnected_callback = callback;\n        },\n\n        onWelcome: function(callback) {\n            this.welcome_callback = callback;\n        },\n\n        onSpawnCharacter: function(callback) {\n            this.spawn_character_callback = callback;\n        },\n    \n        onSpawnItem: function(callback) {\n            this.spawn_item_callback = callback;\n        },\n    \n        onSpawnChest: function(callback) {\n            this.spawn_chest_callback = callback;\n        },\n\n        onDespawnEntity: function(callback) {\n            this.despawn_callback = callback;\n        },\n\n        onEntityMove: function(callback) {\n            this.move_callback = callback;\n        },\n\n        onEntityAttack: function(callback) {\n            this.attack_callback = callback;\n        },\n    \n        onPlayerChangeHealth: function(callback) {\n            this.health_callback = callback;\n        },\n    \n        onPlayerEquipItem: function(callback) {\n            this.equip_callback = callback;\n        },\n    \n        onPlayerMoveToItem: function(callback) {\n            this.lootmove_callback = callback;\n        },\n    \n        onPlayerTeleport: function(callback) {\n            this.teleport_callback = callback;\n        },\n    \n        onChatMessage: function(callback) {\n            this.chat_callback = callback;\n        },\n    \n        onDropItem: function(callback) {\n            this.drop_callback = callback;\n        },\n    \n        onPlayerDamageMob: function(callback) {\n            this.dmg_callback = callback;\n        },\n    \n        onPlayerKillMob: function(callback) {\n            this.kill_callback = callback;\n        },\n    \n        onPopulationChange: function(callback) {\n            this.population_callback = callback;\n        },\n    \n        onEntityList: function(callback) {\n            this.list_callback = callback;\n        },\n    \n        onEntityDestroy: function(callback) {\n            this.destroy_callback = callback;\n        },\n    \n        onPlayerChangeMaxHitPoints: function(callback) {\n            this.hp_callback = callback;\n        },\n    \n        onItemBlink: function(callback) {\n            this.blink_callback = callback;\n        },\n\n        sendHello: function(player) {\n            this.sendMessage([Types.Messages.HELLO,\n                              player.name,\n                              Types.getKindFromString(player.getSpriteName()),\n                              Types.getKindFromString(player.getWeaponName())]);\n        },\n\n        sendMove: function(x, y) {\n            this.sendMessage([Types.Messages.MOVE,\n                              x,\n                              y]);\n        },\n    \n        sendLootMove: function(item, x, y) {\n            this.sendMessage([Types.Messages.LOOTMOVE,\n                              x,\n                              y,\n                              item.id]);\n        },\n    \n        sendAggro: function(mob) {\n            this.sendMessage([Types.Messages.AGGRO,\n                              mob.id]);\n        },\n    \n        sendAttack: function(mob) {\n            this.sendMessage([Types.Messages.ATTACK,\n                              mob.id]);\n        },\n    \n        sendHit: function(mob) {\n            this.sendMessage([Types.Messages.HIT,\n                              mob.id]);\n        },\n    \n        sendHurt: function(mob) {\n            this.sendMessage([Types.Messages.HURT,\n                              mob.id]);\n        },\n    \n        sendChat: function(text) {\n            this.sendMessage([Types.Messages.CHAT,\n                              text]);\n        },\n    \n        sendLoot: function(item) {\n            this.sendMessage([Types.Messages.LOOT,\n                              item.id]);\n        },\n    \n        sendTeleport: function(x, y) {\n            this.sendMessage([Types.Messages.TELEPORT,\n                              x,\n                              y]);\n        },\n    \n        sendWho: function(ids) {\n            ids.unshift(Types.Messages.WHO);\n            this.sendMessage(ids);\n        },\n    \n        sendZone: function() {\n            this.sendMessage([Types.Messages.ZONE]);\n        },\n    \n        sendOpen: function(chest) {\n            this.sendMessage([Types.Messages.OPEN,\n                              chest.id]);\n        },\n    \n        sendCheck: function(id) {\n            this.sendMessage([Types.Messages.CHECK,\n                              id]);\n        }\n    });\n    \n    return GameClient;\n});"
  },
  {
    "path": "client/js/home.js",
    "content": "\ndefine(['lib/class', 'lib/underscore.min', 'lib/stacktrace', 'util'], function() {\n    require([\"main\"]);\n});"
  },
  {
    "path": "client/js/infomanager.js",
    "content": "\ndefine(function() {\n\n    var InfoManager = Class.extend({\n        init: function(game) {\n            this.game = game;\n            this.infos = {};\n            this.destroyQueue = [];\n        },\n    \n        addDamageInfo: function(value, x, y, type) {\n            var time = this.game.currentTime,\n                id = time+\"\"+Math.abs(value)+\"\"+x+\"\"+y,\n                self = this,\n                info = new DamageInfo(id, value, x, y, DamageInfo.DURATION, type);\n        \n            info.onDestroy(function(id) {\n                self.destroyQueue.push(id);\n            });\n            this.infos[id] = info;\n        },\n    \n        forEachInfo: function(callback) {\n            var self = this;\n        \n            _.each(this.infos, function(info, id) {\n                callback(info);\n            });\n        },\n    \n        update: function(time) {\n            var self = this;\n        \n            this.forEachInfo(function(info) {\n                info.update(time);\n            });\n        \n            _.each(this.destroyQueue, function(id) {\n                delete self.infos[id];\n            });\n            this.destroyQueue = [];\n        }\n    });\n\n\n    var damageInfoColors = {\n        \"received\": {\n            fill: \"rgb(255, 50, 50)\",\n            stroke: \"rgb(255, 180, 180)\"\n        },\n        \"inflicted\": {\n            fill: \"white\",\n            stroke: \"#373737\"\n        },\n        \"healed\": {\n            fill: \"rgb(80, 255, 80)\",\n            stroke: \"rgb(50, 120, 50)\"\n        }\n    };\n\n\n    var DamageInfo = Class.extend({\n        DURATION: 1000,\n    \n        init: function(id, value, x, y, duration, type) {\n            this.id = id;\n            this.value = value;\n            this.duration = duration;\n            this.x = x;\n            this.y = y;\n            this.opacity = 1.0;\n            this.lastTime = 0;\n            this.speed = 100;\n            this.fillColor = damageInfoColors[type].fill;\n            this.strokeColor = damageInfoColors[type].stroke;\n        },\n    \n        isTimeToAnimate: function(time) {\n        \treturn (time - this.lastTime) > this.speed;\n        },\n    \n        update: function(time) {\n            if(this.isTimeToAnimate(time)) {\n                this.lastTime = time;\n                this.tick();\n            }\n        },\n    \n        tick: function() {\n            this.y -= 1;\n            this.opacity -= 0.07;\n            if(this.opacity < 0) {\n                this.destroy();\n            }\n        },\n    \n        onDestroy: function(callback) {\n            this.destroy_callback = callback;\n        },\n    \n        destroy: function() {\n            if(this.destroy_callback) {\n                this.destroy_callback(this.id);\n            }\n        }\n    });\n    \n    return InfoManager;\n});\n"
  },
  {
    "path": "client/js/item.js",
    "content": "\ndefine(['entity'], function(Entity) {\n\n    var Item = Entity.extend({\n        init: function(id, kind, type) {\n    \t    this._super(id, kind);\n\n            this.itemKind = Types.getKindAsString(kind);\n    \t    this.type = type;\n    \t    this.wasDropped = false;\n        },\n\n        hasShadow: function() {\n            return true;\n        },\n\n        onLoot: function(player) {\n            if(this.type === \"weapon\") {\n                player.switchWeapon(this.itemKind);\n            }\n            else if(this.type === \"armor\") {\n                player.armorloot_callback(this.itemKind);\n            }\n        },\n\n        getSpriteName: function() {\n            return \"item-\"+ this.itemKind;\n        },\n\n        getLootMessage: function() {\n            return this.lootMessage;\n        }\n    });\n    \n    return Item;\n});"
  },
  {
    "path": "client/js/items.js",
    "content": "\ndefine(['item'], function(Item) {\n    \n    var Items = {\n        \n        Sword2: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.SWORD2, \"weapon\");\n                this.lootMessage = \"You pick up a steel sword\";\n            },\n        }),\n\n        Axe: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.AXE, \"weapon\");\n                this.lootMessage = \"You pick up an axe\";\n            },\n        }),\n\n        RedSword: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.REDSWORD, \"weapon\");\n                this.lootMessage = \"You pick up a blazing sword\";\n            },\n        }),\n\n        BlueSword: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.BLUESWORD, \"weapon\");\n                this.lootMessage = \"You pick up a magic sword\";\n            },\n        }),\n\n        GoldenSword: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.GOLDENSWORD, \"weapon\");\n                this.lootMessage = \"You pick up the ultimate sword\";\n            },\n        }),\n\n        MorningStar: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.MORNINGSTAR, \"weapon\");\n                this.lootMessage = \"You pick up a morning star\";\n            },\n        }),\n\n        LeatherArmor: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.LEATHERARMOR, \"armor\");\n                this.lootMessage = \"You equip a leather armor\";\n            },\n        }),\n\n        MailArmor: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.MAILARMOR, \"armor\");\n                this.lootMessage = \"You equip a mail armor\";\n            },\n        }),\n\n        PlateArmor: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.PLATEARMOR, \"armor\");\n                this.lootMessage = \"You equip a plate armor\";\n            },\n        }),\n\n        RedArmor: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.REDARMOR, \"armor\");\n                this.lootMessage = \"You equip a ruby armor\";\n            },\n        }),\n\n        GoldenArmor: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.GOLDENARMOR, \"armor\");\n                this.lootMessage = \"You equip a golden armor\";\n            },\n        }),\n\n        Flask: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.FLASK, \"object\");\n                this.lootMessage = \"You drink a health potion\";\n            },\n        }),\n        \n        Cake: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.CAKE, \"object\");\n                this.lootMessage = \"You eat a cake\";\n            },\n        }),\n\n        Burger: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.BURGER, \"object\");\n                this.lootMessage = \"You can haz rat burger\";\n            },\n        }),\n\n        FirePotion: Item.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.FIREPOTION, \"object\");\n                this.lootMessage = \"You feel the power of Firefox!\";\n            },\n    \n            onLoot: function(player) {\n                player.startInvincibility();\n            },\n        }),\n    };\n\n    return Items;\n});\n"
  },
  {
    "path": "client/js/lib/astar.js",
    "content": "\ndefine(function() {\n\n    var AStar = (function () {\n\n        /**\n         * A* (A-Star) algorithm for a path finder\n         * @author  Andrea Giammarchi\n         * @license Mit Style License\n         */\n\n        function diagonalSuccessors($N, $S, $E, $W, N, S, E, W, grid, rows, cols, result, i) {\n            if($N) {\n                $E && !grid[N][E] && (result[i++] = {x:E, y:N});\n                $W && !grid[N][W] && (result[i++] = {x:W, y:N});\n            }\n            if($S){\n                $E && !grid[S][E] && (result[i++] = {x:E, y:S});\n                $W && !grid[S][W] && (result[i++] = {x:W, y:S});\n            }\n            return result;\n        }\n\n        function diagonalSuccessorsFree($N, $S, $E, $W, N, S, E, W, grid, rows, cols, result, i) {\n            $N = N > -1;\n            $S = S < rows;\n            $E = E < cols;\n            $W = W > -1;\n            if($E) {\n                $N && !grid[N][E] && (result[i++] = {x:E, y:N});\n                $S && !grid[S][E] && (result[i++] = {x:E, y:S});\n            }\n            if($W) {\n                $N && !grid[N][W] && (result[i++] = {x:W, y:N});\n                $S && !grid[S][W] && (result[i++] = {x:W, y:S});\n            }\n            return result;\n        }\n\n        function nothingToDo($N, $S, $E, $W, N, S, E, W, grid, rows, cols, result, i) {\n            return result;\n        }\n\n        function successors(find, x, y, grid, rows, cols){\n            var\n                N = y - 1,\n                S = y + 1,\n                E = x + 1,\n                W = x - 1,\n                $N = N > -1 && !grid[N][x],\n                $S = S < rows && !grid[S][x],\n                $E = E < cols && !grid[y][E],\n                $W = W > -1 && !grid[y][W],\n                result = [],\n                i = 0\n            ;\n            $N && (result[i++] = {x:x, y:N});\n            $E && (result[i++] = {x:E, y:y});\n            $S && (result[i++] = {x:x, y:S});\n            $W && (result[i++] = {x:W, y:y});\n            return find($N, $S, $E, $W, N, S, E, W, grid, rows, cols, result, i);\n        }\n\n        function diagonal(start, end, f1, f2) {\n            return f2(f1(start.x - end.x), f1(start.y - end.y));\n        }\n\n        function euclidean(start, end, f1, f2) {\n            var\n                x = start.x - end.x,\n                y = start.y - end.y\n            ;\n            return f2(x * x + y * y);\n        }\n\n        function manhattan(start, end, f1, f2) {\n            return f1(start.x - end.x) + f1(start.y - end.y);\n        }\n\n        function AStar(grid, start, end, f) {\n            var\n                cols = grid[0].length,\n                rows = grid.length,\n                limit = cols * rows,\n                f1 = Math.abs,\n                f2 = Math.max,\n                list = {},\n                result = [],\n                open = [{x:start[0], y:start[1], f:0, g:0, v:start[0]+start[1]*cols}],\n                length = 1,\n                adj, distance, find, i, j, max, min, current, next\n            ;\n            end = {x:end[0], y:end[1], v:end[0]+end[1]*cols};\n            switch (f) {\n                case \"Diagonal\":\n                    find = diagonalSuccessors;\n                case \"DiagonalFree\":\n                    distance = diagonal;\n                    break;\n                case \"Euclidean\":\n                    find = diagonalSuccessors;\n                case \"EuclideanFree\":\n                    f2 = Math.sqrt;\n                    distance = euclidean;\n                    break;\n                default:\n                    distance = manhattan;\n                    find = nothingToDo;\n                    break;\n            }\n            find || (find = diagonalSuccessorsFree);\n            do {\n                max = limit;\n                min = 0;\n                for(i = 0; i < length; ++i) {\n                    if((f = open[i].f) < max) {\n                        max = f;\n                        min = i;\n                    }\n                };\n                current = open.splice(min, 1)[0];\n                if (current.v != end.v) {\n                    --length;\n                    next = successors(find, current.x, current.y, grid, rows, cols);\n                    for(i = 0, j = next.length; i < j; ++i){\n                        (adj = next[i]).p = current;\n                        adj.f = adj.g = 0;\n                        adj.v = adj.x + adj.y * cols;\n                        if(!(adj.v in list)){\n                            adj.f = (adj.g = current.g + distance(adj, current, f1, f2)) + distance(adj, end, f1, f2);\n                            open[length++] = adj;\n                            list[adj.v] = 1;\n                        }\n                    }\n                } else {\n                    i = length = 0;\n                    do {\n                        result[i++] = [current.x, current.y];\n                    } while (current = current.p);\n                    result.reverse();\n                }\n            } while (length);\n            return result;\n        }\n\n        return AStar;\n\n    }());\n    \n    return AStar;\n});"
  },
  {
    "path": "client/js/lib/bison.js",
    "content": "/*\n   Copyright (c) 2010-2011 Ivo Wetzel.\n\n   Permission is hereby granted, free of charge, to any person obtaining a copy\n   of this software and associated documentation files (the \"Software\"), to deal\n   in the Software without restriction, including without limitation the rights\n   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n   copies of the Software, and to permit persons to whom the Software is\n   furnished to do so, subject to the following conditions:\n\n   The above copyright notice and this permission notice shall be included in\n   all copies or substantial portions of the Software.\n\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n   THE SOFTWARE.\n*/\n\n(function(undefined) {\n    var chr = String.fromCharCode;\n    var tok = new Array(65536);\n    for (var i = 0; i < 65536; i++) {\n        tok[i] = chr(i);\n    }\n\n    var enc = '';\n    function _encode(data, top) {\n        if (typeof data === 'number') {\n\n            // Floats\n            var m = data | 0;\n            if (m !== data) {\n                var add = 0, r = (data - m) * 100;\n                if (r < 0) {\n                    add = (r + 1 | 0) - r;\n                    r = (add >= 1.0 && add <= 1.5) ? r | 0 : r - 1 | 0;\n\n                } else {\n                    add = r | 0;\n                    r = r - add >= 0.5 ? r + 1 | 0 : add;\n                }\n\n                add = 0;\n                if (data < 0) {\n                    m = 0 - m;\n                    r = 0 - r;\n                    add = 1;\n                }\n\n                if (m < 65536) {\n                    if (m === 0) {\n                        enc += tok[13 + add] + tok[r + 128];\n\n                    } else {\n                        enc += tok[13 + add] + tok[r] + tok[m];\n                    }\n\n                } else {\n                    enc += tok[15 + add] + tok[m >> 16 & 0xffff]\n                                         + tok[m & 0xffff] + tok[r];\n                }\n\n            // Fixed\n            } else {\n                var add = 0;\n                if (data <= 0) {\n                    data = 0 - data;\n                    add = 1;\n\n                } else {\n                    data--;\n                }\n\n                if (data < 116) {\n                    enc += tok[17 + data + add * 116];\n\n                } else if (data < 65536) {\n                    enc += tok[1 + add] + tok[data];\n\n                } else {\n                    enc += tok[3 + add] + tok[data >> 16 & 0xffff]\n                                        + tok[data & 0xffff];\n                }\n            }\n\n        // Strings\n        } else if (typeof data === 'string') {\n            var l = data.length;\n            enc += tok[7];\n            while (l >= 65535) {\n                l -= 65535;\n                enc += tok[65535];\n            }\n            enc += tok[l] + data;\n\n        // Booleans\n        } else if (data === true) {\n            enc += tok[5];\n\n        } else if (data === false) {\n            enc += tok[6];\n\n        // Null\n        } else if (data === null) {\n            enc += tok[0];\n\n        // Arrays\n        } else if (data instanceof Array) {\n            enc += tok[8];\n            for (var i = 0, l = data.length; i < l; i++) {\n                _encode(data[i], false);\n            }\n            if (!top) {\n                enc += tok[9];\n            }\n\n        // Objects\n        } else if (data instanceof Object) {\n            enc += tok[10];\n            for (var e in data) {\n                enc += tok[17 + e.length] + e;\n                _encode(data[e], false);\n            }\n            if (!top) {\n                enc += tok[11];\n            }\n        }\n    }\n\n    function encode(data) {\n        enc = '';\n        _encode(data, true);\n        return enc;\n    }\n\n    function decode(data) {\n        var p = 0, l = data.length;\n        var stack = [], dec = undefined, f = null, t = 0, i = -1;\n        var dict = false, set = false;\n        var key = '', e = null, r = 0;\n        while (p < l) {\n            t = data.charCodeAt(p++);\n            f = stack[i];\n\n            // Keys\n            if (dict && set && t > 16) {\n                key = data.substring(p, p + t - 17);\n                p += t - 17;\n                set = false;\n\n            // Array / Objects\n            } else if (t === 8 || t === 10) {\n                e = t === 8 ? new Array() : new Object();\n                set = dict = t === 10;\n                dec !== undefined ? f instanceof Array ? f.push(e)\n                                                       : f[key] = e : dec = e;\n\n                stack.push(e);\n                i++;\n\n            } else if (t === 11 || t === 9) {\n                stack.pop();\n                set = dict = !(stack[--i] instanceof Array);\n\n            // Fixed\n            } else if (t > 16) {\n                t = t - 17;\n                t = t > 115 ? (0 - t + 116) : t + 1;\n                f instanceof Array ? f.push(t) : f[key] = t;\n                set = true;\n\n            } else if (t > 0 && t < 5) {\n                if (((t - 1) / 2 | 0) === 0) {\n                    e = data.charCodeAt(p);\n                    p++;\n\n                } else {\n                    e = (data.charCodeAt(p) << 16) + data.charCodeAt(p + 1);\n                    p += 2;\n                }\n                e = t % 2 ? e + 1 : 0 - e;\n                f instanceof Array ? f.push(e) : f[key] = e;\n                set = true;\n\n            // Floats\n            } else if (t > 12 && t < 17) {\n                if (((t - 13) / 2 | 0) === 0) {\n                    r = data.charCodeAt(p);\n                    if (r > 127) {\n                        e = 0;\n                        r -= 128;\n                        p++;\n\n                    } else {\n                        e = data.charCodeAt(p + 1);\n                        p += 2;\n                    }\n\n                } else {\n                    e = (data.charCodeAt(p) << 16) + data.charCodeAt(p + 1);\n                    r = data.charCodeAt(p + 2);\n                    p += 3;\n                }\n\n                e = t % 2 ? e + r * 0.01 : 0 - (e + r * 0.01);\n                f instanceof Array ? f.push(e) : f[key] = e;\n                set = true;\n\n            // Booleans\n            } else if (t > 4 && t < 7) {\n                f instanceof Array ? f.push(t === 5) : f[key] = t === 5;\n                set = true;\n\n            // Null\n            } else if (t === 0) {\n                f instanceof Array ? f.push(null) : f[key] = null;\n                set = true;\n\n            // Strings\n            } else if (t === 7) {\n                e = 0;\n                while (data.charCodeAt(p) === 65535) {\n                    e += 65535;\n                    p++;\n                }\n                e += data.charCodeAt(p++);\n                f instanceof Array ? f.push(data.substr(p, e))\n                                   : f[key] = data.substr(p, e);\n\n                p += e;\n                set = true;\n            }\n        }\n        return dec;\n    }\n\n    if (typeof window === 'undefined') {\n        exports.encode = encode;\n        exports.decode = decode;\n\n    } else {\n        window.BISON = {\n            encode: encode,\n            decode: decode\n        };\n    }\n})();\n\n"
  },
  {
    "path": "client/js/lib/class.js",
    "content": "\n/* Simple JavaScript Inheritance\n * By John Resig http://ejohn.org/\n * MIT Licensed.\n */\n// Inspired by base2 and Prototype\nvar initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\\b_super\\b/ : /.*/;\n    \n// The base Class implementation (does nothing)\nClass = function() {};\n\n// Create a new Class that inherits from this class\nClass.extend = function(prop) {\n    var _super = this.prototype;\n    \n    // Instantiate a base class (but only create the instance,\n    // don't run the init constructor)\n    initializing = true;\n    var prototype = new this();\n    initializing = false;\n    \n    // Copy the properties over onto the new prototype\n    for (var name in prop) {\n        // Check if we're overwriting an existing function\n        prototype[name] = typeof prop[name] == \"function\" &&\n            typeof _super[name] == \"function\" && fnTest.test(prop[name]) ?\n            (function(name, fn){\n                return function() {\n                    var tmp = this._super;\n                   \n                    // Add a new ._super() method that is the same method\n                    // but on the super-class\n                    this._super = _super[name];\n                   \n                    // The method only need to be bound temporarily, so we\n                    // remove it when we're done executing\n                    var ret = fn.apply(this, arguments);\n                    this._super = tmp;\n                   \n                    return ret;\n                };\n            })(name, prop[name]) :\n            prop[name];\n    }\n    \n    // The dummy class constructor\n    Class = function () {\n        // All construction is actually done in the init method\n        if ( !initializing && this.init )\n            this.init.apply(this, arguments);\n    }\n    \n    // Populate our constructed prototype object\n    Class.prototype = prototype;\n    \n    // Enforce the constructor to be what we expect\n    Class.constructor = Class;\n    \n    // And make this class extendable\n    Class.extend = arguments.callee;\n    \n    return Class;\n};\n\nif(!(typeof exports === 'undefined')) {\n    exports.Class = Class;\n}\n\n"
  },
  {
    "path": "client/js/lib/css3-mediaqueries.js",
    "content": "if(typeof Object.create!==\"function\"){\nObject.create=function(o){\nfunction F(){\n};\nF.prototype=o;\nreturn new F();\n};\n}\nvar ua={toString:function(){\nreturn navigator.userAgent;\n},test:function(s){\nreturn this.toString().toLowerCase().indexOf(s.toLowerCase())>-1;\n}};\nua.version=(ua.toString().toLowerCase().match(/[\\s\\S]+(?:rv|it|ra|ie)[\\/: ]([\\d.]+)/)||[])[1];\nua.webkit=ua.test(\"webkit\");\nua.gecko=ua.test(\"gecko\")&&!ua.webkit;\nua.opera=ua.test(\"opera\");\nua.ie=ua.test(\"msie\")&&!ua.opera;\nua.ie6=ua.ie&&document.compatMode&&typeof document.documentElement.style.maxHeight===\"undefined\";\nua.ie7=ua.ie&&document.documentElement&&typeof document.documentElement.style.maxHeight!==\"undefined\"&&typeof XDomainRequest===\"undefined\";\nua.ie8=ua.ie&&typeof XDomainRequest!==\"undefined\";\nvar domReady=function(){\nvar _1=[];\nvar _2=function(){\nif(!arguments.callee.done){\narguments.callee.done=true;\nfor(var i=0;i<_1.length;i++){\n_1[i]();\n}\n}\n};\nif(document.addEventListener){\ndocument.addEventListener(\"DOMContentLoaded\",_2,false);\n}\nif(ua.ie){\n(function(){\ntry{\ndocument.documentElement.doScroll(\"left\");\n}\ncatch(e){\nsetTimeout(arguments.callee,50);\nreturn;\n}\n_2();\n})();\ndocument.onreadystatechange=function(){\nif(document.readyState===\"complete\"){\ndocument.onreadystatechange=null;\n_2();\n}\n};\n}\nif(ua.webkit&&document.readyState){\n(function(){\nif(document.readyState!==\"loading\"){\n_2();\n}else{\nsetTimeout(arguments.callee,10);\n}\n})();\n}\nwindow.onload=_2;\nreturn function(fn){\nif(typeof fn===\"function\"){\n_1[_1.length]=fn;\n}\nreturn fn;\n};\n}();\nvar cssHelper=function(){\nvar _3={BLOCKS:/[^\\s{][^{]*\\{(?:[^{}]*\\{[^{}]*\\}[^{}]*|[^{}]*)*\\}/g,BLOCKS_INSIDE:/[^\\s{][^{]*\\{[^{}]*\\}/g,DECLARATIONS:/[a-zA-Z\\-]+[^;]*:[^;]+;/g,RELATIVE_URLS:/url\\(['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?\\)/g,REDUNDANT_COMPONENTS:/(?:\\/\\*([^*\\\\\\\\]|\\*(?!\\/))+\\*\\/|@import[^;]+;)/g,REDUNDANT_WHITESPACE:/\\s*(,|:|;|\\{|\\})\\s*/g,MORE_WHITESPACE:/\\s{2,}/g,FINAL_SEMICOLONS:/;\\}/g,NOT_WHITESPACE:/\\S+/g};\nvar _4,_5=false;\nvar _6=[];\nvar _7=function(fn){\nif(typeof fn===\"function\"){\n_6[_6.length]=fn;\n}\n};\nvar _8=function(){\nfor(var i=0;i<_6.length;i++){\n_6[i](_4);\n}\n};\nvar _9={};\nvar _a=function(n,v){\nif(_9[n]){\nvar _b=_9[n].listeners;\nif(_b){\nfor(var i=0;i<_b.length;i++){\n_b[i](v);\n}\n}\n}\n};\nvar _c=function(_d,_e,_f){\nif(ua.ie&&!window.XMLHttpRequest){\nwindow.XMLHttpRequest=function(){\nreturn new ActiveXObject(\"Microsoft.XMLHTTP\");\n};\n}\nif(!XMLHttpRequest){\nreturn \"\";\n}\nvar r=new XMLHttpRequest();\ntry{\nr.open(\"get\",_d,true);\nr.setRequestHeader(\"X_REQUESTED_WITH\",\"XMLHttpRequest\");\n}\ncatch(e){\n_f();\nreturn;\n}\nvar _10=false;\nsetTimeout(function(){\n_10=true;\n},5000);\ndocument.documentElement.style.cursor=\"progress\";\nr.onreadystatechange=function(){\nif(r.readyState===4&&!_10){\nif(!r.status&&location.protocol===\"file:\"||(r.status>=200&&r.status<300)||r.status===304||navigator.userAgent.indexOf(\"Safari\")>-1&&typeof r.status===\"undefined\"){\n_e(r.responseText);\n}else{\n_f();\n}\ndocument.documentElement.style.cursor=\"\";\nr=null;\n}\n};\nr.send(\"\");\n};\nvar _11=function(_12){\n_12=_12.replace(_3.REDUNDANT_COMPONENTS,\"\");\n_12=_12.replace(_3.REDUNDANT_WHITESPACE,\"$1\");\n_12=_12.replace(_3.MORE_WHITESPACE,\" \");\n_12=_12.replace(_3.FINAL_SEMICOLONS,\"}\");\nreturn _12;\n};\nvar _13={mediaQueryList:function(s){\nvar o={};\nvar idx=s.indexOf(\"{\");\nvar lt=s.substring(0,idx);\ns=s.substring(idx+1,s.length-1);\nvar mqs=[],rs=[];\nvar qts=lt.toLowerCase().substring(7).split(\",\");\nfor(var i=0;i<qts.length;i++){\nmqs[mqs.length]=_13.mediaQuery(qts[i],o);\n}\nvar rts=s.match(_3.BLOCKS_INSIDE);\nif(rts!==null){\nfor(i=0;i<rts.length;i++){\nrs[rs.length]=_13.rule(rts[i],o);\n}\n}\no.getMediaQueries=function(){\nreturn mqs;\n};\no.getRules=function(){\nreturn rs;\n};\no.getListText=function(){\nreturn lt;\n};\no.getCssText=function(){\nreturn s;\n};\nreturn o;\n},mediaQuery:function(s,mql){\ns=s||\"\";\nvar not=false,_14;\nvar exp=[];\nvar _15=true;\nvar _16=s.match(_3.NOT_WHITESPACE);\nfor(var i=0;i<_16.length;i++){\nvar _17=_16[i];\nif(!_14&&(_17===\"not\"||_17===\"only\")){\nif(_17===\"not\"){\nnot=true;\n}\n}else{\nif(!_14){\n_14=_17;\n}else{\nif(_17.charAt(0)===\"(\"){\nvar _18=_17.substring(1,_17.length-1).split(\":\");\nexp[exp.length]={mediaFeature:_18[0],value:_18[1]||null};\n}\n}\n}\n}\nreturn {getList:function(){\nreturn mql||null;\n},getValid:function(){\nreturn _15;\n},getNot:function(){\nreturn not;\n},getMediaType:function(){\nreturn _14;\n},getExpressions:function(){\nreturn exp;\n}};\n},rule:function(s,mql){\nvar o={};\nvar idx=s.indexOf(\"{\");\nvar st=s.substring(0,idx);\nvar ss=st.split(\",\");\nvar ds=[];\nvar dts=s.substring(idx+1,s.length-1).split(\";\");\nfor(var i=0;i<dts.length;i++){\nds[ds.length]=_13.declaration(dts[i],o);\n}\no.getMediaQueryList=function(){\nreturn mql||null;\n};\no.getSelectors=function(){\nreturn ss;\n};\no.getSelectorText=function(){\nreturn st;\n};\no.getDeclarations=function(){\nreturn ds;\n};\no.getPropertyValue=function(n){\nfor(var i=0;i<ds.length;i++){\nif(ds[i].getProperty()===n){\nreturn ds[i].getValue();\n}\n}\nreturn null;\n};\nreturn o;\n},declaration:function(s,r){\nvar idx=s.indexOf(\":\");\nvar p=s.substring(0,idx);\nvar v=s.substring(idx+1);\nreturn {getRule:function(){\nreturn r||null;\n},getProperty:function(){\nreturn p;\n},getValue:function(){\nreturn v;\n}};\n}};\nvar _19=function(el){\nif(typeof el.cssHelperText!==\"string\"){\nreturn;\n}\nvar o={mediaQueryLists:[],rules:[],selectors:{},declarations:[],properties:{}};\nvar _1a=o.mediaQueryLists;\nvar ors=o.rules;\nvar _1b=el.cssHelperText.match(_3.BLOCKS);\nif(_1b!==null){\nfor(var i=0;i<_1b.length;i++){\nif(_1b[i].substring(0,7)===\"@media \"){\n_1a[_1a.length]=_13.mediaQueryList(_1b[i]);\nors=o.rules=ors.concat(_1a[_1a.length-1].getRules());\n}else{\nors[ors.length]=_13.rule(_1b[i]);\n}\n}\n}\nvar oss=o.selectors;\nvar _1c=function(r){\nvar ss=r.getSelectors();\nfor(var i=0;i<ss.length;i++){\nvar n=ss[i];\nif(!oss[n]){\noss[n]=[];\n}\noss[n][oss[n].length]=r;\n}\n};\nfor(i=0;i<ors.length;i++){\n_1c(ors[i]);\n}\nvar ods=o.declarations;\nfor(i=0;i<ors.length;i++){\nods=o.declarations=ods.concat(ors[i].getDeclarations());\n}\nvar ops=o.properties;\nfor(i=0;i<ods.length;i++){\nvar n=ods[i].getProperty();\nif(!ops[n]){\nops[n]=[];\n}\nops[n][ops[n].length]=ods[i];\n}\nel.cssHelperParsed=o;\n_4[_4.length]=el;\nreturn o;\n};\nvar _1d=function(el,s){\nel.cssHelperText=_11(s||el.innerHTML);\nreturn _19(el);\n};\nvar _1e=function(){\n_5=true;\n_4=[];\nvar _1f=[];\nvar _20=function(){\nfor(var i=0;i<_1f.length;i++){\n_19(_1f[i]);\n}\nvar _21=document.getElementsByTagName(\"style\");\nfor(i=0;i<_21.length;i++){\n_1d(_21[i]);\n}\n_5=false;\n_8();\n};\nvar _22=document.getElementsByTagName(\"link\");\nfor(var i=0;i<_22.length;i++){\nvar _23=_22[i];\nif(_23.getAttribute(\"rel\").indexOf(\"style\")>-1&&_23.href&&_23.href.length!==0&&!_23.disabled){\n_1f[_1f.length]=_23;\n}\n}\nif(_1f.length>0){\nvar c=0;\nvar _24=function(){\nc++;\nif(c===_1f.length){\n_20();\n}\n};\nvar _25=function(_26){\nvar _27=_26.href;\n_c(_27,function(_28){\n_28=_11(_28).replace(_3.RELATIVE_URLS,\"url(\"+_27.substring(0,_27.lastIndexOf(\"/\"))+\"/$1)\");\n_26.cssHelperText=_28;\n_24();\n},_24);\n};\nfor(i=0;i<_1f.length;i++){\n_25(_1f[i]);\n}\n}else{\n_20();\n}\n};\nvar _29={mediaQueryLists:\"array\",rules:\"array\",selectors:\"object\",declarations:\"array\",properties:\"object\"};\nvar _2a={mediaQueryLists:null,rules:null,selectors:null,declarations:null,properties:null};\nvar _2b=function(_2c,v){\nif(_2a[_2c]!==null){\nif(_29[_2c]===\"array\"){\nreturn (_2a[_2c]=_2a[_2c].concat(v));\n}else{\nvar c=_2a[_2c];\nfor(var n in v){\nif(v.hasOwnProperty(n)){\nif(!c[n]){\nc[n]=v[n];\n}else{\nc[n]=c[n].concat(v[n]);\n}\n}\n}\nreturn c;\n}\n}\n};\nvar _2d=function(_2e){\n_2a[_2e]=(_29[_2e]===\"array\")?[]:{};\nfor(var i=0;i<_4.length;i++){\n_2b(_2e,_4[i].cssHelperParsed[_2e]);\n}\nreturn _2a[_2e];\n};\ndomReady(function(){\nvar els=document.body.getElementsByTagName(\"*\");\nfor(var i=0;i<els.length;i++){\nels[i].checkedByCssHelper=true;\n}\nif(document.implementation.hasFeature(\"MutationEvents\",\"2.0\")||window.MutationEvent){\ndocument.body.addEventListener(\"DOMNodeInserted\",function(e){\nvar el=e.target;\nif(el.nodeType===1){\n_a(\"DOMElementInserted\",el);\nel.checkedByCssHelper=true;\n}\n},false);\n}else{\nsetInterval(function(){\nvar els=document.body.getElementsByTagName(\"*\");\nfor(var i=0;i<els.length;i++){\nif(!els[i].checkedByCssHelper){\n_a(\"DOMElementInserted\",els[i]);\nels[i].checkedByCssHelper=true;\n}\n}\n},1000);\n}\n});\nvar _2f=function(d){\nif(typeof window.innerWidth!=\"undefined\"){\nreturn window[\"inner\"+d];\n}else{\nif(typeof document.documentElement!=\"undefined\"&&typeof document.documentElement.clientWidth!=\"undefined\"&&document.documentElement.clientWidth!=0){\nreturn document.documentElement[\"client\"+d];\n}\n}\n};\nreturn {addStyle:function(s,_30){\nvar el=document.createElement(\"style\");\nel.setAttribute(\"type\",\"text/css\");\ndocument.getElementsByTagName(\"head\")[0].appendChild(el);\nif(el.styleSheet){\nel.styleSheet.cssText=s;\n}else{\nel.appendChild(document.createTextNode(s));\n}\nel.addedWithCssHelper=true;\nif(typeof _30===\"undefined\"||_30===true){\ncssHelper.parsed(function(_31){\nvar o=_1d(el,s);\nfor(var n in o){\nif(o.hasOwnProperty(n)){\n_2b(n,o[n]);\n}\n}\n_a(\"newStyleParsed\",el);\n});\n}else{\nel.parsingDisallowed=true;\n}\nreturn el;\n},removeStyle:function(el){\nreturn el.parentNode.removeChild(el);\n},parsed:function(fn){\nif(_5){\n_7(fn);\n}else{\nif(typeof _4!==\"undefined\"){\nif(typeof fn===\"function\"){\nfn(_4);\n}\n}else{\n_7(fn);\n_1e();\n}\n}\n},mediaQueryLists:function(fn){\ncssHelper.parsed(function(_32){\nfn(_2a.mediaQueryLists||_2d(\"mediaQueryLists\"));\n});\n},rules:function(fn){\ncssHelper.parsed(function(_33){\nfn(_2a.rules||_2d(\"rules\"));\n});\n},selectors:function(fn){\ncssHelper.parsed(function(_34){\nfn(_2a.selectors||_2d(\"selectors\"));\n});\n},declarations:function(fn){\ncssHelper.parsed(function(_35){\nfn(_2a.declarations||_2d(\"declarations\"));\n});\n},properties:function(fn){\ncssHelper.parsed(function(_36){\nfn(_2a.properties||_2d(\"properties\"));\n});\n},broadcast:_a,addListener:function(n,fn){\nif(typeof fn===\"function\"){\nif(!_9[n]){\n_9[n]={listeners:[]};\n}\n_9[n].listeners[_9[n].listeners.length]=fn;\n}\n},removeListener:function(n,fn){\nif(typeof fn===\"function\"&&_9[n]){\nvar ls=_9[n].listeners;\nfor(var i=0;i<ls.length;i++){\nif(ls[i]===fn){\nls.splice(i,1);\ni-=1;\n}\n}\n}\n},getViewportWidth:function(){\nreturn _2f(\"Width\");\n},getViewportHeight:function(){\nreturn _2f(\"Height\");\n}};\n}();\ndomReady(function enableCssMediaQueries(){\nvar _37;\nvar _38={LENGTH_UNIT:/[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/,RESOLUTION_UNIT:/[0-9]+(dpi|dpcm)$/,ASPECT_RATIO:/^[0-9]+\\/[0-9]+$/,ABSOLUTE_VALUE:/^[0-9]*(\\.[0-9]+)*$/};\nvar _39=[];\nvar _3a=function(){\nvar id=\"css3-mediaqueries-test\";\nvar el=document.createElement(\"div\");\nel.id=id;\nvar _3b=cssHelper.addStyle(\"@media all and (width) { #\"+id+\" { width: 1px !important; } }\",false);\ndocument.body.appendChild(el);\nvar ret=el.offsetWidth===1;\n_3b.parentNode.removeChild(_3b);\nel.parentNode.removeChild(el);\n_3a=function(){\nreturn ret;\n};\nreturn ret;\n};\nvar _3c=function(){\n_37=document.createElement(\"div\");\n_37.style.cssText=\"position:absolute;top:-9999em;left:-9999em;\"+\"margin:0;border:none;padding:0;width:1em;font-size:1em;\";\ndocument.body.appendChild(_37);\nif(_37.offsetWidth!==16){\n_37.style.fontSize=16/_37.offsetWidth+\"em\";\n}\n_37.style.width=\"\";\n};\nvar _3d=function(_3e){\n_37.style.width=_3e;\nvar _3f=_37.offsetWidth;\n_37.style.width=\"\";\nreturn _3f;\n};\nvar _40=function(_41,_42){\nvar l=_41.length;\nvar min=(_41.substring(0,4)===\"min-\");\nvar max=(!min&&_41.substring(0,4)===\"max-\");\nif(_42!==null){\nvar _43;\nvar _44;\nif(_38.LENGTH_UNIT.exec(_42)){\n_43=\"length\";\n_44=_3d(_42);\n}else{\nif(_38.RESOLUTION_UNIT.exec(_42)){\n_43=\"resolution\";\n_44=parseInt(_42,10);\nvar _45=_42.substring((_44+\"\").length);\n}else{\nif(_38.ASPECT_RATIO.exec(_42)){\n_43=\"aspect-ratio\";\n_44=_42.split(\"/\");\n}else{\nif(_38.ABSOLUTE_VALUE){\n_43=\"absolute\";\n_44=_42;\n}else{\n_43=\"unknown\";\n}\n}\n}\n}\n}\nvar _46,_47;\nif(\"device-width\"===_41.substring(l-12,l)){\n_46=screen.width;\nif(_42!==null){\nif(_43===\"length\"){\nreturn ((min&&_46>=_44)||(max&&_46<_44)||(!min&&!max&&_46===_44));\n}else{\nreturn false;\n}\n}else{\nreturn _46>0;\n}\n}else{\nif(\"device-height\"===_41.substring(l-13,l)){\n_47=screen.height;\nif(_42!==null){\nif(_43===\"length\"){\nreturn ((min&&_47>=_44)||(max&&_47<_44)||(!min&&!max&&_47===_44));\n}else{\nreturn false;\n}\n}else{\nreturn _47>0;\n}\n}else{\nif(\"width\"===_41.substring(l-5,l)){\n_46=document.documentElement.clientWidth||document.body.clientWidth;\nif(_42!==null){\nif(_43===\"length\"){\nreturn ((min&&_46>=_44)||(max&&_46<_44)||(!min&&!max&&_46===_44));\n}else{\nreturn false;\n}\n}else{\nreturn _46>0;\n}\n}else{\nif(\"height\"===_41.substring(l-6,l)){\n_47=document.documentElement.clientHeight||document.body.clientHeight;\nif(_42!==null){\nif(_43===\"length\"){\nreturn ((min&&_47>=_44)||(max&&_47<_44)||(!min&&!max&&_47===_44));\n}else{\nreturn false;\n}\n}else{\nreturn _47>0;\n}\n}else{\nif(\"device-aspect-ratio\"===_41.substring(l-19,l)){\nreturn _43===\"aspect-ratio\"&&screen.width*_44[1]===screen.height*_44[0];\n}else{\nif(\"color-index\"===_41.substring(l-11,l)){\nvar _48=Math.pow(2,screen.colorDepth);\nif(_42!==null){\nif(_43===\"absolute\"){\nreturn ((min&&_48>=_44)||(max&&_48<_44)||(!min&&!max&&_48===_44));\n}else{\nreturn false;\n}\n}else{\nreturn _48>0;\n}\n}else{\nif(\"color\"===_41.substring(l-5,l)){\nvar _49=screen.colorDepth;\nif(_42!==null){\nif(_43===\"absolute\"){\nreturn ((min&&_49>=_44)||(max&&_49<_44)||(!min&&!max&&_49===_44));\n}else{\nreturn false;\n}\n}else{\nreturn _49>0;\n}\n}else{\nif(\"resolution\"===_41.substring(l-10,l)){\nvar res;\nif(_45===\"dpcm\"){\nres=_3d(\"1cm\");\n}else{\nres=_3d(\"1in\");\n}\nif(_42!==null){\nif(_43===\"resolution\"){\nreturn ((min&&res>=_44)||(max&&res<_44)||(!min&&!max&&res===_44));\n}else{\nreturn false;\n}\n}else{\nreturn res>0;\n}\n}else{\nreturn false;\n}\n}\n}\n}\n}\n}\n}\n}\n};\nvar _4a=function(mq){\nvar _4b=mq.getValid();\nvar _4c=mq.getExpressions();\nvar l=_4c.length;\nif(l>0){\nfor(var i=0;i<l&&_4b;i++){\n_4b=_40(_4c[i].mediaFeature,_4c[i].value);\n}\nvar not=mq.getNot();\nreturn (_4b&&!not||not&&!_4b);\n}\n};\nvar _4d=function(mql){\nvar mqs=mql.getMediaQueries();\nvar t={};\nfor(var i=0;i<mqs.length;i++){\nif(_4a(mqs[i])){\nt[mqs[i].getMediaType()]=true;\n}\n}\nvar s=[],c=0;\nfor(var n in t){\nif(t.hasOwnProperty(n)){\nif(c>0){\ns[c++]=\",\";\n}\ns[c++]=n;\n}\n}\nif(s.length>0){\n_39[_39.length]=cssHelper.addStyle(\"@media \"+s.join(\"\")+\"{\"+mql.getCssText()+\"}\",false);\n}\n};\nvar _4e=function(_4f){\nfor(var i=0;i<_4f.length;i++){\n_4d(_4f[i]);\n}\nif(ua.ie){\ndocument.documentElement.style.display=\"block\";\nsetTimeout(function(){\ndocument.documentElement.style.display=\"\";\n},0);\nsetTimeout(function(){\ncssHelper.broadcast(\"cssMediaQueriesTested\");\n},100);\n}else{\ncssHelper.broadcast(\"cssMediaQueriesTested\");\n}\n};\nvar _50=function(){\nfor(var i=0;i<_39.length;i++){\ncssHelper.removeStyle(_39[i]);\n}\n_39=[];\ncssHelper.mediaQueryLists(_4e);\n};\nvar _51=0;\nvar _52=function(){\nvar _53=cssHelper.getViewportWidth();\nvar _54=cssHelper.getViewportHeight();\nif(ua.ie){\nvar el=document.createElement(\"div\");\nel.style.position=\"absolute\";\nel.style.top=\"-9999em\";\nel.style.overflow=\"scroll\";\ndocument.body.appendChild(el);\n_51=el.offsetWidth-el.clientWidth;\ndocument.body.removeChild(el);\n}\nvar _55;\nvar _56=function(){\nvar vpw=cssHelper.getViewportWidth();\nvar vph=cssHelper.getViewportHeight();\nif(Math.abs(vpw-_53)>_51||Math.abs(vph-_54)>_51){\n_53=vpw;\n_54=vph;\nclearTimeout(_55);\n_55=setTimeout(function(){\nif(!_3a()){\n_50();\n}else{\ncssHelper.broadcast(\"cssMediaQueriesTested\");\n}\n},500);\n}\n};\nwindow.onresize=function(){\nvar x=window.onresize||function(){\n};\nreturn function(){\nx();\n_56();\n};\n}();\n};\nvar _57=document.documentElement;\n_57.style.marginLeft=\"-32767px\";\nsetTimeout(function(){\n_57.style.marginTop=\"\";\n},20000);\nreturn function(){\nif(!_3a()){\ncssHelper.addListener(\"newStyleParsed\",function(el){\n_4e(el.cssHelperParsed.mediaQueryLists);\n});\ncssHelper.addListener(\"cssMediaQueriesTested\",function(){\nif(ua.ie){\n_57.style.width=\"1px\";\n}\nsetTimeout(function(){\n_57.style.width=\"\";\n_57.style.marginLeft=\"\";\n},0);\ncssHelper.removeListener(\"cssMediaQueriesTested\",arguments.callee);\n});\n_3c();\n_50();\n}else{\n_57.style.marginLeft=\"\";\n}\n_52();\n};\n}());\ntry{\ndocument.execCommand(\"BackgroundImageCache\",false,true);\n}\ncatch(e){\n}\n\r\n"
  },
  {
    "path": "client/js/lib/log.js",
    "content": "\nvar Logger = function(level) {\n    this.level = level;\n};\n\nLogger.prototype.info = function() {};\nLogger.prototype.debug = function() {};\nLogger.prototype.error = function() {};\n\n//>>excludeStart(\"prodHost\", pragmas.prodHost);\nLogger.prototype.info = function(message) {\n    if(this.level === \"debug\" || this.level === \"info\") {\n        if(window.console) {\n            console.info(message);\n        }\n    }\n};\n\nLogger.prototype.debug = function(message) {\n    if(this.level === \"debug\") {\n        if(window.console) {\n            console.log(message);\n        }\n    }\n};\n\nLogger.prototype.error = function(message, stacktrace) {\n    if(window.console) {\n        console.error(message);\n        if(stacktrace !== undefined && stacktrace === true) {\n            var trace = printStackTrace();\n            console.error(trace.join('\\n\\n'));\n            console.error('-----------------------------');\n        }\n    }\n};\n//>>excludeEnd(\"prodHost\");\n\nlog = new Logger(\"debug\");"
  },
  {
    "path": "client/js/lib/modernizr.js",
    "content": "/* Modernizr 2.5.3 (Custom Build) | MIT & BSD\n * Build: http://www.modernizr.com/download/#-opacity-audio-localstorage-prefixes\n */\n;window.Modernizr=function(a,b,c){function u(a){i.cssText=a}function v(a,b){return u(l.join(a+\";\")+(b||\"\"))}function w(a,b){return typeof a===b}function x(a,b){return!!~(\"\"+a).indexOf(b)}function y(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:w(f,\"function\")?f.bind(d||b):f}return!1}var d=\"2.5.3\",e={},f=b.documentElement,g=\"modernizr\",h=b.createElement(g),i=h.style,j,k={}.toString,l=\" -webkit- -moz- -o- -ms- \".split(\" \"),m={},n={},o={},p=[],q=p.slice,r,s={}.hasOwnProperty,t;!w(s,\"undefined\")&&!w(s.call,\"undefined\")?t=function(a,b){return s.call(a,b)}:t=function(a,b){return b in a&&w(a.constructor.prototype[b],\"undefined\")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!=\"function\")throw new TypeError;var d=q.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(q.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(q.call(arguments)))};return e}),m.opacity=function(){return v(\"opacity:.55\"),/^0.55$/.test(i.opacity)},m.audio=function(){var a=b.createElement(\"audio\"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,\"\"),c.mp3=a.canPlayType(\"audio/mpeg;\").replace(/^no$/,\"\"),c.wav=a.canPlayType('audio/wav; codecs=\"1\"').replace(/^no$/,\"\"),c.m4a=(a.canPlayType(\"audio/x-m4a;\")||a.canPlayType(\"audio/aac;\")).replace(/^no$/,\"\")}catch(d){}return c},m.localstorage=function(){try{return localStorage.setItem(g,g),localStorage.removeItem(g),!0}catch(a){return!1}};for(var z in m)t(m,z)&&(r=z.toLowerCase(),e[r]=m[z](),p.push((e[r]?\"\":\"no-\")+r));return u(\"\"),h=j=null,e._version=d,e._prefixes=l,e}(this,this.document);"
  },
  {
    "path": "client/js/lib/require-jquery.js",
    "content": "\n/** vim: et:ts=4:sw=4:sts=4\n * @license RequireJS 0.26.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n/*jslint strict: false, plusplus: false */\n/*global window: false, navigator: false, document: false, importScripts: false,\n  jQuery: false, clearInterval: false, setInterval: false, self: false,\n  setTimeout: false, opera: false */\n\nvar requirejs, require, define;\n(function () {\n    //Change this version number for each release.\n    var version = \"0.26.0\",\n        commentRegExp = /(\\/\\*([\\s\\S]*?)\\*\\/|\\/\\/(.*)$)/mg,\n        cjsRequireRegExp = /require\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,\n        currDirRegExp = /^\\.\\//,\n        jsSuffixRegExp = /\\.js$/,\n        ostring = Object.prototype.toString,\n        ap = Array.prototype,\n        aps = ap.slice,\n        apsp = ap.splice,\n        isBrowser = !!(typeof window !== \"undefined\" && navigator && document),\n        isWebWorker = !isBrowser && typeof importScripts !== \"undefined\",\n        //PS3 indicates loaded and complete, but need to wait for complete\n        //specifically. Sequence is \"loading\", \"loaded\", execution,\n        // then \"complete\". The UA check is unfortunate, but not sure how\n        //to feature test w/o causing perf issues.\n        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?\n                      /^complete$/ : /^(complete|loaded)$/,\n        defContextName = \"_\",\n        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.\n        isOpera = typeof opera !== \"undefined\" && opera.toString() === \"[object Opera]\",\n        reqWaitIdPrefix = \"_r@@\",\n        empty = {},\n        contexts = {},\n        globalDefQueue = [],\n        interactiveScript = null,\n        isDone = false,\n        checkLoadedDepth = 0,\n        useInteractive = false,\n        req, cfg = {}, currentlyAddingScript, s, head, baseElement, scripts, script,\n        src, subPath, mainScript, dataMain, i, scrollIntervalId, setReadyState, ctx,\n        jQueryCheck, checkLoadedTimeoutId;\n\n    function isFunction(it) {\n        return ostring.call(it) === \"[object Function]\";\n    }\n\n    function isArray(it) {\n        return ostring.call(it) === \"[object Array]\";\n    }\n\n    /**\n     * Simple function to mix in properties from source into target,\n     * but only if target does not already have a property of the same name.\n     * This is not robust in IE for transferring methods that match\n     * Object.prototype names, but the uses of mixin here seem unlikely to\n     * trigger a problem related to that.\n     */\n    function mixin(target, source, force) {\n        for (var prop in source) {\n            if (!(prop in empty) && (!(prop in target) || force)) {\n                target[prop] = source[prop];\n            }\n        }\n        return req;\n    }\n\n    /**\n     * Constructs an error with a pointer to an URL with more information.\n     * @param {String} id the error ID that maps to an ID on a web page.\n     * @param {String} message human readable error.\n     * @param {Error} [err] the original error, if there is one.\n     *\n     * @returns {Error}\n     */\n    function makeError(id, msg, err) {\n        var e = new Error(msg + '\\nhttp://requirejs.org/docs/errors.html#' + id);\n        if (err) {\n            e.originalError = err;\n        }\n        return e;\n    }\n\n    /**\n     * Used to set up package paths from a packagePaths or packages config object.\n     * @param {Object} pkgs the object to store the new package config\n     * @param {Array} currentPackages an array of packages to configure\n     * @param {String} [dir] a prefix dir to use.\n     */\n    function configurePackageDir(pkgs, currentPackages, dir) {\n        var i, location, pkgObj;\n\n        for (i = 0; (pkgObj = currentPackages[i]); i++) {\n            pkgObj = typeof pkgObj === \"string\" ? { name: pkgObj } : pkgObj;\n            location = pkgObj.location;\n\n            //Add dir to the path, but avoid paths that start with a slash\n            //or have a colon (indicates a protocol)\n            if (dir && (!location || (location.indexOf(\"/\") !== 0 && location.indexOf(\":\") === -1))) {\n                location = dir + \"/\" + (location || pkgObj.name);\n            }\n\n            //Create a brand new object on pkgs, since currentPackages can\n            //be passed in again, and config.pkgs is the internal transformed\n            //state for all package configs.\n            pkgs[pkgObj.name] = {\n                name: pkgObj.name,\n                location: location || pkgObj.name,\n                //Remove leading dot in main, so main paths are normalized,\n                //and remove any trailing .js, since different package\n                //envs have different conventions: some use a module name,\n                //some use a file name.\n                main: (pkgObj.main || \"main\")\n                      .replace(currDirRegExp, '')\n                      .replace(jsSuffixRegExp, '')\n            };\n        }\n    }\n\n    /**\n     * jQuery 1.4.3-1.5.x use a readyWait/ready() pairing to hold DOM\n     * ready callbacks, but jQuery 1.6 supports a holdReady() API instead.\n     * At some point remove the readyWait/ready() support and just stick\n     * with using holdReady.\n     */\n    function jQueryHoldReady($, shouldHold) {\n        if ($.holdReady) {\n            $.holdReady(shouldHold);\n        } else if (shouldHold) {\n            $.readyWait += 1;\n        } else {\n            $.ready(true);\n        }\n    }\n\n    if (typeof define !== \"undefined\") {\n        //If a define is already in play via another AMD loader,\n        //do not overwrite.\n        return;\n    }\n\n    if (typeof requirejs !== \"undefined\") {\n        if (isFunction(requirejs)) {\n            //Do not overwrite and existing requirejs instance.\n            return;\n        } else {\n            cfg = requirejs;\n            requirejs = undefined;\n        }\n    }\n\n    //Allow for a require config object\n    if (typeof require !== \"undefined\" && !isFunction(require)) {\n        //assume it is a config object.\n        cfg = require;\n        require = undefined;\n    }\n\n    /**\n     * Creates a new context for use in require and define calls.\n     * Handle most of the heavy lifting. Do not want to use an object\n     * with prototype here to avoid using \"this\" in require, in case it\n     * needs to be used in more super secure envs that do not want this.\n     * Also there should not be that many contexts in the page. Usually just\n     * one for the default context, but could be extra for multiversion cases\n     * or if a package needs a special context for a dependency that conflicts\n     * with the standard context.\n     */\n    function newContext(contextName) {\n        var context, resume,\n            config = {\n                waitSeconds: 7,\n                baseUrl: s.baseUrl || \"./\",\n                paths: {},\n                pkgs: {},\n                catchError: {}\n            },\n            defQueue = [],\n            specified = {\n                \"require\": true,\n                \"exports\": true,\n                \"module\": true\n            },\n            urlMap = {},\n            defined = {},\n            loaded = {},\n            waiting = {},\n            waitAry = [],\n            waitIdCounter = 0,\n            managerCallbacks = {},\n            plugins = {},\n            pluginsQueue = {},\n            resumeDepth = 0,\n            normalizedWaiting = {};\n\n        /**\n         * Trims the . and .. from an array of path segments.\n         * It will keep a leading path segment if a .. will become\n         * the first path segment, to help with module name lookups,\n         * which act like paths, but can be remapped. But the end result,\n         * all paths that use this function should look normalized.\n         * NOTE: this method MODIFIES the input array.\n         * @param {Array} ary the array of path segments.\n         */\n        function trimDots(ary) {\n            var i, part;\n            for (i = 0; (part = ary[i]); i++) {\n                if (part === \".\") {\n                    ary.splice(i, 1);\n                    i -= 1;\n                } else if (part === \"..\") {\n                    if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {\n                        //End of the line. Keep at least one non-dot\n                        //path segment at the front so it can be mapped\n                        //correctly to disk. Otherwise, there is likely\n                        //no path mapping for a path starting with '..'.\n                        //This can still fail, but catches the most reasonable\n                        //uses of ..\n                        break;\n                    } else if (i > 0) {\n                        ary.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n        }\n\n        /**\n         * Given a relative module name, like ./something, normalize it to\n         * a real name that can be mapped to a path.\n         * @param {String} name the relative name\n         * @param {String} baseName a real name that the name arg is relative\n         * to.\n         * @returns {String} normalized name\n         */\n        function normalize(name, baseName) {\n            var pkgName, pkgConfig;\n\n            //Adjust any relative paths.\n            if (name && name.charAt(0) === \".\") {\n                //If have a base name, try to normalize against it,\n                //otherwise, assume it is a top-level require that will\n                //be relative to baseUrl in the end.\n                if (baseName) {\n                    if (config.pkgs[baseName]) {\n                        //If the baseName is a package name, then just treat it as one\n                        //name to concat the name with.\n                        baseName = [baseName];\n                    } else {\n                        //Convert baseName to array, and lop off the last part,\n                        //so that . matches that \"directory\" and not name of the baseName's\n                        //module. For instance, baseName of \"one/two/three\", maps to\n                        //\"one/two/three.js\", but we want the directory, \"one/two\" for\n                        //this normalization.\n                        baseName = baseName.split(\"/\");\n                        baseName = baseName.slice(0, baseName.length - 1);\n                    }\n\n                    name = baseName.concat(name.split(\"/\"));\n                    trimDots(name);\n\n                    //Some use of packages may use a . path to reference the\n                    //\"main\" module name, so normalize for that.\n                    pkgConfig = config.pkgs[(pkgName = name[0])];\n                    name = name.join(\"/\");\n                    if (pkgConfig && name === pkgName + '/' + pkgConfig.main) {\n                        name = pkgName;\n                    }\n                }\n            }\n            return name;\n        }\n\n        /**\n         * Creates a module mapping that includes plugin prefix, module\n         * name, and path. If parentModuleMap is provided it will\n         * also normalize the name via require.normalize()\n         *\n         * @param {String} name the module name\n         * @param {String} [parentModuleMap] parent module map\n         * for the module name, used to resolve relative names.\n         *\n         * @returns {Object}\n         */\n        function makeModuleMap(name, parentModuleMap) {\n            var index = name ? name.indexOf(\"!\") : -1,\n                prefix = null,\n                parentName = parentModuleMap ? parentModuleMap.name : null,\n                originalName = name,\n                normalizedName, url, pluginModule;\n\n            if (index !== -1) {\n                prefix = name.substring(0, index);\n                name = name.substring(index + 1, name.length);\n            }\n\n            if (prefix) {\n                prefix = normalize(prefix, parentName);\n            }\n\n            //Account for relative paths if there is a base name.\n            if (name) {\n                if (prefix) {\n                    pluginModule = defined[prefix];\n                    if (pluginModule) {\n                        //Plugin is loaded, use its normalize method, otherwise,\n                        //normalize name as usual.\n                        if (pluginModule.normalize) {\n                            normalizedName = pluginModule.normalize(name, function (name) {\n                                return normalize(name, parentName);\n                            });\n                        } else {\n                            normalizedName = normalize(name, parentName);\n                        }\n                    } else {\n                        //Plugin is not loaded yet, so do not normalize\n                        //the name, wait for plugin to load to see if\n                        //it has a normalize method. To avoid possible\n                        //ambiguity with relative names loaded from another\n                        //plugin, use the parent's name as part of this name.\n                        normalizedName = '__$p' + parentName + '@' + (name || '');\n                    }\n                } else {\n                    normalizedName = normalize(name, parentName);\n                }\n\n                url = urlMap[normalizedName];\n                if (!url) {\n                    //Calculate url for the module, if it has a name.\n                    if (req.toModuleUrl) {\n                        //Special logic required for a particular engine,\n                        //like Node.\n                        url = req.toModuleUrl(context, normalizedName, parentModuleMap);\n                    } else {\n                        url = context.nameToUrl(normalizedName, null, parentModuleMap);\n                    }\n\n                    //Store the URL mapping for later.\n                    urlMap[normalizedName] = url;\n                }\n            }\n\n            return {\n                prefix: prefix,\n                name: normalizedName,\n                parentMap: parentModuleMap,\n                url: url,\n                originalName: originalName,\n                fullName: prefix ? prefix + \"!\" + (normalizedName || '') : normalizedName\n            };\n        }\n\n        /**\n         * Determine if priority loading is done. If so clear the priorityWait\n         */\n        function isPriorityDone() {\n            var priorityDone = true,\n                priorityWait = config.priorityWait,\n                priorityName, i;\n            if (priorityWait) {\n                for (i = 0; (priorityName = priorityWait[i]); i++) {\n                    if (!loaded[priorityName]) {\n                        priorityDone = false;\n                        break;\n                    }\n                }\n                if (priorityDone) {\n                    delete config.priorityWait;\n                }\n            }\n            return priorityDone;\n        }\n\n        /**\n         * Helper function that creates a setExports function for a \"module\"\n         * CommonJS dependency. Do this here to avoid creating a closure that\n         * is part of a loop.\n         */\n        function makeSetExports(moduleObj) {\n            return function (exports) {\n                moduleObj.exports = exports;\n            };\n        }\n\n        function makeContextModuleFunc(func, relModuleMap, enableBuildCallback) {\n            return function () {\n                //A version of a require function that passes a moduleName\n                //value for items that may need to\n                //look up paths relative to the moduleName\n                var args = [].concat(aps.call(arguments, 0)), lastArg;\n                if (enableBuildCallback &&\n                    isFunction((lastArg = args[args.length - 1]))) {\n                    lastArg.__requireJsBuild = true;\n                }\n                args.push(relModuleMap);\n                return func.apply(null, args);\n            };\n        }\n\n        /**\n         * Helper function that creates a require function object to give to\n         * modules that ask for it as a dependency. It needs to be specific\n         * per module because of the implication of path mappings that may\n         * need to be relative to the module name.\n         */\n        function makeRequire(relModuleMap, enableBuildCallback) {\n            var modRequire = makeContextModuleFunc(context.require, relModuleMap, enableBuildCallback);\n\n            mixin(modRequire, {\n                nameToUrl: makeContextModuleFunc(context.nameToUrl, relModuleMap),\n                toUrl: makeContextModuleFunc(context.toUrl, relModuleMap),\n                defined: makeContextModuleFunc(context.requireDefined, relModuleMap),\n                specified: makeContextModuleFunc(context.requireSpecified, relModuleMap),\n                ready: req.ready,\n                isBrowser: req.isBrowser\n            });\n            //Something used by node.\n            if (req.paths) {\n                modRequire.paths = req.paths;\n            }\n            return modRequire;\n        }\n\n        /**\n         * Used to update the normalized name for plugin-based dependencies\n         * after a plugin loads, since it can have its own normalization structure.\n         * @param {String} pluginName the normalized plugin module name.\n         */\n        function updateNormalizedNames(pluginName) {\n\n            var oldFullName, oldModuleMap, moduleMap, fullName, callbacks,\n                i, j, k, depArray, existingCallbacks,\n                maps = normalizedWaiting[pluginName];\n\n            if (maps) {\n                for (i = 0; (oldModuleMap = maps[i]); i++) {\n                    oldFullName = oldModuleMap.fullName;\n                    moduleMap = makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap);\n                    fullName = moduleMap.fullName;\n                    //Callbacks could be undefined if the same plugin!name was\n                    //required twice in a row, so use empty array in that case.\n                    callbacks = managerCallbacks[oldFullName] || [];\n                    existingCallbacks = managerCallbacks[fullName];\n\n                    if (fullName !== oldFullName) {\n                        //Update the specified object, but only if it is already\n                        //in there. In sync environments, it may not be yet.\n                        if (oldFullName in specified) {\n                            delete specified[oldFullName];\n                            specified[fullName] = true;\n                        }\n\n                        //Update managerCallbacks to use the correct normalized name.\n                        //If there are already callbacks for the normalized name,\n                        //just add to them.\n                        if (existingCallbacks) {\n                            managerCallbacks[fullName] = existingCallbacks.concat(callbacks);\n                        } else {\n                            managerCallbacks[fullName] = callbacks;\n                        }\n                        delete managerCallbacks[oldFullName];\n\n                        //In each manager callback, update the normalized name in the depArray.\n                        for (j = 0; j < callbacks.length; j++) {\n                            depArray = callbacks[j].depArray;\n                            for (k = 0; k < depArray.length; k++) {\n                                if (depArray[k] === oldFullName) {\n                                    depArray[k] = fullName;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n\n            delete normalizedWaiting[pluginName];\n        }\n\n        /*\n         * Queues a dependency for checking after the loader is out of a\n         * \"paused\" state, for example while a script file is being loaded\n         * in the browser, where it may have many modules defined in it.\n         *\n         * depName will be fully qualified, no relative . or .. path.\n         */\n        function queueDependency(dep) {\n            //Make sure to load any plugin and associate the dependency\n            //with that plugin.\n            var prefix = dep.prefix,\n                fullName = dep.fullName;\n\n            //Do not bother if the depName is already in transit\n            if (specified[fullName] || fullName in defined) {\n                return;\n            }\n\n            if (prefix && !plugins[prefix]) {\n                //Queue up loading of the dependency, track it\n                //via context.plugins. Mark it as a plugin so\n                //that the build system will know to treat it\n                //special.\n                plugins[prefix] = undefined;\n\n                //Remember this dep that needs to have normaliztion done\n                //after the plugin loads.\n                (normalizedWaiting[prefix] || (normalizedWaiting[prefix] = []))\n                    .push(dep);\n\n                //Register an action to do once the plugin loads, to update\n                //all managerCallbacks to use a properly normalized module\n                //name.\n                (managerCallbacks[prefix] ||\n                (managerCallbacks[prefix] = [])).push({\n                    onDep: function (name, value) {\n                        if (name === prefix) {\n                            updateNormalizedNames(prefix);\n                        }\n                    }\n                });\n\n                queueDependency(makeModuleMap(prefix));\n            }\n\n            context.paused.push(dep);\n        }\n\n        function execManager(manager) {\n            var i, ret, waitingCallbacks, err, errFile,\n                cb = manager.callback,\n                fullName = manager.fullName,\n                args = [],\n                ary = manager.depArray;\n\n            //Call the callback to define the module, if necessary.\n            if (cb && isFunction(cb)) {\n                //Pull out the defined dependencies and pass the ordered\n                //values to the callback.\n                if (ary) {\n                    for (i = 0; i < ary.length; i++) {\n                        args.push(manager.deps[ary[i]]);\n                    }\n                }\n\n                if (config.catchError.define) {\n                    try {\n                        ret = req.execCb(fullName, manager.callback, args, defined[fullName]);\n                    } catch (e) {\n                        err = e;\n                    }\n                } else {\n                    ret = req.execCb(fullName, manager.callback, args, defined[fullName]);\n                }\n\n                if (fullName) {\n                    //If setting exports via \"module\" is in play,\n                    //favor that over return value and exports. After that,\n                    //favor a non-undefined return value over exports use.\n                    if (manager.cjsModule && manager.cjsModule.exports !== undefined) {\n                        ret = defined[fullName] = manager.cjsModule.exports;\n                    } else if (ret === undefined && manager.usingExports) {\n                        //exports already set the defined value.\n                        ret = defined[fullName];\n                    } else {\n                        //Use the return value from the function.\n                        defined[fullName] = ret;\n                    }\n                }\n            } else if (fullName) {\n                //May just be an object definition for the module. Only\n                //worry about defining if have a module name.\n                ret = defined[fullName] = cb;\n            }\n\n            //Clean up waiting. Do this before error calls, and before\n            //calling back waitingCallbacks, so that bookkeeping is correct\n            //in the event of an error and error is reported in correct order,\n            //since the waitingCallbacks will likely have errors if the\n            //onError function does not throw.\n            if (waiting[manager.waitId]) {\n                delete waiting[manager.waitId];\n                manager.isDone = true;\n                context.waitCount -= 1;\n                if (context.waitCount === 0) {\n                    //Clear the wait array used for cycles.\n                    waitAry = [];\n                }\n            }\n\n            if (err) {\n                errFile = (fullName ? makeModuleMap(fullName).url : '') ||\n                           err.fileName || err.sourceURL;\n                err = makeError('defineerror', 'Error evaluating ' +\n                                'module \"' + fullName + '\" at location \"' +\n                                errFile + '\":\\n' +\n                                err + '\\nfileName:' + errFile +\n                                '\\nlineNumber: ' + (err.lineNumber || err.line), err);\n                err.moduleName = fullName;\n                return req.onError(err);\n            }\n\n            if (fullName) {\n                //If anything was waiting for this module to be defined,\n                //notify them now.\n                waitingCallbacks = managerCallbacks[fullName];\n                if (waitingCallbacks) {\n                    for (i = 0; i < waitingCallbacks.length; i++) {\n                        waitingCallbacks[i].onDep(fullName, ret);\n                    }\n                    delete managerCallbacks[fullName];\n                }\n            }\n\n            return undefined;\n        }\n\n        function main(inName, depArray, callback, relModuleMap) {\n            var moduleMap = makeModuleMap(inName, relModuleMap),\n                name = moduleMap.name,\n                fullName = moduleMap.fullName,\n                uniques = {},\n                manager = {\n                    //Use a wait ID because some entries are anon\n                    //async require calls.\n                    waitId: name || reqWaitIdPrefix + (waitIdCounter++),\n                    depCount: 0,\n                    depMax: 0,\n                    prefix: moduleMap.prefix,\n                    name: name,\n                    fullName: fullName,\n                    deps: {},\n                    depArray: depArray,\n                    callback: callback,\n                    onDep: function (depName, value) {\n                        if (!(depName in manager.deps)) {\n                            manager.deps[depName] = value;\n                            manager.depCount += 1;\n                            if (manager.depCount === manager.depMax) {\n                                //All done, execute!\n                                execManager(manager);\n                            }\n                        }\n                    }\n                },\n                i, depArg, depName, cjsMod;\n\n            if (fullName) {\n                //If module already defined for context, or already loaded,\n                //then leave. Also leave if jQuery is registering but it does\n                //not match the desired version number in the config.\n                if (fullName in defined || loaded[fullName] === true ||\n                    (fullName === \"jquery\" && config.jQuery &&\n                     config.jQuery !== callback().fn.jquery)) {\n                    return;\n                }\n\n                //Set specified/loaded here for modules that are also loaded\n                //as part of a layer, where onScriptLoad is not fired\n                //for those cases. Do this after the inline define and\n                //dependency tracing is done.\n                specified[fullName] = true;\n                loaded[fullName] = true;\n\n                //If module is jQuery set up delaying its dom ready listeners.\n                if (fullName === \"jquery\" && callback) {\n                    jQueryCheck(callback());\n                }\n            }\n\n            //Add the dependencies to the deps field, and register for callbacks\n            //on the dependencies.\n            for (i = 0; i < depArray.length; i++) {\n                depArg = depArray[i];\n                //There could be cases like in IE, where a trailing comma will\n                //introduce a null dependency, so only treat a real dependency\n                //value as a dependency.\n                if (depArg) {\n                    //Split the dependency name into plugin and name parts\n                    depArg = makeModuleMap(depArg, (name ? moduleMap : relModuleMap));\n                    depName = depArg.fullName;\n\n                    //Fix the name in depArray to be just the name, since\n                    //that is how it will be called back later.\n                    depArray[i] = depName;\n\n                    //Fast path CommonJS standard dependencies.\n                    if (depName === \"require\") {\n                        manager.deps[depName] = makeRequire(moduleMap);\n                    } else if (depName === \"exports\") {\n                        //CommonJS module spec 1.1\n                        manager.deps[depName] = defined[fullName] = {};\n                        manager.usingExports = true;\n                    } else if (depName === \"module\") {\n                        //CommonJS module spec 1.1\n                        manager.cjsModule = cjsMod = manager.deps[depName] = {\n                            id: name,\n                            uri: name ? context.nameToUrl(name, null, relModuleMap) : undefined,\n                            exports: defined[fullName]\n                        };\n                        cjsMod.setExports = makeSetExports(cjsMod);\n                    } else if (depName in defined && !(depName in waiting)) {\n                        //Module already defined, no need to wait for it.\n                        manager.deps[depName] = defined[depName];\n                    } else if (!uniques[depName]) {\n\n                        //A dynamic dependency.\n                        manager.depMax += 1;\n\n                        queueDependency(depArg);\n\n                        //Register to get notification when dependency loads.\n                        (managerCallbacks[depName] ||\n                        (managerCallbacks[depName] = [])).push(manager);\n\n                        uniques[depName] = true;\n                    }\n                }\n            }\n\n            //Do not bother tracking the manager if it is all done.\n            if (manager.depCount === manager.depMax) {\n                //All done, execute!\n                execManager(manager);\n            } else {\n                waiting[manager.waitId] = manager;\n                waitAry.push(manager);\n                context.waitCount += 1;\n            }\n        }\n\n        /**\n         * Convenience method to call main for a define call that was put on\n         * hold in the defQueue.\n         */\n        function callDefMain(args) {\n            main.apply(null, args);\n            //Mark the module loaded. Must do it here in addition\n            //to doing it in define in case a script does\n            //not call define\n            loaded[args[0]] = true;\n        }\n\n        /**\n         * jQuery 1.4.3+ supports ways to hold off calling\n         * calling jQuery ready callbacks until all scripts are loaded. Be sure\n         * to track it if the capability exists.. Also, since jQuery 1.4.3 does\n         * not register as a module, need to do some global inference checking.\n         * Even if it does register as a module, not guaranteed to be the precise\n         * name of the global. If a jQuery is tracked for this context, then go\n         * ahead and register it as a module too, if not already in process.\n         */\n        jQueryCheck = function (jqCandidate) {\n            if (!context.jQuery) {\n                var $ = jqCandidate || (typeof jQuery !== \"undefined\" ? jQuery : null);\n\n                if ($) {\n                    //If a specific version of jQuery is wanted, make sure to only\n                    //use this jQuery if it matches.\n                    if (config.jQuery && $.fn.jquery !== config.jQuery) {\n                        return;\n                    }\n\n                    if (\"holdReady\" in $ || \"readyWait\" in $) {\n                        context.jQuery = $;\n\n                        //Manually create a \"jquery\" module entry if not one already\n                        //or in process. Note this could trigger an attempt at\n                        //a second jQuery registration, but does no harm since\n                        //the first one wins, and it is the same value anyway.\n                        callDefMain([\"jquery\", [], function () {\n                            return jQuery;\n                        }]);\n\n                        //Ask jQuery to hold DOM ready callbacks.\n                        if (context.scriptCount) {\n                            jQueryHoldReady($, true);\n                            context.jQueryIncremented = true;\n                        }\n                    }\n                }\n            }\n        };\n\n        function forceExec(manager, traced) {\n            if (manager.isDone) {\n                return undefined;\n            }\n\n            var fullName = manager.fullName,\n                depArray = manager.depArray,\n                depName, i;\n            if (fullName) {\n                if (traced[fullName]) {\n                    return defined[fullName];\n                }\n\n                traced[fullName] = true;\n            }\n\n            //forceExec all of its dependencies.\n            for (i = 0; i < depArray.length; i++) {\n                //Some array members may be null, like if a trailing comma\n                //IE, so do the explicit [i] access and check if it has a value.\n                depName = depArray[i];\n                if (depName) {\n                    if (!manager.deps[depName] && waiting[depName]) {\n                        manager.onDep(depName, forceExec(waiting[depName], traced));\n                    }\n                }\n            }\n\n            return fullName ? defined[fullName] : undefined;\n        }\n\n        /**\n         * Checks if all modules for a context are loaded, and if so, evaluates the\n         * new ones in right dependency order.\n         *\n         * @private\n         */\n        function checkLoaded() {\n            var waitInterval = config.waitSeconds * 1000,\n                //It is possible to disable the wait interval by using waitSeconds of 0.\n                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),\n                noLoads = \"\", hasLoadedProp = false, stillLoading = false, prop,\n                err, manager;\n\n            //If there are items still in the paused queue processing wait.\n            //This is particularly important in the sync case where each paused\n            //item is processed right away but there may be more waiting.\n            if (context.pausedCount > 0) {\n                return undefined;\n            }\n\n            //Determine if priority loading is done. If so clear the priority. If\n            //not, then do not check\n            if (config.priorityWait) {\n                if (isPriorityDone()) {\n                    //Call resume, since it could have\n                    //some waiting dependencies to trace.\n                    resume();\n                } else {\n                    return undefined;\n                }\n            }\n\n            //See if anything is still in flight.\n            for (prop in loaded) {\n                if (!(prop in empty)) {\n                    hasLoadedProp = true;\n                    if (!loaded[prop]) {\n                        if (expired) {\n                            noLoads += prop + \" \";\n                        } else {\n                            stillLoading = true;\n                            break;\n                        }\n                    }\n                }\n            }\n\n            //Check for exit conditions.\n            if (!hasLoadedProp && !context.waitCount) {\n                //If the loaded object had no items, then the rest of\n                //the work below does not need to be done.\n                return undefined;\n            }\n            if (expired && noLoads) {\n                //If wait time expired, throw error of unloaded modules.\n                err = makeError(\"timeout\", \"Load timeout for modules: \" + noLoads);\n                err.requireType = \"timeout\";\n                err.requireModules = noLoads;\n                return req.onError(err);\n            }\n            if (stillLoading || context.scriptCount) {\n                //Something is still waiting to load. Wait for it, but only\n                //if a timeout is not already in effect.\n                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {\n                    checkLoadedTimeoutId = setTimeout(function () {\n                        checkLoadedTimeoutId = 0;\n                        checkLoaded();\n                    }, 50);\n                }\n                return undefined;\n            }\n\n            //If still have items in the waiting cue, but all modules have\n            //been loaded, then it means there are some circular dependencies\n            //that need to be broken.\n            //However, as a waiting thing is fired, then it can add items to\n            //the waiting cue, and those items should not be fired yet, so\n            //make sure to redo the checkLoaded call after breaking a single\n            //cycle, if nothing else loaded then this logic will pick it up\n            //again.\n            if (context.waitCount) {\n                //Cycle through the waitAry, and call items in sequence.\n                for (i = 0; (manager = waitAry[i]); i++) {\n                    forceExec(manager, {});\n                }\n\n                //Only allow this recursion to a certain depth. Only\n                //triggered by errors in calling a module in which its\n                //modules waiting on it cannot finish loading, or some circular\n                //dependencies that then may add more dependencies.\n                //The value of 5 is a bit arbitrary. Hopefully just one extra\n                //pass, or two for the case of circular dependencies generating\n                //more work that gets resolved in the sync node case.\n                if (checkLoadedDepth < 5) {\n                    checkLoadedDepth += 1;\n                    checkLoaded();\n                }\n            }\n\n            checkLoadedDepth = 0;\n\n            //Check for DOM ready, and nothing is waiting across contexts.\n            req.checkReadyState();\n\n            return undefined;\n        }\n\n        function callPlugin(pluginName, dep) {\n            var name = dep.name,\n                fullName = dep.fullName,\n                load;\n\n            //Do not bother if plugin is already defined or being loaded.\n            if (fullName in defined || fullName in loaded) {\n                return;\n            }\n\n            if (!plugins[pluginName]) {\n                plugins[pluginName] = defined[pluginName];\n            }\n\n            //Only set loaded to false for tracking if it has not already been set.\n            if (!loaded[fullName]) {\n                loaded[fullName] = false;\n            }\n\n            load = function (ret) {\n                //Allow the build process to register plugin-loaded dependencies.\n                if (req.onPluginLoad) {\n                    req.onPluginLoad(context, pluginName, name, ret);\n                }\n\n                execManager({\n                    prefix: dep.prefix,\n                    name: dep.name,\n                    fullName: dep.fullName,\n                    callback: function () {\n                        return ret;\n                    }\n                });\n                loaded[fullName] = true;\n            };\n\n            //Allow plugins to load other code without having to know the\n            //context or how to \"complete\" the load.\n            load.fromText = function (moduleName, text) {\n                /*jslint evil: true */\n                var hasInteractive = useInteractive;\n\n                //Indicate a the module is in process of loading.\n                context.loaded[moduleName] = false;\n                context.scriptCount += 1;\n\n                //Turn off interactive script matching for IE for any define\n                //calls in the text, then turn it back on at the end.\n                if (hasInteractive) {\n                    useInteractive = false;\n                }\n\n                req.exec(text);\n\n                if (hasInteractive) {\n                    useInteractive = true;\n                }\n\n                //Support anonymous modules.\n                context.completeLoad(moduleName);\n            };\n\n            //Use parentName here since the plugin's name is not reliable,\n            //could be some weird string with no path that actually wants to\n            //reference the parentName's path.\n            plugins[pluginName].load(name, makeRequire(dep.parentMap, true), load, config);\n        }\n\n        function loadPaused(dep) {\n            //Renormalize dependency if its name was waiting on a plugin\n            //to load, which as since loaded.\n            if (dep.prefix && dep.name && dep.name.indexOf('__$p') === 0 && defined[dep.prefix]) {\n                dep = makeModuleMap(dep.originalName, dep.parentMap);\n            }\n\n            var pluginName = dep.prefix,\n                fullName = dep.fullName,\n                urlFetched = context.urlFetched;\n\n            //Do not bother if the dependency has already been specified.\n            if (specified[fullName] || loaded[fullName]) {\n                return;\n            } else {\n                specified[fullName] = true;\n            }\n\n            if (pluginName) {\n                //If plugin not loaded, wait for it.\n                //set up callback list. if no list, then register\n                //managerCallback for that plugin.\n                if (defined[pluginName]) {\n                    callPlugin(pluginName, dep);\n                } else {\n                    if (!pluginsQueue[pluginName]) {\n                        pluginsQueue[pluginName] = [];\n                        (managerCallbacks[pluginName] ||\n                        (managerCallbacks[pluginName] = [])).push({\n                            onDep: function (name, value) {\n                                if (name === pluginName) {\n                                    var i, oldModuleMap, ary = pluginsQueue[pluginName];\n\n                                    //Now update all queued plugin actions.\n                                    for (i = 0; i < ary.length; i++) {\n                                        oldModuleMap = ary[i];\n                                        //Update the moduleMap since the\n                                        //module name may be normalized\n                                        //differently now.\n                                        callPlugin(pluginName,\n                                                   makeModuleMap(oldModuleMap.originalName, oldModuleMap.parentMap));\n                                    }\n                                    delete pluginsQueue[pluginName];\n                                }\n                            }\n                        });\n                    }\n                    pluginsQueue[pluginName].push(dep);\n                }\n            } else {\n                if (!urlFetched[dep.url]) {\n                    req.load(context, fullName, dep.url);\n                    urlFetched[dep.url] = true;\n                }\n            }\n        }\n\n        /**\n         * Resumes tracing of dependencies and then checks if everything is loaded.\n         */\n        resume = function () {\n            var args, i, p;\n\n            resumeDepth += 1;\n\n            if (context.scriptCount <= 0) {\n                //Synchronous envs will push the number below zero with the\n                //decrement above, be sure to set it back to zero for good measure.\n                //require() calls that also do not end up loading scripts could\n                //push the number negative too.\n                context.scriptCount = 0;\n            }\n\n            //Make sure any remaining defQueue items get properly processed.\n            while (defQueue.length) {\n                args = defQueue.shift();\n                if (args[0] === null) {\n                    return req.onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));\n                } else {\n                    callDefMain(args);\n                }\n            }\n\n            //Skip the resume of paused dependencies\n            //if current context is in priority wait.\n            if (!config.priorityWait || isPriorityDone()) {\n                while (context.paused.length) {\n                    p = context.paused;\n                    context.pausedCount += p.length;\n                    //Reset paused list\n                    context.paused = [];\n\n                    for (i = 0; (args = p[i]); i++) {\n                        loadPaused(args);\n                    }\n                    //Move the start time for timeout forward.\n                    context.startTime = (new Date()).getTime();\n                    context.pausedCount -= p.length;\n                }\n            }\n\n            //Only check if loaded when resume depth is 1. It is likely that\n            //it is only greater than 1 in sync environments where a factory\n            //function also then calls the callback-style require. In those\n            //cases, the checkLoaded should not occur until the resume\n            //depth is back at the top level.\n            if (resumeDepth === 1) {\n                checkLoaded();\n            }\n\n            resumeDepth -= 1;\n\n            return undefined;\n        };\n\n        //Define the context object. Many of these fields are on here\n        //just to make debugging easier.\n        context = {\n            contextName: contextName,\n            config: config,\n            defQueue: defQueue,\n            waiting: waiting,\n            waitCount: 0,\n            specified: specified,\n            loaded: loaded,\n            urlMap: urlMap,\n            scriptCount: 0,\n            urlFetched: {},\n            defined: defined,\n            paused: [],\n            pausedCount: 0,\n            plugins: plugins,\n            managerCallbacks: managerCallbacks,\n            makeModuleMap: makeModuleMap,\n            normalize: normalize,\n            /**\n             * Set a configuration for the context.\n             * @param {Object} cfg config object to integrate.\n             */\n            configure: function (cfg) {\n                var paths, prop, packages, pkgs, packagePaths, requireWait;\n\n                //Make sure the baseUrl ends in a slash.\n                if (cfg.baseUrl) {\n                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== \"/\") {\n                        cfg.baseUrl += \"/\";\n                    }\n                }\n\n                //Save off the paths and packages since they require special processing,\n                //they are additive.\n                paths = config.paths;\n                packages = config.packages;\n                pkgs = config.pkgs;\n\n                //Mix in the config values, favoring the new values over\n                //existing ones in context.config.\n                mixin(config, cfg, true);\n\n                //Adjust paths if necessary.\n                if (cfg.paths) {\n                    for (prop in cfg.paths) {\n                        if (!(prop in empty)) {\n                            paths[prop] = cfg.paths[prop];\n                        }\n                    }\n                    config.paths = paths;\n                }\n\n                packagePaths = cfg.packagePaths;\n                if (packagePaths || cfg.packages) {\n                    //Convert packagePaths into a packages config.\n                    if (packagePaths) {\n                        for (prop in packagePaths) {\n                            if (!(prop in empty)) {\n                                configurePackageDir(pkgs, packagePaths[prop], prop);\n                            }\n                        }\n                    }\n\n                    //Adjust packages if necessary.\n                    if (cfg.packages) {\n                        configurePackageDir(pkgs, cfg.packages);\n                    }\n\n                    //Done with modifications, assing packages back to context config\n                    config.pkgs = pkgs;\n                }\n\n                //If priority loading is in effect, trigger the loads now\n                if (cfg.priority) {\n                    //Hold on to requireWait value, and reset it after done\n                    requireWait = context.requireWait;\n\n                    //Allow tracing some require calls to allow the fetching\n                    //of the priority config.\n                    context.requireWait = false;\n\n                    //But first, call resume to register any defined modules that may\n                    //be in a data-main built file before the priority config\n                    //call. Also grab any waiting define calls for this context.\n                    context.takeGlobalQueue();\n                    resume();\n\n                    context.require(cfg.priority);\n\n                    //Trigger a resume right away, for the case when\n                    //the script with the priority load is done as part\n                    //of a data-main call. In that case the normal resume\n                    //call will not happen because the scriptCount will be\n                    //at 1, since the script for data-main is being processed.\n                    resume();\n\n                    //Restore previous state.\n                    context.requireWait = requireWait;\n                    config.priorityWait = cfg.priority;\n                }\n\n                //If a deps array or a config callback is specified, then call\n                //require with those args. This is useful when require is defined as a\n                //config object before require.js is loaded.\n                if (cfg.deps || cfg.callback) {\n                    context.require(cfg.deps || [], cfg.callback);\n                }\n\n                //Set up ready callback, if asked. Useful when require is defined as a\n                //config object before require.js is loaded.\n                if (cfg.ready) {\n                    req.ready(cfg.ready);\n                }\n            },\n\n            requireDefined: function (moduleName, relModuleMap) {\n                return makeModuleMap(moduleName, relModuleMap).fullName in defined;\n            },\n\n            requireSpecified: function (moduleName, relModuleMap) {\n                return makeModuleMap(moduleName, relModuleMap).fullName in specified;\n            },\n\n            require: function (deps, callback, relModuleMap) {\n                var moduleName, fullName, moduleMap;\n                if (typeof deps === \"string\") {\n                    //Synchronous access to one module. If require.get is\n                    //available (as in the Node adapter), prefer that.\n                    //In this case deps is the moduleName and callback is\n                    //the relModuleMap\n                    if (req.get) {\n                        return req.get(context, deps, callback);\n                    }\n\n                    //Just return the module wanted. In this scenario, the\n                    //second arg (if passed) is just the relModuleMap.\n                    moduleName = deps;\n                    relModuleMap = callback;\n\n                    //Normalize module name, if it contains . or ..\n                    moduleMap = makeModuleMap(moduleName, relModuleMap);\n                    fullName = moduleMap.fullName;\n\n                    if (!(fullName in defined)) {\n                        return req.onError(makeError(\"notloaded\", \"Module name '\" +\n                                    moduleMap.fullName +\n                                    \"' has not been loaded yet for context: \" +\n                                    contextName));\n                    }\n                    return defined[fullName];\n                }\n\n                main(null, deps, callback, relModuleMap);\n\n                //If the require call does not trigger anything new to load,\n                //then resume the dependency processing.\n                if (!context.requireWait) {\n                    while (!context.scriptCount && context.paused.length) {\n                        //For built layers, there can be some defined\n                        //modules waiting for intake into the context,\n                        //in particular module plugins. Take them.\n                        context.takeGlobalQueue();\n                        resume();\n                    }\n                }\n                return context.require;\n            },\n\n            /**\n             * Internal method to transfer globalQueue items to this context's\n             * defQueue.\n             */\n            takeGlobalQueue: function () {\n                //Push all the globalDefQueue items into the context's defQueue\n                if (globalDefQueue.length) {\n                    //Array splice in the values since the context code has a\n                    //local var ref to defQueue, so cannot just reassign the one\n                    //on context.\n                    apsp.apply(context.defQueue,\n                               [context.defQueue.length - 1, 0].concat(globalDefQueue));\n                    globalDefQueue = [];\n                }\n            },\n\n            /**\n             * Internal method used by environment adapters to complete a load event.\n             * A load event could be a script load or just a load pass from a synchronous\n             * load call.\n             * @param {String} moduleName the name of the module to potentially complete.\n             */\n            completeLoad: function (moduleName) {\n                var args;\n\n                context.takeGlobalQueue();\n\n                while (defQueue.length) {\n                    args = defQueue.shift();\n\n                    if (args[0] === null) {\n                        args[0] = moduleName;\n                        break;\n                    } else if (args[0] === moduleName) {\n                        //Found matching define call for this script!\n                        break;\n                    } else {\n                        //Some other named define call, most likely the result\n                        //of a build layer that included many define calls.\n                        callDefMain(args);\n                        args = null;\n                    }\n                }\n                if (args) {\n                    callDefMain(args);\n                } else {\n                    //A script that does not call define(), so just simulate\n                    //the call for it. Special exception for jQuery dynamic load.\n                    callDefMain([moduleName, [],\n                                moduleName === \"jquery\" && typeof jQuery !== \"undefined\" ?\n                                function () {\n                                    return jQuery;\n                                } : null]);\n                }\n\n                //Mark the script as loaded. Note that this can be different from a\n                //moduleName that maps to a define call. This line is important\n                //for traditional browser scripts.\n                loaded[moduleName] = true;\n\n                //If a global jQuery is defined, check for it. Need to do it here\n                //instead of main() since stock jQuery does not register as\n                //a module via define.\n                jQueryCheck();\n\n                //Doing this scriptCount decrement branching because sync envs\n                //need to decrement after resume, otherwise it looks like\n                //loading is complete after the first dependency is fetched.\n                //For browsers, it works fine to decrement after, but it means\n                //the checkLoaded setTimeout 50 ms cost is taken. To avoid\n                //that cost, decrement beforehand.\n                if (req.isAsync) {\n                    context.scriptCount -= 1;\n                }\n                resume();\n                if (!req.isAsync) {\n                    context.scriptCount -= 1;\n                }\n            },\n\n            /**\n             * Converts a module name + .extension into an URL path.\n             * *Requires* the use of a module name. It does not support using\n             * plain URLs like nameToUrl.\n             */\n            toUrl: function (moduleNamePlusExt, relModuleMap) {\n                var index = moduleNamePlusExt.lastIndexOf(\".\"),\n                    ext = null;\n\n                if (index !== -1) {\n                    ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);\n                    moduleNamePlusExt = moduleNamePlusExt.substring(0, index);\n                }\n\n                return context.nameToUrl(moduleNamePlusExt, ext, relModuleMap);\n            },\n\n            /**\n             * Converts a module name to a file path. Supports cases where\n             * moduleName may actually be just an URL.\n             */\n            nameToUrl: function (moduleName, ext, relModuleMap) {\n                var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url,\n                    config = context.config;\n\n                //Normalize module name if have a base relative module name to work from.\n                moduleName = normalize(moduleName, relModuleMap && relModuleMap.fullName);\n\n                //If a colon is in the URL, it indicates a protocol is used and it is just\n                //an URL to a file, or if it starts with a slash or ends with .js, it is just a plain file.\n                //The slash is important for protocol-less URLs as well as full paths.\n                if (req.jsExtRegExp.test(moduleName)) {\n                    //Just a plain path, not module name lookup, so just return it.\n                    //Add extension if it is included. This is a bit wonky, only non-.js things pass\n                    //an extension, this method probably needs to be reworked.\n                    url = moduleName + (ext ? ext : \"\");\n                } else {\n                    //A module that needs to be converted to a path.\n                    paths = config.paths;\n                    pkgs = config.pkgs;\n\n                    syms = moduleName.split(\"/\");\n                    //For each module name segment, see if there is a path\n                    //registered for it. Start with most specific name\n                    //and work up from it.\n                    for (i = syms.length; i > 0; i--) {\n                        parentModule = syms.slice(0, i).join(\"/\");\n                        if (paths[parentModule]) {\n                            syms.splice(0, i, paths[parentModule]);\n                            break;\n                        } else if ((pkg = pkgs[parentModule])) {\n                            //If module name is just the package name, then looking\n                            //for the main module.\n                            if (moduleName === pkg.name) {\n                                pkgPath = pkg.location + '/' + pkg.main;\n                            } else {\n                                pkgPath = pkg.location;\n                            }\n                            syms.splice(0, i, pkgPath);\n                            break;\n                        }\n                    }\n\n                    //Join the path parts together, then figure out if baseUrl is needed.\n                    url = syms.join(\"/\") + (ext || \".js\");\n                    url = (url.charAt(0) === '/' || url.match(/^\\w+:/) ? \"\" : config.baseUrl) + url;\n                }\n\n                return config.urlArgs ? url +\n                                        ((url.indexOf('?') === -1 ? '?' : '&') +\n                                         config.urlArgs) : url;\n            }\n        };\n\n        //Make these visible on the context so can be called at the very\n        //end of the file to bootstrap\n        context.jQueryCheck = jQueryCheck;\n        context.resume = resume;\n\n        return context;\n    }\n\n    /**\n     * Main entry point.\n     *\n     * If the only argument to require is a string, then the module that\n     * is represented by that string is fetched for the appropriate context.\n     *\n     * If the first argument is an array, then it will be treated as an array\n     * of dependency string names to fetch. An optional function callback can\n     * be specified to execute when all of those dependencies are available.\n     *\n     * Make a local req variable to help Caja compliance (it assumes things\n     * on a require that are not standardized), and to give a short\n     * name for minification/local scope use.\n     */\n    req = requirejs = function (deps, callback) {\n\n        //Find the right context, use default\n        var contextName = defContextName,\n            context, config;\n\n        // Determine if have config object in the call.\n        if (!isArray(deps) && typeof deps !== \"string\") {\n            // deps is a config object\n            config = deps;\n            if (isArray(callback)) {\n                // Adjust args if there are dependencies\n                deps = callback;\n                callback = arguments[2];\n            } else {\n                deps = [];\n            }\n        }\n\n        if (config && config.context) {\n            contextName = config.context;\n        }\n\n        context = contexts[contextName] ||\n                  (contexts[contextName] = newContext(contextName));\n\n        if (config) {\n            context.configure(config);\n        }\n\n        return context.require(deps, callback);\n    };\n\n    /**\n     * Support require.config() to make it easier to cooperate with other\n     * AMD loaders on globally agreed names.\n     */\n    req.config = function (config) {\n        return req(config);\n    };\n\n    /**\n     * Export require as a global, but only if it does not already exist.\n     */\n    if (typeof require === \"undefined\") {\n        require = req;\n    }\n\n    /**\n     * Global require.toUrl(), to match global require, mostly useful\n     * for debugging/work in the global space.\n     */\n    req.toUrl = function (moduleNamePlusExt) {\n        return contexts[defContextName].toUrl(moduleNamePlusExt);\n    };\n\n    req.version = version;\n    req.isArray = isArray;\n    req.isFunction = isFunction;\n    req.mixin = mixin;\n    //Used to filter out dependencies that are already paths.\n    req.jsExtRegExp = /^\\/|:|\\?|\\.js$/;\n    s = req.s = {\n        contexts: contexts,\n        //Stores a list of URLs that should not get async script tag treatment.\n        skipAsync: {},\n        isPageLoaded: !isBrowser,\n        readyCalls: []\n    };\n\n    req.isAsync = req.isBrowser = isBrowser;\n    if (isBrowser) {\n        head = s.head = document.getElementsByTagName(\"head\")[0];\n        //If BASE tag is in play, using appendChild is a problem for IE6.\n        //When that browser dies, this can be removed. Details in this jQuery bug:\n        //http://dev.jquery.com/ticket/2709\n        baseElement = document.getElementsByTagName(\"base\")[0];\n        if (baseElement) {\n            head = s.head = baseElement.parentNode;\n        }\n    }\n\n    /**\n     * Any errors that require explicitly generates will be passed to this\n     * function. Intercept/override it if you want custom error handling.\n     * @param {Error} err the error object.\n     */\n    req.onError = function (err) {\n        throw err;\n    };\n\n    /**\n     * Does the request to load a module for the browser case.\n     * Make this a separate function to allow other environments\n     * to override it.\n     *\n     * @param {Object} context the require context to find state.\n     * @param {String} moduleName the name of the module.\n     * @param {Object} url the URL to the module.\n     */\n    req.load = function (context, moduleName, url) {\n        var loaded = context.loaded;\n\n        isDone = false;\n\n        //Only set loaded to false for tracking if it has not already been set.\n        if (!loaded[moduleName]) {\n            loaded[moduleName] = false;\n        }\n\n        context.scriptCount += 1;\n        req.attach(url, context, moduleName);\n\n        //If tracking a jQuery, then make sure its ready callbacks\n        //are put on hold to prevent its ready callbacks from\n        //triggering too soon.\n        if (context.jQuery && !context.jQueryIncremented) {\n            jQueryHoldReady(context.jQuery, true);\n            context.jQueryIncremented = true;\n        }\n    };\n\n    function getInteractiveScript() {\n        var scripts, i, script;\n        if (interactiveScript && interactiveScript.readyState === 'interactive') {\n            return interactiveScript;\n        }\n\n        scripts = document.getElementsByTagName('script');\n        for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) {\n            if (script.readyState === 'interactive') {\n                return (interactiveScript = script);\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * The function that handles definitions of modules. Differs from\n     * require() in that a string for the module should be the first argument,\n     * and the function to execute after dependencies are loaded should\n     * return a value to define the module corresponding to the first argument's\n     * name.\n     */\n    define = req.def = function (name, deps, callback) {\n        var node, context;\n\n        //Allow for anonymous functions\n        if (typeof name !== 'string') {\n            //Adjust args appropriately\n            callback = deps;\n            deps = name;\n            name = null;\n        }\n\n        //This module may not have dependencies\n        if (!req.isArray(deps)) {\n            callback = deps;\n            deps = [];\n        }\n\n        //If no name, and callback is a function, then figure out if it a\n        //CommonJS thing with dependencies.\n        if (!name && !deps.length && req.isFunction(callback)) {\n            //Remove comments from the callback string,\n            //look for require calls, and pull them into the dependencies,\n            //but only if there are function args.\n            if (callback.length) {\n                callback\n                    .toString()\n                    .replace(commentRegExp, \"\")\n                    .replace(cjsRequireRegExp, function (match, dep) {\n                        deps.push(dep);\n                    });\n\n                //May be a CommonJS thing even without require calls, but still\n                //could use exports, and module. Avoid doing exports and module\n                //work though if it just needs require.\n                //REQUIRES the function to expect the CommonJS variables in the\n                //order listed below.\n                deps = (callback.length === 1 ? [\"require\"] : [\"require\", \"exports\", \"module\"]).concat(deps);\n            }\n        }\n\n        //If in IE 6-8 and hit an anonymous define() call, do the interactive\n        //work.\n        if (useInteractive) {\n            node = currentlyAddingScript || getInteractiveScript();\n            if (node) {\n                if (!name) {\n                    name = node.getAttribute(\"data-requiremodule\");\n                }\n                context = contexts[node.getAttribute(\"data-requirecontext\")];\n            }\n        }\n\n        //Always save off evaluating the def call until the script onload handler.\n        //This allows multiple modules to be in a file without prematurely\n        //tracing dependencies, and allows for anonymous module support,\n        //where the module name is not known until the script onload event\n        //occurs. If no context, use the global queue, and get it processed\n        //in the onscript load callback.\n        (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);\n\n        return undefined;\n    };\n\n    define.amd = {\n        multiversion: true,\n        plugins: true,\n        jQuery: true\n    };\n\n    /**\n     * Executes the text. Normally just uses eval, but can be modified\n     * to use a more environment specific call.\n     * @param {String} text the text to execute/evaluate.\n     */\n    req.exec = function (text) {\n        return eval(text);\n    };\n\n    /**\n     * Executes a module callack function. Broken out as a separate function\n     * solely to allow the build system to sequence the files in the built\n     * layer in the right sequence.\n     *\n     * @private\n     */\n    req.execCb = function (name, callback, args, exports) {\n        return callback.apply(exports, args);\n    };\n\n    /**\n     * callback for script loads, used to check status of loading.\n     *\n     * @param {Event} evt the event from the browser for the script\n     * that was loaded.\n     *\n     * @private\n     */\n    req.onScriptLoad = function (evt) {\n        //Using currentTarget instead of target for Firefox 2.0's sake. Not\n        //all old browsers will be supported, but this one was easy enough\n        //to support and still makes sense.\n        var node = evt.currentTarget || evt.srcElement, contextName, moduleName,\n            context;\n\n        if (evt.type === \"load\" || readyRegExp.test(node.readyState)) {\n            //Reset interactive script so a script node is not held onto for\n            //to long.\n            interactiveScript = null;\n\n            //Pull out the name of the module and the context.\n            contextName = node.getAttribute(\"data-requirecontext\");\n            moduleName = node.getAttribute(\"data-requiremodule\");\n            context = contexts[contextName];\n\n            contexts[contextName].completeLoad(moduleName);\n\n            //Clean up script binding. Favor detachEvent because of IE9\n            //issue, see attachEvent/addEventListener comment elsewhere\n            //in this file.\n            if (node.detachEvent && !isOpera) {\n                //Probably IE. If not it will throw an error, which will be\n                //useful to know.\n                node.detachEvent(\"onreadystatechange\", req.onScriptLoad);\n            } else {\n                node.removeEventListener(\"load\", req.onScriptLoad, false);\n            }\n        }\n    };\n\n    /**\n     * Attaches the script represented by the URL to the current\n     * environment. Right now only supports browser loading,\n     * but can be redefined in other environments to do the right thing.\n     * @param {String} url the url of the script to attach.\n     * @param {Object} context the context that wants the script.\n     * @param {moduleName} the name of the module that is associated with the script.\n     * @param {Function} [callback] optional callback, defaults to require.onScriptLoad\n     * @param {String} [type] optional type, defaults to text/javascript\n     */\n    req.attach = function (url, context, moduleName, callback, type) {\n        var node, loaded;\n        if (isBrowser) {\n            //In the browser so use a script tag\n            callback = callback || req.onScriptLoad;\n            node = context && context.config && context.config.xhtml ?\n                    document.createElementNS(\"http://www.w3.org/1999/xhtml\", \"html:script\") :\n                    document.createElement(\"script\");\n            node.type = type || \"text/javascript\";\n            node.charset = \"utf-8\";\n            //Use async so Gecko does not block on executing the script if something\n            //like a long-polling comet tag is being run first. Gecko likes\n            //to evaluate scripts in DOM order, even for dynamic scripts.\n            //It will fetch them async, but only evaluate the contents in DOM\n            //order, so a long-polling script tag can delay execution of scripts\n            //after it. But telling Gecko we expect async gets us the behavior\n            //we want -- execute it whenever it is finished downloading. Only\n            //Helps Firefox 3.6+\n            //Allow some URLs to not be fetched async. Mostly helps the order!\n            //plugin\n            node.async = !s.skipAsync[url];\n\n            if (context) {\n                node.setAttribute(\"data-requirecontext\", context.contextName);\n            }\n            node.setAttribute(\"data-requiremodule\", moduleName);\n\n            //Set up load listener. Test attachEvent first because IE9 has\n            //a subtle issue in its addEventListener and script onload firings\n            //that do not match the behavior of all other browsers with\n            //addEventListener support, which fire the onload event for a\n            //script right after the script execution. See:\n            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution\n            //UNFORTUNATELY Opera implements attachEvent but does not follow the script\n            //script execution mode.\n            if (node.attachEvent && !isOpera) {\n                //Probably IE. IE (at least 6-8) do not fire\n                //script onload right after executing the script, so\n                //we cannot tie the anonymous define call to a name.\n                //However, IE reports the script as being in \"interactive\"\n                //readyState at the time of the define call.\n                useInteractive = true;\n                node.attachEvent(\"onreadystatechange\", callback);\n            } else {\n                node.addEventListener(\"load\", callback, false);\n            }\n            node.src = url;\n\n            //For some cache cases in IE 6-8, the script executes before the end\n            //of the appendChild execution, so to tie an anonymous define\n            //call to the module name (which is stored on the node), hold on\n            //to a reference to this node, but clear after the DOM insertion.\n            currentlyAddingScript = node;\n            if (baseElement) {\n                head.insertBefore(node, baseElement);\n            } else {\n                head.appendChild(node);\n            }\n            currentlyAddingScript = null;\n            return node;\n        } else if (isWebWorker) {\n            //In a web worker, use importScripts. This is not a very\n            //efficient use of importScripts, importScripts will block until\n            //its script is downloaded and evaluated. However, if web workers\n            //are in play, the expectation that a build has been done so that\n            //only one script needs to be loaded anyway. This may need to be\n            //reevaluated if other use cases become common.\n            loaded = context.loaded;\n            loaded[moduleName] = false;\n\n            importScripts(url);\n\n            //Account for anonymous modules\n            context.completeLoad(moduleName);\n        }\n        return null;\n    };\n\n    //Look for a data-main script attribute, which could also adjust the baseUrl.\n    if (isBrowser) {\n        //Figure out baseUrl. Get it from the script tag with require.js in it.\n        scripts = document.getElementsByTagName(\"script\");\n\n        for (i = scripts.length - 1; i > -1 && (script = scripts[i]); i--) {\n            //Set the \"head\" where we can append children by\n            //using the script's parent.\n            if (!head) {\n                head = script.parentNode;\n            }\n\n            //Look for a data-main attribute to set main script for the page\n            //to load. If it is there, the path to data main becomes the\n            //baseUrl, if it is not already set.\n            if ((dataMain = script.getAttribute('data-main'))) {\n                if (!cfg.baseUrl) {\n                    //Pull off the directory of data-main for use as the\n                    //baseUrl.\n                    src = dataMain.split('/');\n                    mainScript = src.pop();\n                    subPath = src.length ? src.join('/')  + '/' : './';\n\n                    //Set final config.\n                    cfg.baseUrl = subPath;\n                    //Strip off any trailing .js since dataMain is now\n                    //like a module name.\n                    dataMain = mainScript.replace(jsSuffixRegExp, '');\n                }\n\n                //Put the data-main script in the files to load.\n                cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain];\n\n                break;\n            }\n        }\n    }\n\n    //Set baseUrl based on config.\n    s.baseUrl = cfg.baseUrl;\n\n    //****** START page load functionality ****************\n    /**\n     * Sets the page as loaded and triggers check for all modules loaded.\n     */\n    req.pageLoaded = function () {\n        if (!s.isPageLoaded) {\n            s.isPageLoaded = true;\n            if (scrollIntervalId) {\n                clearInterval(scrollIntervalId);\n            }\n\n            //Part of a fix for FF < 3.6 where readyState was not set to\n            //complete so libraries like jQuery that check for readyState\n            //after page load where not getting initialized correctly.\n            //Original approach suggested by Andrea Giammarchi:\n            //http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\n            //see other setReadyState reference for the rest of the fix.\n            if (setReadyState) {\n                document.readyState = \"complete\";\n            }\n\n            req.callReady();\n        }\n    };\n\n    //See if there is nothing waiting across contexts, and if not, trigger\n    //callReady.\n    req.checkReadyState = function () {\n        var contexts = s.contexts, prop;\n        for (prop in contexts) {\n            if (!(prop in empty)) {\n                if (contexts[prop].waitCount) {\n                    return;\n                }\n            }\n        }\n        s.isDone = true;\n        req.callReady();\n    };\n\n    /**\n     * Internal function that calls back any ready functions. If you are\n     * integrating RequireJS with another library without require.ready support,\n     * you can define this method to call your page ready code instead.\n     */\n    req.callReady = function () {\n        var callbacks = s.readyCalls, i, callback, contexts, context, prop;\n\n        if (s.isPageLoaded && s.isDone) {\n            if (callbacks.length) {\n                s.readyCalls = [];\n                for (i = 0; (callback = callbacks[i]); i++) {\n                    callback();\n                }\n            }\n\n            //If jQuery with DOM ready delayed, release it now.\n            contexts = s.contexts;\n            for (prop in contexts) {\n                if (!(prop in empty)) {\n                    context = contexts[prop];\n                    if (context.jQueryIncremented) {\n                        jQueryHoldReady(context.jQuery, false);\n                        context.jQueryIncremented = false;\n                    }\n                }\n            }\n        }\n    };\n\n    /**\n     * Registers functions to call when the page is loaded\n     */\n    req.ready = function (callback) {\n        if (s.isPageLoaded && s.isDone) {\n            callback();\n        } else {\n            s.readyCalls.push(callback);\n        }\n        return req;\n    };\n\n    if (isBrowser) {\n        if (document.addEventListener) {\n            //Standards. Hooray! Assumption here that if standards based,\n            //it knows about DOMContentLoaded.\n            document.addEventListener(\"DOMContentLoaded\", req.pageLoaded, false);\n            window.addEventListener(\"load\", req.pageLoaded, false);\n            //Part of FF < 3.6 readystate fix (see setReadyState refs for more info)\n            if (!document.readyState) {\n                setReadyState = true;\n                document.readyState = \"loading\";\n            }\n        } else if (window.attachEvent) {\n            window.attachEvent(\"onload\", req.pageLoaded);\n\n            //DOMContentLoaded approximation, as found by Diego Perini:\n            //http://javascript.nwbox.com/IEContentLoaded/\n            if (self === self.top) {\n                scrollIntervalId = setInterval(function () {\n                    try {\n                        //From this ticket:\n                        //http://bugs.dojotoolkit.org/ticket/11106,\n                        //In IE HTML Application (HTA), such as in a selenium test,\n                        //javascript in the iframe can't see anything outside\n                        //of it, so self===self.top is true, but the iframe is\n                        //not the top window and doScroll will be available\n                        //before document.body is set. Test document.body\n                        //before trying the doScroll trick.\n                        if (document.body) {\n                            document.documentElement.doScroll(\"left\");\n                            req.pageLoaded();\n                        }\n                    } catch (e) {}\n                }, 30);\n            }\n        }\n\n        //Check if document already complete, and if so, just trigger page load\n        //listeners. NOTE: does not work with Firefox before 3.6. To support\n        //those browsers, manually call require.pageLoaded().\n        if (document.readyState === \"complete\") {\n            req.pageLoaded();\n        }\n    }\n    //****** END page load functionality ****************\n\n    //Set up default context. If require was a configuration object, use that as base config.\n    req(cfg);\n\n    //If modules are built into require.js, then need to make sure dependencies are\n    //traced. Use a setTimeout in the browser world, to allow all the modules to register\n    //themselves. In a non-browser env, assume that modules are not built into require.js,\n    //which seems odd to do on the server.\n    if (req.isAsync && typeof setTimeout !== \"undefined\") {\n        ctx = s.contexts[(cfg.context || defContextName)];\n        //Indicate that the script that includes require() is still loading,\n        //so that require()'d dependencies are not traced until the end of the\n        //file is parsed (approximated via the setTimeout call).\n        ctx.requireWait = true;\n        setTimeout(function () {\n            ctx.requireWait = false;\n\n            //Any modules included with the require.js file will be in the\n            //global queue, assign them to this context.\n            ctx.takeGlobalQueue();\n\n            //Allow for jQuery to be loaded/already in the page, and if jQuery 1.4.3,\n            //make sure to hold onto it for readyWait triggering.\n            ctx.jQueryCheck();\n\n            if (!ctx.scriptCount) {\n                ctx.resume();\n            }\n            req.checkReadyState();\n        }, 0);\n    }\n}());\n/*!\n * jQuery JavaScript Library v1.6.4\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n * Copyright 2011, The Dojo Foundation\n * Released under the MIT, BSD, and GPL Licenses.\n *\n * Date: Mon Sep 12 18:54:48 2011 -0400\n */\n(function( window, undefined ) {\n\n// Use the correct document accordingly with window argument (sandbox)\nvar document = window.document,\n\tnavigator = window.navigator,\n\tlocation = window.location;\nvar jQuery = (function() {\n\n// Define a local copy of jQuery\nvar jQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// A simple way to check for HTML strings or ID strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\tquickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,\n\n\t// Check if a string has a non-whitespace character in it\n\trnotwhite = /\\S/,\n\n\t// Used for trimming whitespace\n\ttrimLeft = /^\\s+/,\n\ttrimRight = /\\s+$/,\n\n\t// Check for digits\n\trdigit = /\\d/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\n\t// Useragent RegExp\n\trwebkit = /(webkit)[ \\/]([\\w.]+)/,\n\tropera = /(opera)(?:.*version)?[ \\/]([\\w.]+)/,\n\trmsie = /(msie) ([\\w.]+)/,\n\trmozilla = /(mozilla)(?:.*? rv:([\\w.]+))?/,\n\n\t// Matches dashed string for camelizing\n\trdashAlpha = /-([a-z]|[0-9])/ig,\n\trmsPrefix = /^-ms-/,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn ( letter + \"\" ).toUpperCase();\n\t},\n\n\t// Keep a UserAgent string for use with jQuery.browser\n\tuserAgent = navigator.userAgent,\n\n\t// For matching the engine and version of the browser\n\tbrowserMatch,\n\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// The ready event handler\n\tDOMContentLoaded,\n\n\t// Save a reference to some core methods\n\ttoString = Object.prototype.toString,\n\thasOwn = Object.prototype.hasOwnProperty,\n\tpush = Array.prototype.push,\n\tslice = Array.prototype.slice,\n\ttrim = String.prototype.trim,\n\tindexOf = Array.prototype.indexOf,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {};\n\njQuery.fn = jQuery.prototype = {\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem, ret, doc;\n\n\t\t// Handle $(\"\"), $(null), or $(undefined)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\t\t}\n\n\t\t// The body element only exists once, optimize finding it\n\t\tif ( selector === \"body\" && !context && document.body ) {\n\t\t\tthis.context = document;\n\t\t\tthis[0] = document.body;\n\t\t\tthis.selector = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\t// Are we dealing with HTML string or an ID?\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = quickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Verify a match, and that no context was specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\t\t\t\t\tdoc = (context ? context.ownerDocument || context : document);\n\n\t\t\t\t\t// If a single string is passed in and it's a single tag\n\t\t\t\t\t// just do a createElement and skip the rest\n\t\t\t\t\tret = rsingleTag.exec( selector );\n\n\t\t\t\t\tif ( ret ) {\n\t\t\t\t\t\tif ( jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\t\tselector = [ document.createElement( ret[1] ) ];\n\t\t\t\t\t\t\tjQuery.fn.attr.call( selector, context, true );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tselector = [ doc.createElement( ret[1] ) ];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret = jQuery.buildFragment( [ match[1] ], [ doc ] );\n\t\t\t\t\t\tselector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.merge( this, selector );\n\n\t\t\t\t// HANDLE: $(\"#id\")\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn (context || rootjQuery).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif (selector.selector !== undefined) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The current version of jQuery being used\n\tjquery: \"1.6.4\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\t// The number of elements contained in the matched element set\n\tsize: function() {\n\t\treturn this.length;\n\t},\n\n\ttoArray: function() {\n\t\treturn slice.call( this, 0 );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems, name, selector ) {\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = this.constructor();\n\n\t\tif ( jQuery.isArray( elems ) ) {\n\t\t\tpush.apply( ret, elems );\n\n\t\t} else {\n\t\t\tjQuery.merge( ret, elems );\n\t\t}\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\tret.context = this.context;\n\n\t\tif ( name === \"find\" ) {\n\t\t\tret.selector = this.selector + (this.selector ? \" \" : \"\") + selector;\n\t\t} else if ( name ) {\n\t\t\tret.selector = this.selector + \".\" + name + \"(\" + selector + \")\";\n\t\t}\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Attach the listeners\n\t\tjQuery.bindReady();\n\n\t\t// Add the callback\n\t\treadyList.done( fn );\n\n\t\treturn this;\n\t},\n\n\teq: function( i ) {\n\t\treturn i === -1 ?\n\t\t\tthis.slice( i ) :\n\t\t\tthis.slice( i, +i + 1 );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ),\n\t\t\t\"slice\", slice.call(arguments).join(\",\") );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\t\t// Either a released hold or an DOMready/load event and not yet ready\n\t\tif ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {\n\t\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\t\tif ( !document.body ) {\n\t\t\t\treturn setTimeout( jQuery.ready, 1 );\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t\t// Trigger any bound ready events\n\t\t\tif ( jQuery.fn.trigger ) {\n\t\t\t\tjQuery( document ).trigger( \"ready\" ).unbind( \"ready\" );\n\t\t\t}\n\t\t}\n\t},\n\n\tbindReady: function() {\n\t\tif ( readyList ) {\n\t\t\treturn;\n\t\t}\n\n\t\treadyList = jQuery._Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the\n\t\t// browser event has already occurred.\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\treturn setTimeout( jQuery.ready, 1 );\n\t\t}\n\n\t\t// Mozilla, Opera and webkit nightlies currently support this event\n\t\tif ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", jQuery.ready, false );\n\n\t\t// If IE event model is used\n\t\t} else if ( document.attachEvent ) {\n\t\t\t// ensure firing before onload,\n\t\t\t// maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", DOMContentLoaded );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", jQuery.ready );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar toplevel = false;\n\n\t\t\ttry {\n\t\t\t\ttoplevel = window.frameElement == null;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( document.documentElement.doScroll && toplevel ) {\n\t\t\t\tdoScrollCheck();\n\t\t\t}\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\t// A crude way of determining if an object is a window\n\tisWindow: function( obj ) {\n\t\treturn obj && typeof obj === \"object\" && \"setInterval\" in obj;\n\t},\n\n\tisNaN: function( obj ) {\n\t\treturn obj == null || !rdigit.test( obj ) || isNaN( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\treturn obj == null ?\n\t\t\tString( obj ) :\n\t\t\tclass2type[ toString.call(obj) ] || \"object\";\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\n\t\tvar key;\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tfor ( var name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow msg;\n\t},\n\n\tparseJSON: function( data ) {\n\t\tif ( typeof data !== \"string\" || !data ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\tdata = jQuery.trim( data );\n\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\t// Make sure the incoming data is actual JSON\n\t\t// Logic borrowed from http://json.org/json2.js\n\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\treturn (new Function( \"return \" + data ))();\n\n\t\t}\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && rnotwhite.test( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( object, callback, args ) {\n\t\tvar name, i = 0,\n\t\t\tlength = object.length,\n\t\t\tisObj = length === undefined || jQuery.isFunction( object );\n\n\t\tif ( args ) {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in object ) {\n\t\t\t\t\tif ( callback.apply( object[ name ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.apply( object[ i++ ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in object ) {\n\t\t\t\t\tif ( callback.call( object[ name ], name, object[ name ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn object;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: trim ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\ttrim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\ttext.toString().replace( trimLeft, \"\" ).replace( trimRight, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( array, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( array != null ) {\n\t\t\t// The window, strings (and functions) also have 'length'\n\t\t\t// The extra typeof function check is to prevent crashes\n\t\t\t// in Safari 2 (See: #3039)\n\t\t\t// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930\n\t\t\tvar type = jQuery.type( array );\n\n\t\t\tif ( array.length == null || type === \"string\" || type === \"function\" || type === \"regexp\" || jQuery.isWindow( array ) ) {\n\t\t\t\tpush.call( ret, array );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( ret, array );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, array ) {\n\t\tif ( !array ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif ( indexOf ) {\n\t\t\treturn indexOf.call( array, elem );\n\t\t}\n\n\t\tfor ( var i = 0, length = array.length; i < length; i++ ) {\n\t\t\tif ( array[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar i = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof second.length === \"number\" ) {\n\t\t\tfor ( var l = second.length; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar ret = [], retVal;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( var i = 0, length = elems.length; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value, key, ret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\t// jquery objects are treated as arrays\n\t\t\tisArray = elems instanceof jQuery || length !== undefined && typeof length === \"number\" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( key in elems ) {\n\t\t\t\tvalue = callback( elems[ key ], key, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn ret.concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tif ( typeof context === \"string\" ) {\n\t\t\tvar tmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\tvar args = slice.call( arguments, 2 ),\n\t\t\tproxy = function() {\n\t\t\t\treturn fn.apply( context, args.concat( slice.call( arguments ) ) );\n\t\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Mutifunctional method to get and set values to a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, key, value, exec, fn, pass ) {\n\t\tvar length = elems.length;\n\n\t\t// Setting many attributes\n\t\tif ( typeof key === \"object\" ) {\n\t\t\tfor ( var k in key ) {\n\t\t\t\tjQuery.access( elems, k, key[k], exec, fn, value );\n\t\t\t}\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Setting one attribute\n\t\tif ( value !== undefined ) {\n\t\t\t// Optionally, function values get executed if exec is true\n\t\t\texec = !pass && exec && jQuery.isFunction(value);\n\n\t\t\tfor ( var i = 0; i < length; i++ ) {\n\t\t\t\tfn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );\n\t\t\t}\n\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Getting an attribute\n\t\treturn length ? fn( elems[0], key ) : undefined;\n\t},\n\n\tnow: function() {\n\t\treturn (new Date()).getTime();\n\t},\n\n\t// Use of jQuery.browser is frowned upon.\n\t// More details: http://docs.jquery.com/Utilities/jQuery.browser\n\tuaMatch: function( ua ) {\n\t\tua = ua.toLowerCase();\n\n\t\tvar match = rwebkit.exec( ua ) ||\n\t\t\tropera.exec( ua ) ||\n\t\t\trmsie.exec( ua ) ||\n\t\t\tua.indexOf(\"compatible\") < 0 && rmozilla.exec( ua ) ||\n\t\t\t[];\n\n\t\treturn { browser: match[1] || \"\", version: match[2] || \"0\" };\n\t},\n\n\tsub: function() {\n\t\tfunction jQuerySub( selector, context ) {\n\t\t\treturn new jQuerySub.fn.init( selector, context );\n\t\t}\n\t\tjQuery.extend( true, jQuerySub, this );\n\t\tjQuerySub.superclass = this;\n\t\tjQuerySub.fn = jQuerySub.prototype = this();\n\t\tjQuerySub.fn.constructor = jQuerySub;\n\t\tjQuerySub.sub = this.sub;\n\t\tjQuerySub.fn.init = function init( selector, context ) {\n\t\t\tif ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {\n\t\t\t\tcontext = jQuerySub( context );\n\t\t\t}\n\n\t\t\treturn jQuery.fn.init.call( this, selector, context, rootjQuerySub );\n\t\t};\n\t\tjQuerySub.fn.init.prototype = jQuerySub.fn;\n\t\tvar rootjQuerySub = jQuerySub(document);\n\t\treturn jQuerySub;\n\t},\n\n\tbrowser: {}\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nbrowserMatch = jQuery.uaMatch( userAgent );\nif ( browserMatch.browser ) {\n\tjQuery.browser[ browserMatch.browser ] = true;\n\tjQuery.browser.version = browserMatch.version;\n}\n\n// Deprecated, use jQuery.browser.webkit instead\nif ( jQuery.browser.webkit ) {\n\tjQuery.browser.safari = true;\n}\n\n// IE doesn't match non-breaking spaces with \\s\nif ( rnotwhite.test( \"\\xA0\" ) ) {\n\ttrimLeft = /^[\\s\\xA0]+/;\n\ttrimRight = /[\\s\\xA0]+$/;\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n\n// Cleanup functions for the document ready method\nif ( document.addEventListener ) {\n\tDOMContentLoaded = function() {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\t\tjQuery.ready();\n\t};\n\n} else if ( document.attachEvent ) {\n\tDOMContentLoaded = function() {\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", DOMContentLoaded );\n\t\t\tjQuery.ready();\n\t\t}\n\t};\n}\n\n// The DOM ready check for Internet Explorer\nfunction doScrollCheck() {\n\tif ( jQuery.isReady ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\t// If IE is used, use the trick by Diego Perini\n\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\tdocument.documentElement.doScroll(\"left\");\n\t} catch(e) {\n\t\tsetTimeout( doScrollCheck, 1 );\n\t\treturn;\n\t}\n\n\t// and execute any waiting functions\n\tjQuery.ready();\n}\n\nreturn jQuery;\n\n})();\n\n\nvar // Promise methods\n\tpromiseMethods = \"done fail isResolved isRejected promise then always pipe\".split( \" \" ),\n\t// Static reference to slice\n\tsliceDeferred = [].slice;\n\njQuery.extend({\n\t// Create a simple deferred (one callbacks list)\n\t_Deferred: function() {\n\t\tvar // callbacks list\n\t\t\tcallbacks = [],\n\t\t\t// stored [ context , args ]\n\t\t\tfired,\n\t\t\t// to avoid firing when already doing so\n\t\t\tfiring,\n\t\t\t// flag to know if the deferred has been cancelled\n\t\t\tcancelled,\n\t\t\t// the deferred itself\n\t\t\tdeferred  = {\n\n\t\t\t\t// done( f1, f2, ...)\n\t\t\t\tdone: function() {\n\t\t\t\t\tif ( !cancelled ) {\n\t\t\t\t\t\tvar args = arguments,\n\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\tlength,\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t_fired;\n\t\t\t\t\t\tif ( fired ) {\n\t\t\t\t\t\t\t_fired = fired;\n\t\t\t\t\t\t\tfired = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor ( i = 0, length = args.length; i < length; i++ ) {\n\t\t\t\t\t\t\telem = args[ i ];\n\t\t\t\t\t\t\ttype = jQuery.type( elem );\n\t\t\t\t\t\t\tif ( type === \"array\" ) {\n\t\t\t\t\t\t\t\tdeferred.done.apply( deferred, elem );\n\t\t\t\t\t\t\t} else if ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tcallbacks.push( elem );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( _fired ) {\n\t\t\t\t\t\t\tdeferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// resolve with given context and args\n\t\t\t\tresolveWith: function( context, args ) {\n\t\t\t\t\tif ( !cancelled && !fired && !firing ) {\n\t\t\t\t\t\t// make sure args are available (#8421)\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\tfiring = 1;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twhile( callbacks[ 0 ] ) {\n\t\t\t\t\t\t\t\tcallbacks.shift().apply( context, args );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfinally {\n\t\t\t\t\t\t\tfired = [ context, args ];\n\t\t\t\t\t\t\tfiring = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// resolve with this as context and given arguments\n\t\t\t\tresolve: function() {\n\t\t\t\t\tdeferred.resolveWith( this, arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Has this deferred been resolved?\n\t\t\t\tisResolved: function() {\n\t\t\t\t\treturn !!( firing || fired );\n\t\t\t\t},\n\n\t\t\t\t// Cancel\n\t\t\t\tcancel: function() {\n\t\t\t\t\tcancelled = 1;\n\t\t\t\t\tcallbacks = [];\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn deferred;\n\t},\n\n\t// Full fledged deferred (two callbacks list)\n\tDeferred: function( func ) {\n\t\tvar deferred = jQuery._Deferred(),\n\t\t\tfailDeferred = jQuery._Deferred(),\n\t\t\tpromise;\n\t\t// Add errorDeferred methods, then and promise\n\t\tjQuery.extend( deferred, {\n\t\t\tthen: function( doneCallbacks, failCallbacks ) {\n\t\t\t\tdeferred.done( doneCallbacks ).fail( failCallbacks );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\talways: function() {\n\t\t\t\treturn deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );\n\t\t\t},\n\t\t\tfail: failDeferred.done,\n\t\t\trejectWith: failDeferred.resolveWith,\n\t\t\treject: failDeferred.resolve,\n\t\t\tisRejected: failDeferred.isResolved,\n\t\t\tpipe: function( fnDone, fnFail ) {\n\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\tjQuery.each( {\n\t\t\t\t\t\tdone: [ fnDone, \"resolve\" ],\n\t\t\t\t\t\tfail: [ fnFail, \"reject\" ]\n\t\t\t\t\t}, function( handler, data ) {\n\t\t\t\t\t\tvar fn = data[ 0 ],\n\t\t\t\t\t\t\taction = data[ 1 ],\n\t\t\t\t\t\t\treturned;\n\t\t\t\t\t\tif ( jQuery.isFunction( fn ) ) {\n\t\t\t\t\t\t\tdeferred[ handler ](function() {\n\t\t\t\t\t\t\t\treturned = fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise().then( newDefer.resolve, newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === deferred ? newDefer : this, [ returned ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdeferred[ handler ]( newDefer[ action ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}).promise();\n\t\t\t},\n\t\t\t// Get a promise for this deferred\n\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\tpromise: function( obj ) {\n\t\t\t\tif ( obj == null ) {\n\t\t\t\t\tif ( promise ) {\n\t\t\t\t\t\treturn promise;\n\t\t\t\t\t}\n\t\t\t\t\tpromise = obj = {};\n\t\t\t\t}\n\t\t\t\tvar i = promiseMethods.length;\n\t\t\t\twhile( i-- ) {\n\t\t\t\t\tobj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t});\n\t\t// Make sure only one callback list will be used\n\t\tdeferred.done( failDeferred.cancel ).fail( deferred.cancel );\n\t\t// Unexpose cancel\n\t\tdelete deferred.cancel;\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( firstParam ) {\n\t\tvar args = arguments,\n\t\t\ti = 0,\n\t\t\tlength = args.length,\n\t\t\tcount = length,\n\t\t\tdeferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?\n\t\t\t\tfirstParam :\n\t\t\t\tjQuery.Deferred();\n\t\tfunction resolveFunc( i ) {\n\t\t\treturn function( value ) {\n\t\t\t\targs[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\t// Strange bug in FF4:\n\t\t\t\t\t// Values changed onto the arguments object sometimes end up as undefined values\n\t\t\t\t\t// outside the $.when method. Cloning the object into a fresh array solves the issue\n\t\t\t\t\tdeferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tif ( length > 1 ) {\n\t\t\tfor( ; i < length; i++ ) {\n\t\t\t\tif ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {\n\t\t\t\t\targs[ i ].promise().then( resolveFunc(i), deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--count;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !count ) {\n\t\t\t\tdeferred.resolveWith( deferred, args );\n\t\t\t}\n\t\t} else if ( deferred !== firstParam ) {\n\t\t\tdeferred.resolveWith( deferred, length ? [ firstParam ] : [] );\n\t\t}\n\t\treturn deferred.promise();\n\t}\n});\n\n\n\njQuery.support = (function() {\n\n\tvar div = document.createElement( \"div\" ),\n\t\tdocumentElement = document.documentElement,\n\t\tall,\n\t\ta,\n\t\tselect,\n\t\topt,\n\t\tinput,\n\t\tmarginDiv,\n\t\tsupport,\n\t\tfragment,\n\t\tbody,\n\t\ttestElementParent,\n\t\ttestElement,\n\t\ttestElementStyle,\n\t\ttds,\n\t\tevents,\n\t\teventName,\n\t\ti,\n\t\tisSupported;\n\n\t// Preliminary tests\n\tdiv.setAttribute(\"className\", \"t\");\n\tdiv.innerHTML = \"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";\n\n\n\tall = div.getElementsByTagName( \"*\" );\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// Can't get basic test support\n\tif ( !all || !all.length || !a ) {\n\t\treturn {};\n\t}\n\n\t// First batch of supports tests\n\tselect = document.createElement( \"select\" );\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName( \"input\" )[ 0 ];\n\n\tsupport = {\n\t\t// IE strips leading whitespace when .innerHTML is used\n\t\tleadingWhitespace: ( div.firstChild.nodeType === 3 ),\n\n\t\t// Make sure that tbody elements aren't automatically inserted\n\t\t// IE will insert them into empty tables\n\t\ttbody: !div.getElementsByTagName( \"tbody\" ).length,\n\n\t\t// Make sure that link elements get serialized correctly by innerHTML\n\t\t// This requires a wrapper element in IE\n\t\thtmlSerialize: !!div.getElementsByTagName( \"link\" ).length,\n\n\t\t// Get the style information from getAttribute\n\t\t// (IE uses .cssText instead)\n\t\tstyle: /top/.test( a.getAttribute(\"style\") ),\n\n\t\t// Make sure that URLs aren't manipulated\n\t\t// (IE normalizes it by default)\n\t\threfNormalized: ( a.getAttribute( \"href\" ) === \"/a\" ),\n\n\t\t// Make sure that element opacity exists\n\t\t// (IE uses filter instead)\n\t\t// Use a regex to work around a WebKit issue. See #5145\n\t\topacity: /^0.55$/.test( a.style.opacity ),\n\n\t\t// Verify style float existence\n\t\t// (IE uses styleFloat instead of cssFloat)\n\t\tcssFloat: !!a.style.cssFloat,\n\n\t\t// Make sure that if no value is specified for a checkbox\n\t\t// that it defaults to \"on\".\n\t\t// (WebKit defaults to \"\" instead)\n\t\tcheckOn: ( input.value === \"on\" ),\n\n\t\t// Make sure that a selected-by-default option has a working selected property.\n\t\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\t\toptSelected: opt.selected,\n\n\t\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\t\tgetSetAttribute: div.className !== \"t\",\n\n\t\t// Will be defined later\n\t\tsubmitBubbles: true,\n\t\tchangeBubbles: true,\n\t\tfocusinBubbles: false,\n\t\tdeleteExpando: true,\n\t\tnoCloneEvent: true,\n\t\tinlineBlockNeedsLayout: false,\n\t\tshrinkWrapBlocks: false,\n\t\treliableMarginRight: true\n\t};\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Test to see if it's possible to delete an expando from an element\n\t// Fails in Internet Explorer\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\tif ( !div.addEventListener && div.attachEvent && div.fireEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\t// Cloning a node shouldn't copy over any\n\t\t\t// bound event handlers (IE does this)\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\t\tdiv.cloneNode( true ).fireEvent( \"onclick\" );\n\t}\n\n\t// Check if a radio maintains it's value\n\t// after being appended to the DOM\n\tinput = document.createElement(\"input\");\n\tinput.value = \"t\";\n\tinput.setAttribute(\"type\", \"radio\");\n\tsupport.radioValue = input.value === \"t\";\n\n\tinput.setAttribute(\"checked\", \"checked\");\n\tdiv.appendChild( input );\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( div.firstChild );\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\tdiv.innerHTML = \"\";\n\n\t// Figure out if the W3C box model works as expected\n\tdiv.style.width = div.style.paddingLeft = \"1px\";\n\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\t// We use our own, invisible, body unless the body is already present\n\t// in which case we use a div (#9239)\n\ttestElement = document.createElement( body ? \"div\" : \"body\" );\n\ttestElementStyle = {\n\t\tvisibility: \"hidden\",\n\t\twidth: 0,\n\t\theight: 0,\n\t\tborder: 0,\n\t\tmargin: 0,\n\t\tbackground: \"none\"\n\t};\n\tif ( body ) {\n\t\tjQuery.extend( testElementStyle, {\n\t\t\tposition: \"absolute\",\n\t\t\tleft: \"-1000px\",\n\t\t\ttop: \"-1000px\"\n\t\t});\n\t}\n\tfor ( i in testElementStyle ) {\n\t\ttestElement.style[ i ] = testElementStyle[ i ];\n\t}\n\ttestElement.appendChild( div );\n\ttestElementParent = body || documentElement;\n\ttestElementParent.insertBefore( testElement, testElementParent.firstChild );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\tsupport.boxModel = div.offsetWidth === 2;\n\n\tif ( \"zoom\" in div.style ) {\n\t\t// Check if natively block-level elements act like inline-block\n\t\t// elements when setting their display to 'inline' and giving\n\t\t// them layout\n\t\t// (IE < 8 does this)\n\t\tdiv.style.display = \"inline\";\n\t\tdiv.style.zoom = 1;\n\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );\n\n\t\t// Check if elements with layout shrink-wrap their children\n\t\t// (IE 6 does this)\n\t\tdiv.style.display = \"\";\n\t\tdiv.innerHTML = \"<div style='width:4px;'></div>\";\n\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 2 );\n\t}\n\n\tdiv.innerHTML = \"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";\n\ttds = div.getElementsByTagName( \"td\" );\n\n\t// Check if table cells still have offsetWidth/Height when they are set\n\t// to display:none and there are still other visible table cells in a\n\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t// determining if an element has been hidden directly using\n\t// display:none (it is still safe to use offsets if a parent element is\n\t// hidden; don safety goggles and see bug #4512 for more information).\n\t// (only IE 8 fails this test)\n\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\ttds[ 0 ].style.display = \"\";\n\ttds[ 1 ].style.display = \"none\";\n\n\t// Check if empty table cells still have offsetWidth/Height\n\t// (IE < 8 fail this test)\n\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\tdiv.innerHTML = \"\";\n\n\t// Check if div with explicit width and no margin-right incorrectly\n\t// gets computed margin-right based on width of container. For more\n\t// info see bug #3333\n\t// Fails in WebKit before Feb 2011 nightlies\n\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\tif ( document.defaultView && document.defaultView.getComputedStyle ) {\n\t\tmarginDiv = document.createElement( \"div\" );\n\t\tmarginDiv.style.width = \"0\";\n\t\tmarginDiv.style.marginRight = \"0\";\n\t\tdiv.appendChild( marginDiv );\n\t\tsupport.reliableMarginRight =\n\t\t\t( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;\n\t}\n\n\t// Remove the body element we added\n\ttestElement.innerHTML = \"\";\n\ttestElementParent.removeChild( testElement );\n\n\t// Technique from Juriy Zaytsev\n\t// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/\n\t// We only care about the case where non-standard event systems\n\t// are used, namely in IE. Short-circuiting here helps us to\n\t// avoid an eval call (in setAttribute) which can cause CSP\n\t// to go haywire. See: https://developer.mozilla.org/en/Security/CSP\n\tif ( div.attachEvent ) {\n\t\tfor( i in {\n\t\t\tsubmit: 1,\n\t\t\tchange: 1,\n\t\t\tfocusin: 1\n\t\t} ) {\n\t\t\teventName = \"on\" + i;\n\t\t\tisSupported = ( eventName in div );\n\t\t\tif ( !isSupported ) {\n\t\t\t\tdiv.setAttribute( eventName, \"return;\" );\n\t\t\t\tisSupported = ( typeof div[ eventName ] === \"function\" );\n\t\t\t}\n\t\t\tsupport[ i + \"Bubbles\" ] = isSupported;\n\t\t}\n\t}\n\n\t// Null connected elements to avoid leaks in IE\n\ttestElement = fragment = select = opt = body = marginDiv = div = input = null;\n\n\treturn support;\n})();\n\n// Keep track of boxModel\njQuery.boxModel = jQuery.support.boxModel;\n\n\n\n\nvar rbrace = /^(?:\\{.*\\}|\\[.*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\njQuery.extend({\n\tcache: {},\n\n\t// Please use with caution\n\tuuid: 0,\n\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( jQuery.fn.jquery + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n\t\t\"applet\": true\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar thisCache, ret,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tgetByName = typeof name === \"string\",\n\n\t\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t\t// can't GC object references properly across the DOM-JS boundary\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t\t// attached directly to the object so GC can occur automatically\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\t\tid = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;\n\n\t\t// Avoid doing any more work than we need to when trying to get data on an\n\t\t// object that has no data at all\n\t\tif ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !id ) {\n\t\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t\t// ends up in the global cache\n\t\t\tif ( isNode ) {\n\t\t\t\telem[ jQuery.expando ] = id = ++jQuery.uuid;\n\t\t\t} else {\n\t\t\t\tid = jQuery.expando;\n\t\t\t}\n\t\t}\n\n\t\tif ( !cache[ id ] ) {\n\t\t\tcache[ id ] = {};\n\n\t\t\t// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery\n\t\t\t// metadata on plain JS objects when the object is serialized using\n\t\t\t// JSON.stringify\n\t\t\tif ( !isNode ) {\n\t\t\t\tcache[ id ].toJSON = jQuery.noop;\n\t\t\t}\n\t\t}\n\n\t\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t\t// shallow copied over onto the existing cache\n\t\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\t\tif ( pvt ) {\n\t\t\t\tcache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);\n\t\t\t} else {\n\t\t\t\tcache[ id ] = jQuery.extend(cache[ id ], name);\n\t\t\t}\n\t\t}\n\n\t\tthisCache = cache[ id ];\n\n\t\t// Internal jQuery data is stored in a separate object inside the object's data\n\t\t// cache in order to avoid key collisions between internal data and user-defined\n\t\t// data\n\t\tif ( pvt ) {\n\t\t\tif ( !thisCache[ internalKey ] ) {\n\t\t\t\tthisCache[ internalKey ] = {};\n\t\t\t}\n\n\t\t\tthisCache = thisCache[ internalKey ];\n\t\t}\n\n\t\tif ( data !== undefined ) {\n\t\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t\t}\n\n\t\t// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should\n\t\t// not attempt to inspect the internal events object using jQuery.data, as this\n\t\t// internal data object is undocumented and subject to change.\n\t\tif ( name === \"events\" && !thisCache[name] ) {\n\t\t\treturn thisCache[ internalKey ] && thisCache[ internalKey ].events;\n\t\t}\n\n\t\t// Check for both converted-to-camel and non-converted data property names\n\t\t// If a data property was specified\n\t\tif ( getByName ) {\n\n\t\t\t// First Try to find as-is property data\n\t\t\tret = thisCache[ name ];\n\n\t\t\t// Test for null|undefined property data\n\t\t\tif ( ret == null ) {\n\n\t\t\t\t// Try to find the camelCased property\n\t\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t\t}\n\t\t} else {\n\t\t\tret = thisCache;\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tremoveData: function( elem, name, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar thisCache,\n\n\t\t\t// Reference to internal data cache key\n\t\t\tinternalKey = jQuery.expando,\n\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// See jQuery.data for more information\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t\t// See jQuery.data for more information\n\t\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t\t// If there is already no cache entry for this object, there is no\n\t\t// purpose in continuing\n\t\tif ( !cache[ id ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( name ) {\n\n\t\t\tthisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];\n\n\t\t\tif ( thisCache ) {\n\n\t\t\t\t// Support interoperable removal of hyphenated or camelcased keys\n\t\t\t\tif ( !thisCache[ name ] ) {\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t}\n\n\t\t\t\tdelete thisCache[ name ];\n\n\t\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t\t// and let the cache object itself get destroyed\n\t\t\t\tif ( !isEmptyDataObject(thisCache) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// See jQuery.data for more information\n\t\tif ( pvt ) {\n\t\t\tdelete cache[ id ][ internalKey ];\n\n\t\t\t// Don't destroy the parent cache unless the internal data object\n\t\t\t// had been the only thing left in it\n\t\t\tif ( !isEmptyDataObject(cache[ id ]) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tvar internalCache = cache[ id ][ internalKey ];\n\n\t\t// Browsers that fail expando deletion also refuse to delete expandos on\n\t\t// the window, but it will allow it on all other JS objects; other browsers\n\t\t// don't care\n\t\t// Ensure that `cache` is not a window object #10080\n\t\tif ( jQuery.support.deleteExpando || !cache.setInterval ) {\n\t\t\tdelete cache[ id ];\n\t\t} else {\n\t\t\tcache[ id ] = null;\n\t\t}\n\n\t\t// We destroyed the entire user cache at once because it's faster than\n\t\t// iterating through each key, but we need to continue to persist internal\n\t\t// data if it existed\n\t\tif ( internalCache ) {\n\t\t\tcache[ id ] = {};\n\t\t\t// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery\n\t\t\t// metadata on plain JS objects when the object is serialized using\n\t\t\t// JSON.stringify\n\t\t\tif ( !isNode ) {\n\t\t\t\tcache[ id ].toJSON = jQuery.noop;\n\t\t\t}\n\n\t\t\tcache[ id ][ internalKey ] = internalCache;\n\n\t\t// Otherwise, we need to eliminate the expando on the node to avoid\n\t\t// false lookups in the cache for entries that no longer exist\n\t\t} else if ( isNode ) {\n\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t// we must handle all of these cases\n\t\t\tif ( jQuery.support.deleteExpando ) {\n\t\t\t\tdelete elem[ jQuery.expando ];\n\t\t\t} else if ( elem.removeAttribute ) {\n\t\t\t\telem.removeAttribute( jQuery.expando );\n\t\t\t} else {\n\t\t\t\telem[ jQuery.expando ] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn jQuery.data( elem, name, data, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\tif ( elem.nodeName ) {\n\t\t\tvar match = jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t\tif ( match ) {\n\t\t\t\treturn !(match === true || elem.getAttribute(\"classid\") !== match);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar data = null;\n\n\t\tif ( typeof key === \"undefined\" ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( this[0] );\n\n\t\t\t\tif ( this[0].nodeType === 1 ) {\n\t\t\t    var attr = this[0].attributes, name;\n\t\t\t\t\tfor ( var i = 0, l = attr.length; i < l; i++ ) {\n\t\t\t\t\t\tname = attr[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.substring(5) );\n\n\t\t\t\t\t\t\tdataAttr( this[0], name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t} else if ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\tvar parts = key.split(\".\");\n\t\tparts[1] = parts[1] ? \".\" + parts[1] : \"\";\n\n\t\tif ( value === undefined ) {\n\t\t\tdata = this.triggerHandler(\"getData\" + parts[1] + \"!\", [parts[0]]);\n\n\t\t\t// Try to fetch any internally stored data first\n\t\t\tif ( data === undefined && this.length ) {\n\t\t\t\tdata = jQuery.data( this[0], key );\n\t\t\t\tdata = dataAttr( this[0], key, data );\n\t\t\t}\n\n\t\t\treturn data === undefined && parts[1] ?\n\t\t\t\tthis.data( parts[0] ) :\n\t\t\t\tdata;\n\n\t\t} else {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = jQuery( this ),\n\t\t\t\t\targs = [ parts[0], value ];\n\n\t\t\t\t$this.triggerHandler( \"setData\" + parts[1] + \"!\", args );\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t\t$this.triggerHandler( \"changeData\" + parts[1] + \"!\", args );\n\t\t\t});\n\t\t}\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\tdata === \"false\" ? false :\n\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t!jQuery.isNaN( data ) ? parseFloat( data ) :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON\n// property to be considered empty objects; this property always exists in\n// order to make sure JSON.stringify does not expose internal metadata\nfunction isEmptyDataObject( obj ) {\n\tfor ( var name in obj ) {\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n\n\n\nfunction handleQueueMarkDefer( elem, type, src ) {\n\tvar deferDataKey = type + \"defer\",\n\t\tqueueDataKey = type + \"queue\",\n\t\tmarkDataKey = type + \"mark\",\n\t\tdefer = jQuery.data( elem, deferDataKey, undefined, true );\n\tif ( defer &&\n\t\t( src === \"queue\" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&\n\t\t( src === \"mark\" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {\n\t\t// Give room for hard-coded callbacks to fire first\n\t\t// and eventually mark/queue something else on the element\n\t\tsetTimeout( function() {\n\t\t\tif ( !jQuery.data( elem, queueDataKey, undefined, true ) &&\n\t\t\t\t!jQuery.data( elem, markDataKey, undefined, true ) ) {\n\t\t\t\tjQuery.removeData( elem, deferDataKey, true );\n\t\t\t\tdefer.resolve();\n\t\t\t}\n\t\t}, 0 );\n\t}\n}\n\njQuery.extend({\n\n\t_mark: function( elem, type ) {\n\t\tif ( elem ) {\n\t\t\ttype = (type || \"fx\") + \"mark\";\n\t\t\tjQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );\n\t\t}\n\t},\n\n\t_unmark: function( force, elem, type ) {\n\t\tif ( force !== true ) {\n\t\t\ttype = elem;\n\t\t\telem = force;\n\t\t\tforce = false;\n\t\t}\n\t\tif ( elem ) {\n\t\t\ttype = type || \"fx\";\n\t\t\tvar key = type + \"mark\",\n\t\t\t\tcount = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );\n\t\t\tif ( count ) {\n\t\t\t\tjQuery.data( elem, key, count, true );\n\t\t\t} else {\n\t\t\t\tjQuery.removeData( elem, key, true );\n\t\t\t\thandleQueueMarkDefer( elem, type, \"mark\" );\n\t\t\t}\n\t\t}\n\t},\n\n\tqueue: function( elem, type, data ) {\n\t\tif ( elem ) {\n\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\tvar q = jQuery.data( elem, type, undefined, true );\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !q || jQuery.isArray(data) ) {\n\t\t\t\t\tq = jQuery.data( elem, type, jQuery.makeArray(data), true );\n\t\t\t\t} else {\n\t\t\t\t\tq.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn q || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tfn = queue.shift(),\n\t\t\tdefer;\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t}\n\n\t\t\tfn.call(elem, function() {\n\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t});\n\t\t}\n\n\t\tif ( !queue.length ) {\n\t\t\tjQuery.removeData( elem, type + \"queue\", true );\n\t\t\thandleQueueMarkDefer( elem, type, \"queue\" );\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t}\n\n\t\tif ( data === undefined ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function() {\n\t\t\tvar elem = this;\n\t\t\tsetTimeout(function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t}, time );\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, object ) {\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobject = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\t\tvar defer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = elements.length,\n\t\t\tcount = 1,\n\t\t\tdeferDataKey = type + \"defer\",\n\t\t\tqueueDataKey = type + \"queue\",\n\t\t\tmarkDataKey = type + \"mark\",\n\t\t\ttmp;\n\t\tfunction resolve() {\n\t\t\tif ( !( --count ) ) {\n\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t}\n\t\t}\n\t\twhile( i-- ) {\n\t\t\tif (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||\n\t\t\t\t\t( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||\n\t\t\t\t\t\tjQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&\n\t\t\t\t\tjQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.done( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise();\n\t}\n});\n\n\n\n\nvar rclass = /[\\n\\t\\r]/g,\n\trspace = /\\s+/,\n\trreturn = /\\r/g,\n\trtype = /^(?:button|input)$/i,\n\trfocusable = /^(?:button|input|object|select|textarea)$/i,\n\trclickable = /^a(?:rea)?$/i,\n\trboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,\n\tnodeHook, boolHook;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, name, value, true, jQuery.attr );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\t\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, name, value, true, jQuery.prop );\n\t},\n\t\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classNames, i, l, elem,\n\t\t\tsetClass, c, cl;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\n\t\tif ( value && typeof value === \"string\" ) {\n\t\t\tclassNames = value.split( rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\tif ( !elem.className && classNames.length === 1 ) {\n\t\t\t\t\t\telem.className = value;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetClass = \" \" + elem.className + \" \";\n\n\t\t\t\t\t\tfor ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\t\t\t\t\t\t\tif ( !~setClass.indexOf( \" \" + classNames[ c ] + \" \" ) ) {\n\t\t\t\t\t\t\t\tsetClass += classNames[ c ] + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telem.className = jQuery.trim( setClass );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, i, l, elem, className, c, cl;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\n\t\tif ( (value && typeof value === \"string\") || value === undefined ) {\n\t\t\tclassNames = (value || \"\").split( rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.nodeType === 1 && elem.className ) {\n\t\t\t\t\tif ( value ) {\n\t\t\t\t\t\tclassName = (\" \" + elem.className + \" \").replace( rclass, \" \" );\n\t\t\t\t\t\tfor ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\t\t\t\t\t\t\tclassName = className.replace(\" \" + classNames[ c ] + \" \", \" \");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telem.className = jQuery.trim( className );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.className = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisBool = typeof stateVal === \"boolean\";\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tstate = stateVal,\n\t\t\t\t\tclassNames = value.split( rspace );\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space seperated list\n\t\t\t\t\tstate = isBool ? state : !self.hasClass( className );\n\t\t\t\t\tself[ state ? \"addClass\" : \"removeClass\" ]( className );\n\t\t\t\t}\n\n\t\t\t} else if ( type === \"undefined\" || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// toggle whole className\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \";\n\t\tfor ( var i = 0, l = this.length; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar hooks, ret,\n\t\t\telem = this[0];\n\t\t\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ? \n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") : \n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t}\n\n\t\tvar isFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar self = jQuery(this), val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, self.val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// attributes.value is undefined in Blackberry 4.7 but\n\t\t\t\t// uses .value. See #6932\n\t\t\t\tvar val = elem.attributes.value;\n\t\t\t\treturn !val || val.specified ? elem.value : elem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tvalues = [],\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tone = elem.type === \"select-one\";\n\n\t\t\t\t// Nothing was selected\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {\n\t\t\t\t\tvar option = options[ i ];\n\n\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\tif ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null) &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" )) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fixes Bug #2551 -- select.val() broken in IE after form.reset()\n\t\t\t\tif ( one && !values.length && options.length ) {\n\t\t\t\t\treturn jQuery( options[ index ] ).val();\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar values = jQuery.makeArray( value );\n\n\t\t\t\tjQuery(elem).find(\"option\").each(function() {\n\t\t\t\t\tthis.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;\n\t\t\t\t});\n\n\t\t\t\tif ( !values.length ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattrFn: {\n\t\tval: true,\n\t\tcss: true,\n\t\thtml: true,\n\t\ttext: true,\n\t\tdata: true,\n\t\twidth: true,\n\t\theight: true,\n\t\toffset: true\n\t},\n\t\n\tattrFix: {\n\t\t// Always normalize to ensure hook usage\n\t\ttabindex: \"tabIndex\"\n\t},\n\t\n\tattr: function( elem, name, value, pass ) {\n\t\tvar nType = elem.nodeType;\n\t\t\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ( pass && name in jQuery.attrFn ) {\n\t\t\treturn jQuery( elem )[ name ]( value );\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( !(\"getAttribute\" in elem) ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\tvar ret, hooks,\n\t\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\t// Normalize the name if needed\n\t\tif ( notxml ) {\n\t\t\tname = jQuery.attrFix[ name ] || name;\n\n\t\t\thooks = jQuery.attrHooks[ name ];\n\n\t\t\tif ( !hooks ) {\n\t\t\t\t// Use boolHook for boolean attributes\n\t\t\t\tif ( rboolean.test( name ) ) {\n\t\t\t\t\thooks = boolHook;\n\n\t\t\t\t// Use nodeHook if available( IE6/7 )\n\t\t\t\t} else if ( nodeHook ) {\n\t\t\t\t\thooks = nodeHook;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn undefined;\n\n\t\t\t} else if ( hooks && \"set\" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, \"\" + value );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\n\t\t\tret = elem.getAttribute( name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret === null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, name ) {\n\t\tvar propName;\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tname = jQuery.attrFix[ name ] || name;\n\n\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\telem.removeAttribute( name );\n\n\t\t\t// Set corresponding property to false for boolean attributes\n\t\t\tif ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {\n\t\t\t\telem[ propName ] = false;\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\t// We can't allow the type property to be changed (since it causes problems in IE)\n\t\t\t\tif ( rtype.test( elem.nodeName ) && elem.parentNode ) {\n\t\t\t\t\tjQuery.error( \"type property can't be changed\" );\n\t\t\t\t} else if ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to it's default in case type is set after value\n\t\t\t\t\t// This is for element creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Use the value property for back compat\n\t\t// Use the nodeHook for button elements in IE6/7 (#1954)\n\t\tvalue: {\n\t\t\tget: function( elem, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.get( elem, name );\n\t\t\t\t}\n\t\t\t\treturn name in elem ?\n\t\t\t\t\telem.value :\n\t\t\t\t\tnull;\n\t\t\t},\n\t\t\tset: function( elem, value, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.set( elem, value, name );\n\t\t\t\t}\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.value = value;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\ttabindex: \"tabIndex\",\n\t\treadonly: \"readOnly\",\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\",\n\t\tmaxlength: \"maxLength\",\n\t\tcellspacing: \"cellSpacing\",\n\t\tcellpadding: \"cellPadding\",\n\t\trowspan: \"rowSpan\",\n\t\tcolspan: \"colSpan\",\n\t\tusemap: \"useMap\",\n\t\tframeborder: \"frameBorder\",\n\t\tcontenteditable: \"contentEditable\"\n\t},\n\t\n\tprop: function( elem, name, value ) {\n\t\tvar nType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tvar ret, hooks,\n\t\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn (elem[ name ] = value);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn elem[ name ];\n\t\t\t}\n\t\t}\n\t},\n\t\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\tvar attributeNode = elem.getAttributeNode(\"tabindex\");\n\n\t\t\t\treturn attributeNode && attributeNode.specified ?\n\t\t\t\t\tparseInt( attributeNode.value, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tundefined;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Add the tabindex propHook to attrHooks for back-compat\njQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex;\n\n// Hook for boolean attributes\nboolHook = {\n\tget: function( elem, name ) {\n\t\t// Align boolean attributes with corresponding properties\n\t\t// Fall back to attribute presence where some booleans are not supported\n\t\tvar attrNode;\n\t\treturn jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ?\n\t\t\tname.toLowerCase() :\n\t\t\tundefined;\n\t},\n\tset: function( elem, value, name ) {\n\t\tvar propName;\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\t// value is true since we know at this point it's type boolean and not false\n\t\t\t// Set boolean attributes to the same name and set the DOM property\n\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\tif ( propName in elem ) {\n\t\t\t\t// Only set the IDL specifically if it already exists on the element\n\t\t\t\telem[ propName ] = true;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, name.toLowerCase() );\n\t\t}\n\t\treturn name;\n\t}\n};\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !jQuery.support.getSetAttribute ) {\n\t\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = jQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret;\n\t\t\tret = elem.getAttributeNode( name );\n\t\t\t// Return undefined if nodeValue is empty string\n\t\t\treturn ret && ret.nodeValue !== \"\" ?\n\t\t\t\tret.nodeValue :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\tret = document.createAttribute( name );\n\t\t\t\telem.setAttributeNode( ret );\n\t\t\t}\n\t\t\treturn (ret.nodeValue = value + \"\");\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n\n// Some attributes require a special call on IE\nif ( !jQuery.support.hrefNormalized ) {\n\tjQuery.each([ \"href\", \"src\", \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar ret = elem.getAttribute( name, 2 );\n\t\t\t\treturn ret === null ? undefined : ret;\n\t\t\t}\n\t\t});\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Normalize to lowercase since IE uppercases css property names\n\t\t\treturn elem.style.cssText.toLowerCase() || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn (elem.style.cssText = \"\" + value);\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t});\n}\n\n// Radios and checkboxes getter/setter\nif ( !jQuery.support.checkOn ) {\n\tjQuery.each([ \"radio\", \"checkbox\" ], function() {\n\t\tjQuery.valHooks[ this ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Handle the case where in Webkit \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t}\n\t\t};\n\t});\n}\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);\n\t\t\t}\n\t\t}\n\t});\n});\n\n\n\n\nvar rnamespaces = /\\.(.*)$/,\n\trformElems = /^(?:textarea|input|select)$/i,\n\trperiod = /\\./g,\n\trspaces = / /g,\n\trescape = /[^\\w\\s.|`]/g,\n\tfcleanup = function( nm ) {\n\t\treturn nm.replace(rescape, \"\\\\$&\");\n\t};\n\n/*\n * A number of helper functions used for managing events.\n * Many of the ideas behind this code originated from\n * Dean Edwards' addEvent library.\n */\njQuery.event = {\n\n\t// Bind an event to an element\n\t// Original by Dean Edwards\n\tadd: function( elem, types, handler, data ) {\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( handler === false ) {\n\t\t\thandler = returnFalse;\n\t\t} else if ( !handler ) {\n\t\t\t// Fixes bug #7229. Fix recommended by jdalton\n\t\t\treturn;\n\t\t}\n\n\t\tvar handleObjIn, handleObj;\n\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t}\n\n\t\t// Make sure that the function being executed has a unique ID\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure\n\t\tvar elemData = jQuery._data( elem );\n\n\t\t// If no elemData is found then we must be trying to bind to one of the\n\t\t// banned noData elements\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar events = elemData.events,\n\t\t\teventHandle = elemData.handle;\n\n\t\tif ( !events ) {\n\t\t\telemData.events = events = {};\n\t\t}\n\n\t\tif ( !eventHandle ) {\n\t\t\telemData.handle = eventHandle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.handle.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t}\n\n\t\t// Add elem as a property of the handle function\n\t\t// This is to prevent a memory leak with non-native events in IE.\n\t\teventHandle.elem = elem;\n\n\t\t// Handle multiple events separated by a space\n\t\t// jQuery(...).bind(\"mouseover mouseout\", fn);\n\t\ttypes = types.split(\" \");\n\n\t\tvar type, i = 0, namespaces;\n\n\t\twhile ( (type = types[ i++ ]) ) {\n\t\t\thandleObj = handleObjIn ?\n\t\t\t\tjQuery.extend({}, handleObjIn) :\n\t\t\t\t{ handler: handler, data: data };\n\n\t\t\t// Namespaced event handlers\n\t\t\tif ( type.indexOf(\".\") > -1 ) {\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\thandleObj.namespace = namespaces.slice(0).sort().join(\".\");\n\n\t\t\t} else {\n\t\t\t\tnamespaces = [];\n\t\t\t\thandleObj.namespace = \"\";\n\t\t\t}\n\n\t\t\thandleObj.type = type;\n\t\t\tif ( !handleObj.guid ) {\n\t\t\t\thandleObj.guid = handler.guid;\n\t\t\t}\n\n\t\t\t// Get the current list of functions bound to this event\n\t\t\tvar handlers = events[ type ],\n\t\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// Init the event handler queue\n\t\t\tif ( !handlers ) {\n\t\t\t\thandlers = events[ type ] = [];\n\n\t\t\t\t// Check for a special event handler\n\t\t\t\t// Only use addEventListener/attachEvent if the special\n\t\t\t\t// events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the function to the element's handler list\n\t\t\thandlers.push( handleObj );\n\n\t\t\t// Keep track of which events have been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\tglobal: {},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, pos ) {\n\t\t// don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( handler === false ) {\n\t\t\thandler = returnFalse;\n\t\t}\n\n\t\tvar ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem ),\n\t\t\tevents = elemData && elemData.events;\n\n\t\tif ( !elemData || !events ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// types is actually an event object here\n\t\tif ( types && types.type ) {\n\t\t\thandler = types.handler;\n\t\t\ttypes = types.type;\n\t\t}\n\n\t\t// Unbind all events for the element\n\t\tif ( !types || typeof types === \"string\" && types.charAt(0) === \".\" ) {\n\t\t\ttypes = types || \"\";\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tjQuery.event.remove( elem, type + types );\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\t// jQuery(...).unbind(\"mouseover mouseout\", fn);\n\t\ttypes = types.split(\" \");\n\n\t\twhile ( (type = types[ i++ ]) ) {\n\t\t\torigType = type;\n\t\t\thandleObj = null;\n\t\t\tall = type.indexOf(\".\") < 0;\n\t\t\tnamespaces = [];\n\n\t\t\tif ( !all ) {\n\t\t\t\t// Namespaced event handlers\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\n\t\t\t\tnamespace = new RegExp(\"(^|\\\\.)\" +\n\t\t\t\t\tjQuery.map( namespaces.slice(0).sort(), fcleanup ).join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\");\n\t\t\t}\n\n\t\t\teventType = events[ type ];\n\n\t\t\tif ( !eventType ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( !handler ) {\n\t\t\t\tfor ( j = 0; j < eventType.length; j++ ) {\n\t\t\t\t\thandleObj = eventType[ j ];\n\n\t\t\t\t\tif ( all || namespace.test( handleObj.namespace ) ) {\n\t\t\t\t\t\tjQuery.event.remove( elem, origType, handleObj.handler, j );\n\t\t\t\t\t\teventType.splice( j--, 1 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\tfor ( j = pos || 0; j < eventType.length; j++ ) {\n\t\t\t\thandleObj = eventType[ j ];\n\n\t\t\t\tif ( handler.guid === handleObj.guid ) {\n\t\t\t\t\t// remove the given handler for the given type\n\t\t\t\t\tif ( all || namespace.test( handleObj.namespace ) ) {\n\t\t\t\t\t\tif ( pos == null ) {\n\t\t\t\t\t\t\teventType.splice( j--, 1 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( pos != null ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// remove generic event handler if no more handlers exist\n\t\t\tif ( eventType.length === 0 || pos != null && eventType.length === 1 ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tret = null;\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tvar handle = elemData.handle;\n\t\t\tif ( handle ) {\n\t\t\t\thandle.elem = null;\n\t\t\t}\n\n\t\t\tdelete elemData.events;\n\t\t\tdelete elemData.handle;\n\n\t\t\tif ( jQuery.isEmptyObject( elemData ) ) {\n\t\t\t\tjQuery.removeData( elem, undefined, true );\n\t\t\t}\n\t\t}\n\t},\n\t\n\t// Events that are safe to short-circuit if no handlers are attached.\n\t// Native DOM events should not be added, they may have inline handlers.\n\tcustomEvent: {\n\t\t\"getData\": true,\n\t\t\"setData\": true,\n\t\t\"changeData\": true\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\t// Event object or event type\n\t\tvar type = event.type || event,\n\t\t\tnamespaces = [],\n\t\t\texclusive;\n\n\t\tif ( type.indexOf(\"!\") >= 0 ) {\n\t\t\t// Exclusive events trigger only for the exact event (no namespaces)\n\t\t\ttype = type.slice(0, -1);\n\t\t\texclusive = true;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\n\t\tif ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {\n\t\t\t// No jQuery handlers for this event type, and it can't have inline handlers\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an Event, Object, or just an event type string\n\t\tevent = typeof event === \"object\" ?\n\t\t\t// jQuery.Event object\n\t\t\tevent[ jQuery.expando ] ? event :\n\t\t\t// Object literal\n\t\t\tnew jQuery.Event( type, event ) :\n\t\t\t// Just the event type (string)\n\t\t\tnew jQuery.Event( type );\n\n\t\tevent.type = type;\n\t\tevent.exclusive = exclusive;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\");\n\t\t\n\t\t// triggerHandler() and global events don't bubble or run the default action\n\t\tif ( onlyHandlers || !elem ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\n\t\t// Handle a global trigger\n\t\tif ( !elem ) {\n\t\t\t// TODO: Stop taunting the data cache; remove global events and always attach to document\n\t\t\tjQuery.each( jQuery.cache, function() {\n\t\t\t\t// internalKey variable is just used to make it easier to find\n\t\t\t\t// and potentially change this stuff later; currently it just\n\t\t\t\t// points to jQuery.expando\n\t\t\t\tvar internalKey = jQuery.expando,\n\t\t\t\t\tinternalCache = this[ internalKey ];\n\t\t\t\tif ( internalCache && internalCache.events && internalCache.events[ type ] ) {\n\t\t\t\t\tjQuery.event.trigger( event, data, internalCache.handle.elem );\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tevent.target = elem;\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data != null ? jQuery.makeArray( data ) : [];\n\t\tdata.unshift( event );\n\n\t\tvar cur = elem,\n\t\t\t// IE doesn't like method names with a colon (#3533, #8272)\n\t\t\tontype = type.indexOf(\":\") < 0 ? \"on\" + type : \"\";\n\n\t\t// Fire event on the current element, then bubble up the DOM tree\n\t\tdo {\n\t\t\tvar handle = jQuery._data( cur, \"handle\" );\n\n\t\t\tevent.currentTarget = cur;\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Trigger an inline bound script\n\t\t\tif ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {\n\t\t\t\tevent.result = false;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\t// Bubble up to document, then to window\n\t\t\tcur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;\n\t\t} while ( cur && !event.isPropagationStopped() );\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !event.isDefaultPrevented() ) {\n\t\t\tvar old,\n\t\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\tif ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&\n\t\t\t\t!(type === \"click\" && jQuery.nodeName( elem, \"a\" )) && jQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction)() check here because IE6/7 fails that test.\n\t\t\t\t// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.\n\t\t\t\ttry {\n\t\t\t\t\tif ( ontype && elem[ type ] ) {\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\told = elem[ ontype ];\n\n\t\t\t\t\t\tif ( old ) {\n\t\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t}\n\t\t\t\t} catch ( ieError ) {}\n\n\t\t\t\tif ( old ) {\n\t\t\t\t\telem[ ontype ] = old;\n\t\t\t\t}\n\n\t\t\t\tjQuery.event.triggered = undefined;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn event.result;\n\t},\n\n\thandle: function( event ) {\n\t\tevent = jQuery.event.fix( event || window.event );\n\t\t// Snapshot the handlers list since a called handler may add/remove events.\n\t\tvar handlers = ((jQuery._data( this, \"events\" ) || {})[ event.type ] || []).slice(0),\n\t\t\trun_all = !event.exclusive && !event.namespace,\n\t\t\targs = Array.prototype.slice.call( arguments, 0 );\n\n\t\t// Use the fix-ed Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.currentTarget = this;\n\n\t\tfor ( var j = 0, l = handlers.length; j < l; j++ ) {\n\t\t\tvar handleObj = handlers[ j ];\n\n\t\t\t// Triggered event must 1) be non-exclusive and have no namespace, or\n\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event.\n\t\t\tif ( run_all || event.namespace_re.test( handleObj.namespace ) ) {\n\t\t\t\t// Pass in a reference to the handler function itself\n\t\t\t\t// So that we can later remove it\n\t\t\t\tevent.handler = handleObj.handler;\n\t\t\t\tevent.data = handleObj.data;\n\t\t\t\tevent.handleObj = handleObj;\n\n\t\t\t\tvar ret = handleObj.handler.apply( this, args );\n\n\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\tevent.result = ret;\n\t\t\t\t\tif ( ret === false ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( event.isImmediatePropagationStopped() ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn event.result;\n\t},\n\n\tprops: \"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which\".split(\" \"),\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// store a copy of the original event object\n\t\t// and \"clone\" to set read-only properties\n\t\tvar originalEvent = event;\n\t\tevent = jQuery.Event( originalEvent );\n\n\t\tfor ( var i = this.props.length, prop; i; ) {\n\t\t\tprop = this.props[ --i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Fix target property, if necessary\n\t\tif ( !event.target ) {\n\t\t\t// Fixes #1925 where srcElement might not be defined either\n\t\t\tevent.target = event.srcElement || document;\n\t\t}\n\n\t\t// check if target is a textnode (safari)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Add relatedTarget, if necessary\n\t\tif ( !event.relatedTarget && event.fromElement ) {\n\t\t\tevent.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;\n\t\t}\n\n\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\tif ( event.pageX == null && event.clientX != null ) {\n\t\t\tvar eventDocument = event.target.ownerDocument || document,\n\t\t\t\tdoc = eventDocument.documentElement,\n\t\t\t\tbody = eventDocument.body;\n\n\t\t\tevent.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n\t\t\tevent.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);\n\t\t}\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && (event.charCode != null || event.keyCode != null) ) {\n\t\t\tevent.which = event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)\n\t\tif ( !event.metaKey && event.ctrlKey ) {\n\t\t\tevent.metaKey = event.ctrlKey;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t// Note: button is not normalized, so don't use it\n\t\tif ( !event.which && event.button !== undefined ) {\n\t\t\tevent.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));\n\t\t}\n\n\t\treturn event;\n\t},\n\n\t// Deprecated, use jQuery.guid instead\n\tguid: 1E8,\n\n\t// Deprecated, use jQuery.proxy instead\n\tproxy: jQuery.proxy,\n\n\tspecial: {\n\t\tready: {\n\t\t\t// Make sure the ready event is setup\n\t\t\tsetup: jQuery.bindReady,\n\t\t\tteardown: jQuery.noop\n\t\t},\n\n\t\tlive: {\n\t\t\tadd: function( handleObj ) {\n\t\t\t\tjQuery.event.add( this,\n\t\t\t\t\tliveConvert( handleObj.origType, handleObj.selector ),\n\t\t\t\t\tjQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );\n\t\t\t},\n\n\t\t\tremove: function( handleObj ) {\n\t\t\t\tjQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tsetup: function( data, namespaces, eventHandle ) {\n\t\t\t\t// We only want to do this special case on windows\n\t\t\t\tif ( jQuery.isWindow( this ) ) {\n\t\t\t\t\tthis.onbeforeunload = eventHandle;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tteardown: function( namespaces, eventHandle ) {\n\t\t\t\tif ( this.onbeforeunload === eventHandle ) {\n\t\t\t\t\tthis.onbeforeunload = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.detachEvent ) {\n\t\t\telem.detachEvent( \"on\" + type, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !this.preventDefault ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// timeStamp is buggy for some events on Firefox(#3843)\n\t// So we won't rely on the native value\n\tthis.timeStamp = jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\nfunction returnFalse() {\n\treturn false;\n}\nfunction returnTrue() {\n\treturn true;\n}\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tpreventDefault: function() {\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if preventDefault exists run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// otherwise set the returnValue property of the original event to false (IE)\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// if stopPropagation exists run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t\t// otherwise set the cancelBubble property of the original event to true (IE)\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t},\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse\n};\n\n// Checks if an event happened on an element within another element\n// Used in jQuery.event.special.mouseenter and mouseleave handlers\nvar withinElement = function( event ) {\n\n\t// Check if mouse(over|out) are still within the same parent element\n\tvar related = event.relatedTarget,\n\t\tinside = false,\n\t\teventType = event.type;\n\n\tevent.type = event.data;\n\n\tif ( related !== this ) {\n\n\t\tif ( related ) {\n\t\t\tinside = jQuery.contains( this, related );\n\t\t}\n\n\t\tif ( !inside ) {\n\n\t\t\tjQuery.event.handle.apply( this, arguments );\n\n\t\t\tevent.type = eventType;\n\t\t}\n\t}\n},\n\n// In case of event delegation, we only need to rename the event.type,\n// liveHandler will take care of the rest.\ndelegate = function( event ) {\n\tevent.type = event.data;\n\tjQuery.event.handle.apply( this, arguments );\n};\n\n// Create mouseenter and mouseleave events\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tsetup: function( data ) {\n\t\t\tjQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );\n\t\t},\n\t\tteardown: function( data ) {\n\t\t\tjQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );\n\t\t}\n\t};\n});\n\n// submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function( data, namespaces ) {\n\t\t\tif ( !jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\tjQuery.event.add(this, \"click.specialSubmit\", function( e ) {\n\t\t\t\t\t// Avoid triggering error on non-existent type attribute in IE VML (#7071)\n\t\t\t\t\tvar elem = e.target,\n\t\t\t\t\t\ttype = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.type : \"\";\n\n\t\t\t\t\tif ( (type === \"submit\" || type === \"image\") && jQuery( elem ).closest(\"form\").length ) {\n\t\t\t\t\t\ttrigger( \"submit\", this, arguments );\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tjQuery.event.add(this, \"keypress.specialSubmit\", function( e ) {\n\t\t\t\t\tvar elem = e.target,\n\t\t\t\t\t\ttype = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.type : \"\";\n\n\t\t\t\t\tif ( (type === \"text\" || type === \"password\") && jQuery( elem ).closest(\"form\").length && e.keyCode === 13 ) {\n\t\t\t\t\t\ttrigger( \"submit\", this, arguments );\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\tteardown: function( namespaces ) {\n\t\t\tjQuery.event.remove( this, \".specialSubmit\" );\n\t\t}\n\t};\n\n}\n\n// change delegation, happens here so we have bind.\nif ( !jQuery.support.changeBubbles ) {\n\n\tvar changeFilters,\n\n\tgetVal = function( elem ) {\n\t\tvar type = jQuery.nodeName( elem, \"input\" ) ? elem.type : \"\",\n\t\t\tval = elem.value;\n\n\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\tval = elem.checked;\n\n\t\t} else if ( type === \"select-multiple\" ) {\n\t\t\tval = elem.selectedIndex > -1 ?\n\t\t\t\tjQuery.map( elem.options, function( elem ) {\n\t\t\t\t\treturn elem.selected;\n\t\t\t\t}).join(\"-\") :\n\t\t\t\t\"\";\n\n\t\t} else if ( jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\tval = elem.selectedIndex;\n\t\t}\n\n\t\treturn val;\n\t},\n\n\ttestChange = function testChange( e ) {\n\t\tvar elem = e.target, data, val;\n\n\t\tif ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdata = jQuery._data( elem, \"_change_data\" );\n\t\tval = getVal(elem);\n\n\t\t// the current data will be also retrieved by beforeactivate\n\t\tif ( e.type !== \"focusout\" || elem.type !== \"radio\" ) {\n\t\t\tjQuery._data( elem, \"_change_data\", val );\n\t\t}\n\n\t\tif ( data === undefined || val === data ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( data != null || val ) {\n\t\t\te.type = \"change\";\n\t\t\te.liveFired = undefined;\n\t\t\tjQuery.event.trigger( e, arguments[1], elem );\n\t\t}\n\t};\n\n\tjQuery.event.special.change = {\n\t\tfilters: {\n\t\t\tfocusout: testChange,\n\n\t\t\tbeforedeactivate: testChange,\n\n\t\t\tclick: function( e ) {\n\t\t\t\tvar elem = e.target, type = jQuery.nodeName( elem, \"input\" ) ? elem.type : \"\";\n\n\t\t\t\tif ( type === \"radio\" || type === \"checkbox\" || jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\t\ttestChange.call( this, e );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Change has to be called before submit\n\t\t\t// Keydown will be called before keypress, which is used in submit-event delegation\n\t\t\tkeydown: function( e ) {\n\t\t\t\tvar elem = e.target, type = jQuery.nodeName( elem, \"input\" ) ? elem.type : \"\";\n\n\t\t\t\tif ( (e.keyCode === 13 && !jQuery.nodeName( elem, \"textarea\" ) ) ||\n\t\t\t\t\t(e.keyCode === 32 && (type === \"checkbox\" || type === \"radio\")) ||\n\t\t\t\t\ttype === \"select-multiple\" ) {\n\t\t\t\t\ttestChange.call( this, e );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Beforeactivate happens also before the previous element is blurred\n\t\t\t// with this event you can't trigger a change event, but you can store\n\t\t\t// information\n\t\t\tbeforeactivate: function( e ) {\n\t\t\t\tvar elem = e.target;\n\t\t\t\tjQuery._data( elem, \"_change_data\", getVal(elem) );\n\t\t\t}\n\t\t},\n\n\t\tsetup: function( data, namespaces ) {\n\t\t\tif ( this.type === \"file\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor ( var type in changeFilters ) {\n\t\t\t\tjQuery.event.add( this, type + \".specialChange\", changeFilters[type] );\n\t\t\t}\n\n\t\t\treturn rformElems.test( this.nodeName );\n\t\t},\n\n\t\tteardown: function( namespaces ) {\n\t\t\tjQuery.event.remove( this, \".specialChange\" );\n\n\t\t\treturn rformElems.test( this.nodeName );\n\t\t}\n\t};\n\n\tchangeFilters = jQuery.event.special.change.filters;\n\n\t// Handle when the input is .focus()'d\n\tchangeFilters.focus = changeFilters.beforeactivate;\n}\n\nfunction trigger( type, elem, args ) {\n\t// Piggyback on a donor event to simulate a different one.\n\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t// simulated event prevents default then we do the same on the donor.\n\t// Don't pass args or remember liveFired; they apply to the donor event.\n\tvar event = jQuery.extend( {}, args[ 0 ] );\n\tevent.type = type;\n\tevent.originalEvent = {};\n\tevent.liveFired = undefined;\n\tjQuery.event.handle.call( elem, event );\n\tif ( event.isDefaultPrevented() ) {\n\t\targs[ 0 ].preventDefault();\n\t}\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0;\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfunction handler( donor ) {\n\t\t\t// Donor event is always a native one; fix it and switch its type.\n\t\t\t// Let focusin/out handler cancel the donor focus/blur event.\n\t\t\tvar e = jQuery.event.fix( donor );\n\t\t\te.type = fix;\n\t\t\te.originalEvent = {};\n\t\t\tjQuery.event.trigger( e, null, e.target );\n\t\t\tif ( e.isDefaultPrevented() ) {\n\t\t\t\tdonor.preventDefault();\n\t\t\t}\n\t\t}\n\t});\n}\n\njQuery.each([\"bind\", \"one\"], function( i, name ) {\n\tjQuery.fn[ name ] = function( type, data, fn ) {\n\t\tvar handler;\n\n\t\t// Handle object literals\n\t\tif ( typeof type === \"object\" ) {\n\t\t\tfor ( var key in type ) {\n\t\t\t\tthis[ name ](key, data, type[key], fn);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( arguments.length === 2 || data === false ) {\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\tif ( name === \"one\" ) {\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery( this ).unbind( event, handler );\n\t\t\t\treturn fn.apply( this, arguments );\n\t\t\t};\n\t\t\thandler.guid = fn.guid || jQuery.guid++;\n\t\t} else {\n\t\t\thandler = fn;\n\t\t}\n\n\t\tif ( type === \"unload\" && name !== \"one\" ) {\n\t\t\tthis.one( type, data, fn );\n\n\t\t} else {\n\t\t\tfor ( var i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( this[i], type, handler, data );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t};\n});\n\njQuery.fn.extend({\n\tunbind: function( type, fn ) {\n\t\t// Handle object literals\n\t\tif ( typeof type === \"object\" && !type.preventDefault ) {\n\t\t\tfor ( var key in type ) {\n\t\t\t\tthis.unbind(key, type[key]);\n\t\t\t}\n\n\t\t} else {\n\t\t\tfor ( var i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\tjQuery.event.remove( this[i], type, fn );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.live( types, data, fn, selector );\n\t},\n\n\tundelegate: function( selector, types, fn ) {\n\t\tif ( arguments.length === 0 ) {\n\t\t\treturn this.unbind( \"live\" );\n\n\t\t} else {\n\t\t\treturn this.die( types, null, fn, selector );\n\t\t}\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\n\ttriggerHandler: function( type, data ) {\n\t\tif ( this[0] ) {\n\t\t\treturn jQuery.event.trigger( type, data, this[0], true );\n\t\t}\n\t},\n\n\ttoggle: function( fn ) {\n\t\t// Save reference to arguments for access in closure\n\t\tvar args = arguments,\n\t\t\tguid = fn.guid || jQuery.guid++,\n\t\t\ti = 0,\n\t\t\ttoggler = function( event ) {\n\t\t\t\t// Figure out which function to execute\n\t\t\t\tvar lastToggle = ( jQuery.data( this, \"lastToggle\" + fn.guid ) || 0 ) % i;\n\t\t\t\tjQuery.data( this, \"lastToggle\" + fn.guid, lastToggle + 1 );\n\n\t\t\t\t// Make sure that clicks stop\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// and execute the function\n\t\t\t\treturn args[ lastToggle ].apply( this, arguments ) || false;\n\t\t\t};\n\n\t\t// link all the functions, so any of them can unbind this click handler\n\t\ttoggler.guid = guid;\n\t\twhile ( i < args.length ) {\n\t\t\targs[ i++ ].guid = guid;\n\t\t}\n\n\t\treturn this.click( toggler );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n});\n\nvar liveMap = {\n\tfocus: \"focusin\",\n\tblur: \"focusout\",\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n};\n\njQuery.each([\"live\", \"die\"], function( i, name ) {\n\tjQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {\n\t\tvar type, i = 0, match, namespaces, preType,\n\t\t\tselector = origSelector || this.selector,\n\t\t\tcontext = origSelector ? this : jQuery( this.context );\n\n\t\tif ( typeof types === \"object\" && !types.preventDefault ) {\n\t\t\tfor ( var key in types ) {\n\t\t\t\tcontext[ name ]( key, data, types[key], selector );\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( name === \"die\" && !types &&\n\t\t\t\t\torigSelector && origSelector.charAt(0) === \".\" ) {\n\n\t\t\tcontext.unbind( origSelector );\n\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data === false || jQuery.isFunction( data ) ) {\n\t\t\tfn = data || returnFalse;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\ttypes = (types || \"\").split(\" \");\n\n\t\twhile ( (type = types[ i++ ]) != null ) {\n\t\t\tmatch = rnamespaces.exec( type );\n\t\t\tnamespaces = \"\";\n\n\t\t\tif ( match )  {\n\t\t\t\tnamespaces = match[0];\n\t\t\t\ttype = type.replace( rnamespaces, \"\" );\n\t\t\t}\n\n\t\t\tif ( type === \"hover\" ) {\n\t\t\t\ttypes.push( \"mouseenter\" + namespaces, \"mouseleave\" + namespaces );\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpreType = type;\n\n\t\t\tif ( liveMap[ type ] ) {\n\t\t\t\ttypes.push( liveMap[ type ] + namespaces );\n\t\t\t\ttype = type + namespaces;\n\n\t\t\t} else {\n\t\t\t\ttype = (liveMap[ type ] || type) + namespaces;\n\t\t\t}\n\n\t\t\tif ( name === \"live\" ) {\n\t\t\t\t// bind live handler\n\t\t\t\tfor ( var j = 0, l = context.length; j < l; j++ ) {\n\t\t\t\t\tjQuery.event.add( context[j], \"live.\" + liveConvert( type, selector ),\n\t\t\t\t\t\t{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// unbind live handler\n\t\t\t\tcontext.unbind( \"live.\" + liveConvert( type, selector ), fn );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t};\n});\n\nfunction liveHandler( event ) {\n\tvar stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,\n\t\telems = [],\n\t\tselectors = [],\n\t\tevents = jQuery._data( this, \"events\" );\n\n\t// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)\n\tif ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === \"click\" ) {\n\t\treturn;\n\t}\n\n\tif ( event.namespace ) {\n\t\tnamespace = new RegExp(\"(^|\\\\.)\" + event.namespace.split(\".\").join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\");\n\t}\n\n\tevent.liveFired = this;\n\n\tvar live = events.live.slice(0);\n\n\tfor ( j = 0; j < live.length; j++ ) {\n\t\thandleObj = live[j];\n\n\t\tif ( handleObj.origType.replace( rnamespaces, \"\" ) === event.type ) {\n\t\t\tselectors.push( handleObj.selector );\n\n\t\t} else {\n\t\t\tlive.splice( j--, 1 );\n\t\t}\n\t}\n\n\tmatch = jQuery( event.target ).closest( selectors, event.currentTarget );\n\n\tfor ( i = 0, l = match.length; i < l; i++ ) {\n\t\tclose = match[i];\n\n\t\tfor ( j = 0; j < live.length; j++ ) {\n\t\t\thandleObj = live[j];\n\n\t\t\tif ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {\n\t\t\t\telem = close.elem;\n\t\t\t\trelated = null;\n\n\t\t\t\t// Those two events require additional checking\n\t\t\t\tif ( handleObj.preType === \"mouseenter\" || handleObj.preType === \"mouseleave\" ) {\n\t\t\t\t\tevent.type = handleObj.preType;\n\t\t\t\t\trelated = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];\n\n\t\t\t\t\t// Make sure not to accidentally match a child element with the same selector\n\t\t\t\t\tif ( related && jQuery.contains( elem, related ) ) {\n\t\t\t\t\t\trelated = elem;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( !related || related !== elem ) {\n\t\t\t\t\telems.push({ elem: elem, handleObj: handleObj, level: close.level });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor ( i = 0, l = elems.length; i < l; i++ ) {\n\t\tmatch = elems[i];\n\n\t\tif ( maxLevel && match.level > maxLevel ) {\n\t\t\tbreak;\n\t\t}\n\n\t\tevent.currentTarget = match.elem;\n\t\tevent.data = match.handleObj.data;\n\t\tevent.handleObj = match.handleObj;\n\n\t\tret = match.handleObj.origHandler.apply( match.elem, arguments );\n\n\t\tif ( ret === false || event.isPropagationStopped() ) {\n\t\t\tmaxLevel = match.level;\n\n\t\t\tif ( ret === false ) {\n\t\t\t\tstop = false;\n\t\t\t}\n\t\t\tif ( event.isImmediatePropagationStopped() ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn stop;\n}\n\nfunction liveConvert( type, selector ) {\n\treturn (type && type !== \"*\" ? type + \".\" : \"\") + selector.replace(rperiod, \"`\").replace(rspaces, \"&\");\n}\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\tif ( fn == null ) {\n\t\t\tfn = data;\n\t\t\tdata = null;\n\t\t}\n\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.bind( name, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n\n\tif ( jQuery.attrFn ) {\n\t\tjQuery.attrFn[ name ] = true;\n\t}\n});\n\n\n\n/*!\n * Sizzle CSS Selector Engine\n *  Copyright 2011, The Dojo Foundation\n *  Released under the MIT, BSD, and GPL Licenses.\n *  More information: http://sizzlejs.com/\n */\n(function(){\n\nvar chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,\n\tdone = 0,\n\ttoString = Object.prototype.toString,\n\thasDuplicate = false,\n\tbaseHasDuplicate = true,\n\trBackslash = /\\\\/g,\n\trNonWord = /\\W/;\n\n// Here we check if the JavaScript engine is using some sort of\n// optimization where it does not always call our comparision\n// function. If that is the case, discard the hasDuplicate value.\n//   Thus far that includes Google Chrome.\n[0, 0].sort(function() {\n\tbaseHasDuplicate = false;\n\treturn 0;\n});\n\nvar Sizzle = function( selector, context, results, seed ) {\n\tresults = results || [];\n\tcontext = context || document;\n\n\tvar origContext = context;\n\n\tif ( context.nodeType !== 1 && context.nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\t\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tvar m, set, checkSet, extra, ret, cur, pop, i,\n\t\tprune = true,\n\t\tcontextXML = Sizzle.isXML( context ),\n\t\tparts = [],\n\t\tsoFar = selector;\n\t\n\t// Reset the position of the chunker regexp (start from head)\n\tdo {\n\t\tchunker.exec( \"\" );\n\t\tm = chunker.exec( soFar );\n\n\t\tif ( m ) {\n\t\t\tsoFar = m[3];\n\t\t\n\t\t\tparts.push( m[1] );\n\t\t\n\t\t\tif ( m[2] ) {\n\t\t\t\textra = m[3];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} while ( m );\n\n\tif ( parts.length > 1 && origPOS.exec( selector ) ) {\n\n\t\tif ( parts.length === 2 && Expr.relative[ parts[0] ] ) {\n\t\t\tset = posProcess( parts[0] + parts[1], context );\n\n\t\t} else {\n\t\t\tset = Expr.relative[ parts[0] ] ?\n\t\t\t\t[ context ] :\n\t\t\t\tSizzle( parts.shift(), context );\n\n\t\t\twhile ( parts.length ) {\n\t\t\t\tselector = parts.shift();\n\n\t\t\t\tif ( Expr.relative[ selector ] ) {\n\t\t\t\t\tselector += parts.shift();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tset = posProcess( selector, set );\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t// (but not if it'll be faster if the inner selector is an ID)\n\t\tif ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&\n\t\t\t\tExpr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {\n\n\t\t\tret = Sizzle.find( parts.shift(), context, contextXML );\n\t\t\tcontext = ret.expr ?\n\t\t\t\tSizzle.filter( ret.expr, ret.set )[0] :\n\t\t\t\tret.set[0];\n\t\t}\n\n\t\tif ( context ) {\n\t\t\tret = seed ?\n\t\t\t\t{ expr: parts.pop(), set: makeArray(seed) } :\n\t\t\t\tSizzle.find( parts.pop(), parts.length === 1 && (parts[0] === \"~\" || parts[0] === \"+\") && context.parentNode ? context.parentNode : context, contextXML );\n\n\t\t\tset = ret.expr ?\n\t\t\t\tSizzle.filter( ret.expr, ret.set ) :\n\t\t\t\tret.set;\n\n\t\t\tif ( parts.length > 0 ) {\n\t\t\t\tcheckSet = makeArray( set );\n\n\t\t\t} else {\n\t\t\t\tprune = false;\n\t\t\t}\n\n\t\t\twhile ( parts.length ) {\n\t\t\t\tcur = parts.pop();\n\t\t\t\tpop = cur;\n\n\t\t\t\tif ( !Expr.relative[ cur ] ) {\n\t\t\t\t\tcur = \"\";\n\t\t\t\t} else {\n\t\t\t\t\tpop = parts.pop();\n\t\t\t\t}\n\n\t\t\t\tif ( pop == null ) {\n\t\t\t\t\tpop = context;\n\t\t\t\t}\n\n\t\t\t\tExpr.relative[ cur ]( checkSet, pop, contextXML );\n\t\t\t}\n\n\t\t} else {\n\t\t\tcheckSet = parts = [];\n\t\t}\n\t}\n\n\tif ( !checkSet ) {\n\t\tcheckSet = set;\n\t}\n\n\tif ( !checkSet ) {\n\t\tSizzle.error( cur || selector );\n\t}\n\n\tif ( toString.call(checkSet) === \"[object Array]\" ) {\n\t\tif ( !prune ) {\n\t\t\tresults.push.apply( results, checkSet );\n\n\t\t} else if ( context && context.nodeType === 1 ) {\n\t\t\tfor ( i = 0; checkSet[i] != null; i++ ) {\n\t\t\t\tif ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {\n\t\t\t\t\tresults.push( set[i] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\t\t\tfor ( i = 0; checkSet[i] != null; i++ ) {\n\t\t\t\tif ( checkSet[i] && checkSet[i].nodeType === 1 ) {\n\t\t\t\t\tresults.push( set[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\tmakeArray( checkSet, results );\n\t}\n\n\tif ( extra ) {\n\t\tSizzle( extra, origContext, results, seed );\n\t\tSizzle.uniqueSort( results );\n\t}\n\n\treturn results;\n};\n\nSizzle.uniqueSort = function( results ) {\n\tif ( sortOrder ) {\n\t\thasDuplicate = baseHasDuplicate;\n\t\tresults.sort( sortOrder );\n\n\t\tif ( hasDuplicate ) {\n\t\t\tfor ( var i = 1; i < results.length; i++ ) {\n\t\t\t\tif ( results[i] === results[ i - 1 ] ) {\n\t\t\t\t\tresults.splice( i--, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results;\n};\n\nSizzle.matches = function( expr, set ) {\n\treturn Sizzle( expr, null, null, set );\n};\n\nSizzle.matchesSelector = function( node, expr ) {\n\treturn Sizzle( expr, null, null, [node] ).length > 0;\n};\n\nSizzle.find = function( expr, context, isXML ) {\n\tvar set;\n\n\tif ( !expr ) {\n\t\treturn [];\n\t}\n\n\tfor ( var i = 0, l = Expr.order.length; i < l; i++ ) {\n\t\tvar match,\n\t\t\ttype = Expr.order[i];\n\t\t\n\t\tif ( (match = Expr.leftMatch[ type ].exec( expr )) ) {\n\t\t\tvar left = match[1];\n\t\t\tmatch.splice( 1, 1 );\n\n\t\t\tif ( left.substr( left.length - 1 ) !== \"\\\\\" ) {\n\t\t\t\tmatch[1] = (match[1] || \"\").replace( rBackslash, \"\" );\n\t\t\t\tset = Expr.find[ type ]( match, context, isXML );\n\n\t\t\t\tif ( set != null ) {\n\t\t\t\t\texpr = expr.replace( Expr.match[ type ], \"\" );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( !set ) {\n\t\tset = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( \"*\" ) :\n\t\t\t[];\n\t}\n\n\treturn { set: set, expr: expr };\n};\n\nSizzle.filter = function( expr, set, inplace, not ) {\n\tvar match, anyFound,\n\t\told = expr,\n\t\tresult = [],\n\t\tcurLoop = set,\n\t\tisXMLFilter = set && set[0] && Sizzle.isXML( set[0] );\n\n\twhile ( expr && set.length ) {\n\t\tfor ( var type in Expr.filter ) {\n\t\t\tif ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {\n\t\t\t\tvar found, item,\n\t\t\t\t\tfilter = Expr.filter[ type ],\n\t\t\t\t\tleft = match[1];\n\n\t\t\t\tanyFound = false;\n\n\t\t\t\tmatch.splice(1,1);\n\n\t\t\t\tif ( left.substr( left.length - 1 ) === \"\\\\\" ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( curLoop === result ) {\n\t\t\t\t\tresult = [];\n\t\t\t\t}\n\n\t\t\t\tif ( Expr.preFilter[ type ] ) {\n\t\t\t\t\tmatch = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );\n\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\tanyFound = found = true;\n\n\t\t\t\t\t} else if ( match === true ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( match ) {\n\t\t\t\t\tfor ( var i = 0; (item = curLoop[i]) != null; i++ ) {\n\t\t\t\t\t\tif ( item ) {\n\t\t\t\t\t\t\tfound = filter( item, match, i, curLoop );\n\t\t\t\t\t\t\tvar pass = not ^ !!found;\n\n\t\t\t\t\t\t\tif ( inplace && found != null ) {\n\t\t\t\t\t\t\t\tif ( pass ) {\n\t\t\t\t\t\t\t\t\tanyFound = true;\n\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcurLoop[i] = false;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else if ( pass ) {\n\t\t\t\t\t\t\t\tresult.push( item );\n\t\t\t\t\t\t\t\tanyFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( found !== undefined ) {\n\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\tcurLoop = result;\n\t\t\t\t\t}\n\n\t\t\t\t\texpr = expr.replace( Expr.match[ type ], \"\" );\n\n\t\t\t\t\tif ( !anyFound ) {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Improper expression\n\t\tif ( expr === old ) {\n\t\t\tif ( anyFound == null ) {\n\t\t\t\tSizzle.error( expr );\n\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\told = expr;\n\t}\n\n\treturn curLoop;\n};\n\nSizzle.error = function( msg ) {\n\tthrow \"Syntax error, unrecognized expression: \" + msg;\n};\n\nvar Expr = Sizzle.selectors = {\n\torder: [ \"ID\", \"NAME\", \"TAG\" ],\n\n\tmatch: {\n\t\tID: /#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,\n\t\tCLASS: /\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,\n\t\tNAME: /\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,\n\t\tATTR: /\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,\n\t\tTAG: /^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,\n\t\tCHILD: /:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,\n\t\tPOS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,\n\t\tPSEUDO: /:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/\n\t},\n\n\tleftMatch: {},\n\n\tattrMap: {\n\t\t\"class\": \"className\",\n\t\t\"for\": \"htmlFor\"\n\t},\n\n\tattrHandle: {\n\t\thref: function( elem ) {\n\t\t\treturn elem.getAttribute( \"href\" );\n\t\t},\n\t\ttype: function( elem ) {\n\t\t\treturn elem.getAttribute( \"type\" );\n\t\t}\n\t},\n\n\trelative: {\n\t\t\"+\": function(checkSet, part){\n\t\t\tvar isPartStr = typeof part === \"string\",\n\t\t\t\tisTag = isPartStr && !rNonWord.test( part ),\n\t\t\t\tisPartStrNotTag = isPartStr && !isTag;\n\n\t\t\tif ( isTag ) {\n\t\t\t\tpart = part.toLowerCase();\n\t\t\t}\n\n\t\t\tfor ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {\n\t\t\t\tif ( (elem = checkSet[i]) ) {\n\t\t\t\t\twhile ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}\n\n\t\t\t\t\tcheckSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?\n\t\t\t\t\t\telem || false :\n\t\t\t\t\t\telem === part;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( isPartStrNotTag ) {\n\t\t\t\tSizzle.filter( part, checkSet, true );\n\t\t\t}\n\t\t},\n\n\t\t\">\": function( checkSet, part ) {\n\t\t\tvar elem,\n\t\t\t\tisPartStr = typeof part === \"string\",\n\t\t\t\ti = 0,\n\t\t\t\tl = checkSet.length;\n\n\t\t\tif ( isPartStr && !rNonWord.test( part ) ) {\n\t\t\t\tpart = part.toLowerCase();\n\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\telem = checkSet[i];\n\n\t\t\t\t\tif ( elem ) {\n\t\t\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\t\t\tcheckSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\telem = checkSet[i];\n\n\t\t\t\t\tif ( elem ) {\n\t\t\t\t\t\tcheckSet[i] = isPartStr ?\n\t\t\t\t\t\t\telem.parentNode :\n\t\t\t\t\t\t\telem.parentNode === part;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( isPartStr ) {\n\t\t\t\t\tSizzle.filter( part, checkSet, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t\"\": function(checkSet, part, isXML){\n\t\t\tvar nodeCheck,\n\t\t\t\tdoneName = done++,\n\t\t\t\tcheckFn = dirCheck;\n\n\t\t\tif ( typeof part === \"string\" && !rNonWord.test( part ) ) {\n\t\t\t\tpart = part.toLowerCase();\n\t\t\t\tnodeCheck = part;\n\t\t\t\tcheckFn = dirNodeCheck;\n\t\t\t}\n\n\t\t\tcheckFn( \"parentNode\", part, doneName, checkSet, nodeCheck, isXML );\n\t\t},\n\n\t\t\"~\": function( checkSet, part, isXML ) {\n\t\t\tvar nodeCheck,\n\t\t\t\tdoneName = done++,\n\t\t\t\tcheckFn = dirCheck;\n\n\t\t\tif ( typeof part === \"string\" && !rNonWord.test( part ) ) {\n\t\t\t\tpart = part.toLowerCase();\n\t\t\t\tnodeCheck = part;\n\t\t\t\tcheckFn = dirNodeCheck;\n\t\t\t}\n\n\t\t\tcheckFn( \"previousSibling\", part, doneName, checkSet, nodeCheck, isXML );\n\t\t}\n\t},\n\n\tfind: {\n\t\tID: function( match, context, isXML ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\t\t\t\tvar m = context.getElementById(match[1]);\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t},\n\n\t\tNAME: function( match, context ) {\n\t\t\tif ( typeof context.getElementsByName !== \"undefined\" ) {\n\t\t\t\tvar ret = [],\n\t\t\t\t\tresults = context.getElementsByName( match[1] );\n\n\t\t\t\tfor ( var i = 0, l = results.length; i < l; i++ ) {\n\t\t\t\t\tif ( results[i].getAttribute(\"name\") === match[1] ) {\n\t\t\t\t\t\tret.push( results[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn ret.length === 0 ? null : ret;\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( match, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( match[1] );\n\t\t\t}\n\t\t}\n\t},\n\tpreFilter: {\n\t\tCLASS: function( match, curLoop, inplace, result, not, isXML ) {\n\t\t\tmatch = \" \" + match[1].replace( rBackslash, \"\" ) + \" \";\n\n\t\t\tif ( isXML ) {\n\t\t\t\treturn match;\n\t\t\t}\n\n\t\t\tfor ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {\n\t\t\t\tif ( elem ) {\n\t\t\t\t\tif ( not ^ (elem.className && (\" \" + elem.className + \" \").replace(/[\\t\\n\\r]/g, \" \").indexOf(match) >= 0) ) {\n\t\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\t\tresult.push( elem );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( inplace ) {\n\t\t\t\t\t\tcurLoop[i] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\tID: function( match ) {\n\t\t\treturn match[1].replace( rBackslash, \"\" );\n\t\t},\n\n\t\tTAG: function( match, curLoop ) {\n\t\t\treturn match[1].replace( rBackslash, \"\" ).toLowerCase();\n\t\t},\n\n\t\tCHILD: function( match ) {\n\t\t\tif ( match[1] === \"nth\" ) {\n\t\t\t\tif ( !match[2] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\tmatch[2] = match[2].replace(/^\\+|\\s*/g, '');\n\n\t\t\t\t// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'\n\t\t\t\tvar test = /(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(\n\t\t\t\t\tmatch[2] === \"even\" && \"2n\" || match[2] === \"odd\" && \"2n+1\" ||\n\t\t\t\t\t!/\\D/.test( match[2] ) && \"0n+\" + match[2] || match[2]);\n\n\t\t\t\t// calculate the numbers (first)n+(last) including if they are negative\n\t\t\t\tmatch[2] = (test[1] + (test[2] || 1)) - 0;\n\t\t\t\tmatch[3] = test[3] - 0;\n\t\t\t}\n\t\t\telse if ( match[2] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\t// TODO: Move to normal caching system\n\t\t\tmatch[0] = done++;\n\n\t\t\treturn match;\n\t\t},\n\n\t\tATTR: function( match, curLoop, inplace, result, not, isXML ) {\n\t\t\tvar name = match[1] = match[1].replace( rBackslash, \"\" );\n\t\t\t\n\t\t\tif ( !isXML && Expr.attrMap[name] ) {\n\t\t\t\tmatch[1] = Expr.attrMap[name];\n\t\t\t}\n\n\t\t\t// Handle if an un-quoted value was used\n\t\t\tmatch[4] = ( match[4] || match[5] || \"\" ).replace( rBackslash, \"\" );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[4] = \" \" + match[4] + \" \";\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match, curLoop, inplace, result, not ) {\n\t\t\tif ( match[1] === \"not\" ) {\n\t\t\t\t// If we're dealing with a complex expression, or a simple one\n\t\t\t\tif ( ( chunker.exec(match[3]) || \"\" ).length > 1 || /^\\w/.test(match[3]) ) {\n\t\t\t\t\tmatch[3] = Sizzle(match[3], null, null, curLoop);\n\n\t\t\t\t} else {\n\t\t\t\t\tvar ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);\n\n\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\tresult.push.apply( result, ret );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\treturn match;\n\t\t},\n\n\t\tPOS: function( match ) {\n\t\t\tmatch.unshift( true );\n\n\t\t\treturn match;\n\t\t}\n\t},\n\t\n\tfilters: {\n\t\tenabled: function( elem ) {\n\t\t\treturn elem.disabled === false && elem.type !== \"hidden\";\n\t\t},\n\n\t\tdisabled: function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\tchecked: function( elem ) {\n\t\t\treturn elem.checked === true;\n\t\t},\n\t\t\n\t\tselected: function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\t\t\t\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !!elem.firstChild;\n\t\t},\n\n\t\tempty: function( elem ) {\n\t\t\treturn !elem.firstChild;\n\t\t},\n\n\t\thas: function( elem, i, match ) {\n\t\t\treturn !!Sizzle( match[3], elem ).length;\n\t\t},\n\n\t\theader: function( elem ) {\n\t\t\treturn (/h\\d/i).test( elem.nodeName );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr = elem.getAttribute( \"type\" ), type = elem.type;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) \n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"text\" === type && ( attr === type || attr === null );\n\t\t},\n\n\t\tradio: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"radio\" === elem.type;\n\t\t},\n\n\t\tcheckbox: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"checkbox\" === elem.type;\n\t\t},\n\n\t\tfile: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"file\" === elem.type;\n\t\t},\n\n\t\tpassword: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"password\" === elem.type;\n\t\t},\n\n\t\tsubmit: function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn (name === \"input\" || name === \"button\") && \"submit\" === elem.type;\n\t\t},\n\n\t\timage: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"image\" === elem.type;\n\t\t},\n\n\t\treset: function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn (name === \"input\" || name === \"button\") && \"reset\" === elem.type;\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && \"button\" === elem.type || name === \"button\";\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn (/input|select|textarea|button/i).test( elem.nodeName );\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === elem.ownerDocument.activeElement;\n\t\t}\n\t},\n\tsetFilters: {\n\t\tfirst: function( elem, i ) {\n\t\t\treturn i === 0;\n\t\t},\n\n\t\tlast: function( elem, i, match, array ) {\n\t\t\treturn i === array.length - 1;\n\t\t},\n\n\t\teven: function( elem, i ) {\n\t\t\treturn i % 2 === 0;\n\t\t},\n\n\t\todd: function( elem, i ) {\n\t\t\treturn i % 2 === 1;\n\t\t},\n\n\t\tlt: function( elem, i, match ) {\n\t\t\treturn i < match[3] - 0;\n\t\t},\n\n\t\tgt: function( elem, i, match ) {\n\t\t\treturn i > match[3] - 0;\n\t\t},\n\n\t\tnth: function( elem, i, match ) {\n\t\t\treturn match[3] - 0 === i;\n\t\t},\n\n\t\teq: function( elem, i, match ) {\n\t\t\treturn match[3] - 0 === i;\n\t\t}\n\t},\n\tfilter: {\n\t\tPSEUDO: function( elem, match, i, array ) {\n\t\t\tvar name = match[1],\n\t\t\t\tfilter = Expr.filters[ name ];\n\n\t\t\tif ( filter ) {\n\t\t\t\treturn filter( elem, i, match, array );\n\n\t\t\t} else if ( name === \"contains\" ) {\n\t\t\t\treturn (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || \"\").indexOf(match[3]) >= 0;\n\n\t\t\t} else if ( name === \"not\" ) {\n\t\t\t\tvar not = match[3];\n\n\t\t\t\tfor ( var j = 0, l = not.length; j < l; j++ ) {\n\t\t\t\t\tif ( not[j] === elem ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\t\t\t\tSizzle.error( name );\n\t\t\t}\n\t\t},\n\n\t\tCHILD: function( elem, match ) {\n\t\t\tvar type = match[1],\n\t\t\t\tnode = elem;\n\n\t\t\tswitch ( type ) {\n\t\t\t\tcase \"only\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\twhile ( (node = node.previousSibling) )\t {\n\t\t\t\t\t\tif ( node.nodeType === 1 ) { \n\t\t\t\t\t\t\treturn false; \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( type === \"first\" ) { \n\t\t\t\t\t\treturn true; \n\t\t\t\t\t}\n\n\t\t\t\t\tnode = elem;\n\n\t\t\t\tcase \"last\":\n\t\t\t\t\twhile ( (node = node.nextSibling) )\t {\n\t\t\t\t\t\tif ( node.nodeType === 1 ) { \n\t\t\t\t\t\t\treturn false; \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase \"nth\":\n\t\t\t\t\tvar first = match[2],\n\t\t\t\t\t\tlast = match[3];\n\n\t\t\t\t\tif ( first === 1 && last === 0 ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar doneName = match[0],\n\t\t\t\t\t\tparent = elem.parentNode;\n\t\n\t\t\t\t\tif ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {\n\t\t\t\t\t\tvar count = 0;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor ( node = parent.firstChild; node; node = node.nextSibling ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\tnode.nodeIndex = ++count;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\n\t\t\t\t\t\tparent.sizcache = doneName;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar diff = elem.nodeIndex - last;\n\n\t\t\t\t\tif ( first === 0 ) {\n\t\t\t\t\t\treturn diff === 0;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tID: function( elem, match ) {\n\t\t\treturn elem.nodeType === 1 && elem.getAttribute(\"id\") === match;\n\t\t},\n\n\t\tTAG: function( elem, match ) {\n\t\t\treturn (match === \"*\" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;\n\t\t},\n\t\t\n\t\tCLASS: function( elem, match ) {\n\t\t\treturn (\" \" + (elem.className || elem.getAttribute(\"class\")) + \" \")\n\t\t\t\t.indexOf( match ) > -1;\n\t\t},\n\n\t\tATTR: function( elem, match ) {\n\t\t\tvar name = match[1],\n\t\t\t\tresult = Expr.attrHandle[ name ] ?\n\t\t\t\t\tExpr.attrHandle[ name ]( elem ) :\n\t\t\t\t\telem[ name ] != null ?\n\t\t\t\t\t\telem[ name ] :\n\t\t\t\t\t\telem.getAttribute( name ),\n\t\t\t\tvalue = result + \"\",\n\t\t\t\ttype = match[2],\n\t\t\t\tcheck = match[4];\n\n\t\t\treturn result == null ?\n\t\t\t\ttype === \"!=\" :\n\t\t\t\ttype === \"=\" ?\n\t\t\t\tvalue === check :\n\t\t\t\ttype === \"*=\" ?\n\t\t\t\tvalue.indexOf(check) >= 0 :\n\t\t\t\ttype === \"~=\" ?\n\t\t\t\t(\" \" + value + \" \").indexOf(check) >= 0 :\n\t\t\t\t!check ?\n\t\t\t\tvalue && result !== false :\n\t\t\t\ttype === \"!=\" ?\n\t\t\t\tvalue !== check :\n\t\t\t\ttype === \"^=\" ?\n\t\t\t\tvalue.indexOf(check) === 0 :\n\t\t\t\ttype === \"$=\" ?\n\t\t\t\tvalue.substr(value.length - check.length) === check :\n\t\t\t\ttype === \"|=\" ?\n\t\t\t\tvalue === check || value.substr(0, check.length + 1) === check + \"-\" :\n\t\t\t\tfalse;\n\t\t},\n\n\t\tPOS: function( elem, match, i, array ) {\n\t\t\tvar name = match[2],\n\t\t\t\tfilter = Expr.setFilters[ name ];\n\n\t\t\tif ( filter ) {\n\t\t\t\treturn filter( elem, i, match, array );\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar origPOS = Expr.match.POS,\n\tfescape = function(all, num){\n\t\treturn \"\\\\\" + (num - 0 + 1);\n\t};\n\nfor ( var type in Expr.match ) {\n\tExpr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\\[]*\\])(?![^\\(]*\\))/.source) );\n\tExpr.leftMatch[ type ] = new RegExp( /(^(?:.|\\r|\\n)*?)/.source + Expr.match[ type ].source.replace(/\\\\(\\d+)/g, fescape) );\n}\n\nvar makeArray = function( array, results ) {\n\tarray = Array.prototype.slice.call( array, 0 );\n\n\tif ( results ) {\n\t\tresults.push.apply( results, array );\n\t\treturn results;\n\t}\n\t\n\treturn array;\n};\n\n// Perform a simple check to determine if the browser is capable of\n// converting a NodeList to an array using builtin methods.\n// Also verifies that the returned array holds DOM nodes\n// (which is not the case in the Blackberry browser)\ntry {\n\tArray.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;\n\n// Provide a fallback method if it does not work\n} catch( e ) {\n\tmakeArray = function( array, results ) {\n\t\tvar i = 0,\n\t\t\tret = results || [];\n\n\t\tif ( toString.call(array) === \"[object Array]\" ) {\n\t\t\tArray.prototype.push.apply( ret, array );\n\n\t\t} else {\n\t\t\tif ( typeof array.length === \"number\" ) {\n\t\t\t\tfor ( var l = array.length; i < l; i++ ) {\n\t\t\t\t\tret.push( array[i] );\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tfor ( ; array[i]; i++ ) {\n\t\t\t\t\tret.push( array[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n}\n\nvar sortOrder, siblingCheck;\n\nif ( document.documentElement.compareDocumentPosition ) {\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tif ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {\n\t\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t\t}\n\n\t\treturn a.compareDocumentPosition(b) & 4 ? -1 : 1;\n\t};\n\n} else {\n\tsortOrder = function( a, b ) {\n\t\t// The nodes are identical, we can exit early\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Fallback to using sourceIndex (in IE) if it's available on both nodes\n\t\t} else if ( a.sourceIndex && b.sourceIndex ) {\n\t\t\treturn a.sourceIndex - b.sourceIndex;\n\t\t}\n\n\t\tvar al, bl,\n\t\t\tap = [],\n\t\t\tbp = [],\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tcur = aup;\n\n\t\t// If the nodes are siblings (or identical) we can do a quick check\n\t\tif ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\n\t\t// If no parents were found then the nodes are disconnected\n\t\t} else if ( !aup ) {\n\t\t\treturn -1;\n\n\t\t} else if ( !bup ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Otherwise they're somewhere else in the tree so we need\n\t\t// to build up a full list of the parentNodes for comparison\n\t\twhile ( cur ) {\n\t\t\tap.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tcur = bup;\n\n\t\twhile ( cur ) {\n\t\t\tbp.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tal = ap.length;\n\t\tbl = bp.length;\n\n\t\t// Start walking down the tree looking for a discrepancy\n\t\tfor ( var i = 0; i < al && i < bl; i++ ) {\n\t\t\tif ( ap[i] !== bp[i] ) {\n\t\t\t\treturn siblingCheck( ap[i], bp[i] );\n\t\t\t}\n\t\t}\n\n\t\t// We ended someplace up the tree so do a sibling check\n\t\treturn i === al ?\n\t\t\tsiblingCheck( a, bp[i], -1 ) :\n\t\t\tsiblingCheck( ap[i], b, 1 );\n\t};\n\n\tsiblingCheck = function( a, b, ret ) {\n\t\tif ( a === b ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tvar cur = a.nextSibling;\n\n\t\twhile ( cur ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\tcur = cur.nextSibling;\n\t\t}\n\n\t\treturn 1;\n\t};\n}\n\n// Utility function for retreiving the text value of an array of DOM nodes\nSizzle.getText = function( elems ) {\n\tvar ret = \"\", elem;\n\n\tfor ( var i = 0; elems[i]; i++ ) {\n\t\telem = elems[i];\n\n\t\t// Get the text from text nodes and CDATA nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\tret += elem.nodeValue;\n\n\t\t// Traverse everything else, except comment nodes\n\t\t} else if ( elem.nodeType !== 8 ) {\n\t\t\tret += Sizzle.getText( elem.childNodes );\n\t\t}\n\t}\n\n\treturn ret;\n};\n\n// Check to see if the browser returns elements by name when\n// querying by getElementById (and provide a workaround)\n(function(){\n\t// We're going to inject a fake input element with a specified name\n\tvar form = document.createElement(\"div\"),\n\t\tid = \"script\" + (new Date()).getTime(),\n\t\troot = document.documentElement;\n\n\tform.innerHTML = \"<a name='\" + id + \"'/>\";\n\n\t// Inject it into the root element, check its status, and remove it quickly\n\troot.insertBefore( form, root.firstChild );\n\n\t// The workaround has to do additional checks after a getElementById\n\t// Which slows things down for other browsers (hence the branching)\n\tif ( document.getElementById( id ) ) {\n\t\tExpr.find.ID = function( match, context, isXML ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\t\t\t\tvar m = context.getElementById(match[1]);\n\n\t\t\t\treturn m ?\n\t\t\t\t\tm.id === match[1] || typeof m.getAttributeNode !== \"undefined\" && m.getAttributeNode(\"id\").nodeValue === match[1] ?\n\t\t\t\t\t\t[m] :\n\t\t\t\t\t\tundefined :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t};\n\n\t\tExpr.filter.ID = function( elem, match ) {\n\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n\n\t\t\treturn elem.nodeType === 1 && node && node.nodeValue === match;\n\t\t};\n\t}\n\n\troot.removeChild( form );\n\n\t// release memory in IE\n\troot = form = null;\n})();\n\n(function(){\n\t// Check to see if the browser returns only elements\n\t// when doing getElementsByTagName(\"*\")\n\n\t// Create a fake element\n\tvar div = document.createElement(\"div\");\n\tdiv.appendChild( document.createComment(\"\") );\n\n\t// Make sure no comments are found\n\tif ( div.getElementsByTagName(\"*\").length > 0 ) {\n\t\tExpr.find.TAG = function( match, context ) {\n\t\t\tvar results = context.getElementsByTagName( match[1] );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( match[1] === \"*\" ) {\n\t\t\t\tvar tmp = [];\n\n\t\t\t\tfor ( var i = 0; results[i]; i++ ) {\n\t\t\t\t\tif ( results[i].nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( results[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresults = tmp;\n\t\t\t}\n\n\t\t\treturn results;\n\t\t};\n\t}\n\n\t// Check to see if an attribute returns normalized href attributes\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\n\tif ( div.firstChild && typeof div.firstChild.getAttribute !== \"undefined\" &&\n\t\t\tdiv.firstChild.getAttribute(\"href\") !== \"#\" ) {\n\n\t\tExpr.attrHandle.href = function( elem ) {\n\t\t\treturn elem.getAttribute( \"href\", 2 );\n\t\t};\n\t}\n\n\t// release memory in IE\n\tdiv = null;\n})();\n\nif ( document.querySelectorAll ) {\n\t(function(){\n\t\tvar oldSizzle = Sizzle,\n\t\t\tdiv = document.createElement(\"div\"),\n\t\t\tid = \"__sizzle__\";\n\n\t\tdiv.innerHTML = \"<p class='TEST'></p>\";\n\n\t\t// Safari can't handle uppercase or unicode characters when\n\t\t// in quirks mode.\n\t\tif ( div.querySelectorAll && div.querySelectorAll(\".TEST\").length === 0 ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tSizzle = function( query, context, extra, seed ) {\n\t\t\tcontext = context || document;\n\n\t\t\t// Only use querySelectorAll on non-XML documents\n\t\t\t// (ID selectors don't work in non-HTML documents)\n\t\t\tif ( !seed && !Sizzle.isXML(context) ) {\n\t\t\t\t// See if we find a selector to speed up\n\t\t\t\tvar match = /^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec( query );\n\t\t\t\t\n\t\t\t\tif ( match && (context.nodeType === 1 || context.nodeType === 9) ) {\n\t\t\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t\t\tif ( match[1] ) {\n\t\t\t\t\t\treturn makeArray( context.getElementsByTagName( query ), extra );\n\t\t\t\t\t\n\t\t\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t\t\t} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {\n\t\t\t\t\t\treturn makeArray( context.getElementsByClassName( match[2] ), extra );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ( context.nodeType === 9 ) {\n\t\t\t\t\t// Speed-up: Sizzle(\"body\")\n\t\t\t\t\t// The body element only exists once, optimize finding it\n\t\t\t\t\tif ( query === \"body\" && context.body ) {\n\t\t\t\t\t\treturn makeArray( [ context.body ], extra );\n\t\t\t\t\t\t\n\t\t\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\t\t\t} else if ( match && match[3] ) {\n\t\t\t\t\t\tvar elem = context.getElementById( match[3] );\n\n\t\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === match[3] ) {\n\t\t\t\t\t\t\t\treturn makeArray( [ elem ], extra );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn makeArray( [], extra );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn makeArray( context.querySelectorAll(query), extra );\n\t\t\t\t\t} catch(qsaError) {}\n\n\t\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t\t// IE 8 doesn't work on object elements\n\t\t\t\t} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\t\tvar oldContext = context,\n\t\t\t\t\t\told = context.getAttribute( \"id\" ),\n\t\t\t\t\t\tnid = old || id,\n\t\t\t\t\t\thasParent = context.parentNode,\n\t\t\t\t\t\trelativeHierarchySelector = /^\\s*[+~]/.test( query );\n\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnid = nid.replace( /'/g, \"\\\\$&\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( relativeHierarchySelector && hasParent ) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif ( !relativeHierarchySelector || hasParent ) {\n\t\t\t\t\t\t\treturn makeArray( context.querySelectorAll( \"[id='\" + nid + \"'] \" + query ), extra );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} catch(pseudoError) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\t\toldContext.removeAttribute( \"id\" );\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\t\treturn oldSizzle(query, context, extra, seed);\n\t\t};\n\n\t\tfor ( var prop in oldSizzle ) {\n\t\t\tSizzle[ prop ] = oldSizzle[ prop ];\n\t\t}\n\n\t\t// release memory in IE\n\t\tdiv = null;\n\t})();\n}\n\n(function(){\n\tvar html = document.documentElement,\n\t\tmatches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;\n\n\tif ( matches ) {\n\t\t// Check to see if it's possible to do matchesSelector\n\t\t// on a disconnected node (IE 9 fails this)\n\t\tvar disconnectedMatch = !matches.call( document.createElement( \"div\" ), \"div\" ),\n\t\t\tpseudoWorks = false;\n\n\t\ttry {\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( document.documentElement, \"[test!='']:sizzle\" );\n\t\n\t\t} catch( pseudoError ) {\n\t\t\tpseudoWorks = true;\n\t\t}\n\n\t\tSizzle.matchesSelector = function( node, expr ) {\n\t\t\t// Make sure that attribute selectors are quoted\n\t\t\texpr = expr.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g, \"='$1']\");\n\n\t\t\tif ( !Sizzle.isXML( node ) ) {\n\t\t\t\ttry { \n\t\t\t\t\tif ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {\n\t\t\t\t\t\tvar ret = matches.call( node, expr );\n\n\t\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\t\tif ( ret || !disconnectedMatch ||\n\t\t\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t\t\t// fragment in IE 9, so check for that\n\t\t\t\t\t\t\t\tnode.document && node.document.nodeType !== 11 ) {\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\treturn Sizzle(expr, null, null, [node]).length > 0;\n\t\t};\n\t}\n})();\n\n(function(){\n\tvar div = document.createElement(\"div\");\n\n\tdiv.innerHTML = \"<div class='test e'></div><div class='test'></div>\";\n\n\t// Opera can't find a second classname (in 9.6)\n\t// Also, make sure that getElementsByClassName actually exists\n\tif ( !div.getElementsByClassName || div.getElementsByClassName(\"e\").length === 0 ) {\n\t\treturn;\n\t}\n\n\t// Safari caches class attributes, doesn't catch changes (in 3.2)\n\tdiv.lastChild.className = \"e\";\n\n\tif ( div.getElementsByClassName(\"e\").length === 1 ) {\n\t\treturn;\n\t}\n\t\n\tExpr.order.splice(1, 0, \"CLASS\");\n\tExpr.find.CLASS = function( match, context, isXML ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && !isXML ) {\n\t\t\treturn context.getElementsByClassName(match[1]);\n\t\t}\n\t};\n\n\t// release memory in IE\n\tdiv = null;\n})();\n\nfunction dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\tvar elem = checkSet[i];\n\n\t\tif ( elem ) {\n\t\t\tvar match = false;\n\n\t\t\telem = elem[dir];\n\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem.sizcache === doneName ) {\n\t\t\t\t\tmatch = checkSet[elem.sizset];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeType === 1 && !isXML ){\n\t\t\t\t\telem.sizcache = doneName;\n\t\t\t\t\telem.sizset = i;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeName.toLowerCase() === cur ) {\n\t\t\t\t\tmatch = elem;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telem = elem[dir];\n\t\t\t}\n\n\t\t\tcheckSet[i] = match;\n\t\t}\n\t}\n}\n\nfunction dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\tvar elem = checkSet[i];\n\n\t\tif ( elem ) {\n\t\t\tvar match = false;\n\t\t\t\n\t\t\telem = elem[dir];\n\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem.sizcache === doneName ) {\n\t\t\t\t\tmatch = checkSet[elem.sizset];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\tif ( !isXML ) {\n\t\t\t\t\t\telem.sizcache = doneName;\n\t\t\t\t\t\telem.sizset = i;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof cur !== \"string\" ) {\n\t\t\t\t\t\tif ( elem === cur ) {\n\t\t\t\t\t\t\tmatch = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {\n\t\t\t\t\t\tmatch = elem;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\telem = elem[dir];\n\t\t\t}\n\n\t\t\tcheckSet[i] = match;\n\t\t}\n\t}\n}\n\nif ( document.documentElement.contains ) {\n\tSizzle.contains = function( a, b ) {\n\t\treturn a !== b && (a.contains ? a.contains(b) : true);\n\t};\n\n} else if ( document.documentElement.compareDocumentPosition ) {\n\tSizzle.contains = function( a, b ) {\n\t\treturn !!(a.compareDocumentPosition(b) & 16);\n\t};\n\n} else {\n\tSizzle.contains = function() {\n\t\treturn false;\n\t};\n}\n\nSizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833) \n\tvar documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;\n\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\nvar posProcess = function( selector, context ) {\n\tvar match,\n\t\ttmpSet = [],\n\t\tlater = \"\",\n\t\troot = context.nodeType ? [context] : context;\n\n\t// Position selectors must be done after the filter\n\t// And so must :not(positional) so we move all PSEUDOs to the end\n\twhile ( (match = Expr.match.PSEUDO.exec( selector )) ) {\n\t\tlater += match[0];\n\t\tselector = selector.replace( Expr.match.PSEUDO, \"\" );\n\t}\n\n\tselector = Expr.relative[selector] ? selector + \"*\" : selector;\n\n\tfor ( var i = 0, l = root.length; i < l; i++ ) {\n\t\tSizzle( selector, root[i], tmpSet );\n\t}\n\n\treturn Sizzle.filter( later, tmpSet );\n};\n\n// EXPOSE\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.filters;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})();\n\n\nvar runtil = /Until$/,\n\trparentsprev = /^(?:parents|prevUntil|prevAll)/,\n\t// Note: This RegExp should be improved, or likely pulled from Sizzle\n\trmultiselector = /,/,\n\tisSimple = /^.[^:#\\[\\.,]*$/,\n\tslice = Array.prototype.slice,\n\tPOS = jQuery.expr.match.POS,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar self = this,\n\t\t\ti, l;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0, l = self.length; i < l; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar ret = this.pushStack( \"\", \"find\", selector ),\n\t\t\tlength, n, r;\n\n\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\tlength = ret.length;\n\t\t\tjQuery.find( selector, this[i], ret );\n\n\t\t\tif ( i > 0 ) {\n\t\t\t\t// Make sure that the results are unique\n\t\t\t\tfor ( n = length; n < ret.length; n++ ) {\n\t\t\t\t\tfor ( r = 0; r < length; r++ ) {\n\t\t\t\t\t\tif ( ret[r] === ret[n] ) {\n\t\t\t\t\t\t\tret.splice(n--, 1);\n\t\t\t\t\t\t\tbreak;\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\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar targets = jQuery( target );\n\t\treturn this.filter(function() {\n\t\t\tfor ( var i = 0, l = targets.length; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, false), \"not\", selector);\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, true), \"filter\", selector );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!selector && ( typeof selector === \"string\" ?\n\t\t\tjQuery.filter( selector, this ).length > 0 :\n\t\t\tthis.filter( selector ).length > 0 );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar ret = [], i, l, cur = this[0];\n\t\t\n\t\t// Array\n\t\tif ( jQuery.isArray( selectors ) ) {\n\t\t\tvar match, selector,\n\t\t\t\tmatches = {},\n\t\t\t\tlevel = 1;\n\n\t\t\tif ( cur && selectors.length ) {\n\t\t\t\tfor ( i = 0, l = selectors.length; i < l; i++ ) {\n\t\t\t\t\tselector = selectors[i];\n\n\t\t\t\t\tif ( !matches[ selector ] ) {\n\t\t\t\t\t\tmatches[ selector ] = POS.test( selector ) ?\n\t\t\t\t\t\t\tjQuery( selector, context || this.context ) :\n\t\t\t\t\t\t\tselector;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile ( cur && cur.ownerDocument && cur !== context ) {\n\t\t\t\t\tfor ( selector in matches ) {\n\t\t\t\t\t\tmatch = matches[ selector ];\n\n\t\t\t\t\t\tif ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {\n\t\t\t\t\t\t\tret.push({ selector: selector, elem: cur, level: level });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t\tlevel++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t}\n\n\t\t// String\n\t\tvar pos = POS.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\tcur = this[i];\n\n\t\t\twhile ( cur ) {\n\t\t\t\tif ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {\n\t\t\t\t\tret.push( cur );\n\t\t\t\t\tbreak;\n\n\t\t\t\t} else {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t\tif ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tret = ret.length > 1 ? jQuery.unique( ret ) : ret;\n\n\t\treturn this.pushStack( ret, \"closest\", selectors );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?\n\t\t\tall :\n\t\t\tjQuery.unique( all ) );\n\t},\n\n\tandSelf: function() {\n\t\treturn this.add( this.prevObject );\n\t}\n});\n\n// A painfully simple check to see if an element is disconnected\n// from a document (should be improved, where feasible).\nfunction isDisconnected( node ) {\n\treturn !node || !node.parentNode || node.parentNode.nodeType === 11;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn jQuery.nth( elem, 2, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn jQuery.nth( elem, 2, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( elem.parentNode.firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.makeArray( elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until ),\n\t\t\t// The variable 'args' was introduced in\n\t\t\t// https://github.com/jquery/jquery/commit/52a0238\n\t\t\t// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.\n\t\t\t// http://code.google.com/p/v8/issues/detail?id=1050\n\t\t\targs = slice.call(arguments);\n\n\t\tif ( !runtil.test( name ) ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;\n\n\t\tif ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {\n\t\t\tret = ret.reverse();\n\t\t}\n\n\t\treturn this.pushStack( ret, name, args.join(\",\") );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 ?\n\t\t\tjQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :\n\t\t\tjQuery.find.matches(expr, elems);\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tnth: function( cur, result, dir, elem ) {\n\t\tresult = result || 1;\n\t\tvar num = 0;\n\n\t\tfor ( ; cur; cur = cur[dir] ) {\n\t\t\tif ( cur.nodeType === 1 && ++num === result ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn cur;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, keep ) {\n\n\t// Can't pass null or undefined to indexOf in Firefox 4\n\t// Set to 0 to skip string check\n\tqualifier = qualifier || 0;\n\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\tvar retVal = !!qualifier.call( elem, i, elem );\n\t\t\treturn retVal === keep;\n\t\t});\n\n\t} else if ( qualifier.nodeType ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\treturn (elem === qualifier) === keep;\n\t\t});\n\n\t} else if ( typeof qualifier === \"string\" ) {\n\t\tvar filtered = jQuery.grep(elements, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t});\n\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter(qualifier, filtered, !keep);\n\t\t} else {\n\t\t\tqualifier = jQuery.filter( qualifier, filtered );\n\t\t}\n\t}\n\n\treturn jQuery.grep(elements, function( elem, i ) {\n\t\treturn (jQuery.inArray( elem, qualifier ) >= 0) === keep;\n\t});\n}\n\n\n\n\nvar rinlinejQuery = / jQuery\\d+=\"(?:\\d+|null)\"/g,\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnocache = /<(?:script|object|embed|option|style)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /\\/(java|ecma)script/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// IE can't serialize <link> and <script> tags normally\nif ( !jQuery.support.htmlSerialize ) {\n\twrapMap._default = [ 1, \"div<div>\", \"</div>\" ];\n}\n\njQuery.fn.extend({\n\ttext: function( text ) {\n\t\tif ( jQuery.isFunction(text) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tvar self = jQuery( this );\n\n\t\t\t\tself.text( text.call(this, i, self.text()) );\n\t\t\t});\n\t\t}\n\n\t\tif ( typeof text !== \"object\" && text !== undefined ) {\n\t\t\treturn this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );\n\t\t}\n\n\t\treturn jQuery.text( this );\n\t},\n\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery( this ).wrapAll( html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 ) {\n\t\t\t\tthis.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 ) {\n\t\t\t\tthis.insertBefore( elem, this.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\tif ( this[0] && this[0].parentNode ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t});\n\t\t} else if ( arguments.length ) {\n\t\t\tvar set = jQuery(arguments[0]);\n\t\t\tset.push.apply( set, this.toArray() );\n\t\t\treturn this.pushStack( set, \"before\", arguments );\n\t\t}\n\t},\n\n\tafter: function() {\n\t\tif ( this[0] && this[0].parentNode ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t});\n\t\t} else if ( arguments.length ) {\n\t\t\tvar set = this.pushStack( this, \"after\", arguments );\n\t\t\tset.push.apply( set, jQuery(arguments[0]).toArray() );\n\t\t\treturn set;\n\t\t}\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tfor ( var i = 0, elem; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( !selector || jQuery.filter( selector, [ elem ] ).length ) {\n\t\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t\t\tjQuery.cleanData( [ elem ] );\n\t\t\t\t}\n\n\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tfor ( var i = 0, elem; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\tif ( value === undefined ) {\n\t\t\treturn this[0] && this[0].nodeType === 1 ?\n\t\t\t\tthis[0].innerHTML.replace(rinlinejQuery, \"\") :\n\t\t\t\tnull;\n\n\t\t// See if we can take a shortcut and just use innerHTML\n\t\t} else if ( typeof value === \"string\" && !rnocache.test( value ) &&\n\t\t\t(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&\n\t\t\t!wrapMap[ (rtagName.exec( value ) || [\"\", \"\"])[1].toLowerCase() ] ) {\n\n\t\t\tvalue = value.replace(rxhtmlTag, \"<$1></$2>\");\n\n\t\t\ttry {\n\t\t\t\tfor ( var i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\tif ( this[i].nodeType === 1 ) {\n\t\t\t\t\t\tjQuery.cleanData( this[i].getElementsByTagName(\"*\") );\n\t\t\t\t\t\tthis[i].innerHTML = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t} catch(e) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\n\t\t} else if ( jQuery.isFunction( value ) ) {\n\t\t\tthis.each(function(i){\n\t\t\t\tvar self = jQuery( this );\n\n\t\t\t\tself.html( value.call(this, i, self.html()) );\n\t\t\t});\n\n\t\t} else {\n\t\t\tthis.empty().append( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\treplaceWith: function( value ) {\n\t\tif ( this[0] && this[0].parentNode ) {\n\t\t\t// Make sure that the elements are removed from the DOM before they are inserted\n\t\t\t// this can help fix replacing a parent with child elements\n\t\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\t\treturn this.each(function(i) {\n\t\t\t\t\tvar self = jQuery(this), old = self.html();\n\t\t\t\t\tself.replaceWith( value.call( this, i, old ) );\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( typeof value !== \"string\" ) {\n\t\t\t\tvalue = jQuery( value ).detach();\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\tvar next = this.nextSibling,\n\t\t\t\t\tparent = this.parentNode;\n\n\t\t\t\tjQuery( this ).remove();\n\n\t\t\t\tif ( next ) {\n\t\t\t\t\tjQuery(next).before( value );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(parent).append( value );\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\treturn this.length ?\n\t\t\t\tthis.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), \"replaceWith\", value ) :\n\t\t\t\tthis;\n\t\t}\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, table, callback ) {\n\t\tvar results, first, fragment, parent,\n\t\t\tvalue = args[0],\n\t\t\tscripts = [];\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === \"string\" && rchecked.test( value ) ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery(this).domManip( args, table, callback, true );\n\t\t\t});\n\t\t}\n\n\t\tif ( jQuery.isFunction(value) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tvar self = jQuery(this);\n\t\t\t\targs[0] = value.call(this, i, table ? self.html() : undefined);\n\t\t\t\tself.domManip( args, table, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\tparent = value && value.parentNode;\n\n\t\t\t// If we're in a fragment, just use that instead of building a new one\n\t\t\tif ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {\n\t\t\t\tresults = { fragment: parent };\n\n\t\t\t} else {\n\t\t\t\tresults = jQuery.buildFragment( args, this, scripts );\n\t\t\t}\n\n\t\t\tfragment = results.fragment;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfirst = fragment = fragment.firstChild;\n\t\t\t} else {\n\t\t\t\tfirst = fragment.firstChild;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\ttable = table && jQuery.nodeName( first, \"tr\" );\n\n\t\t\t\tfor ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {\n\t\t\t\t\tcallback.call(\n\t\t\t\t\t\ttable ?\n\t\t\t\t\t\t\troot(this[i], first) :\n\t\t\t\t\t\t\tthis[i],\n\t\t\t\t\t\t// Make sure that we do not leak memory by inadvertently discarding\n\t\t\t\t\t\t// the original fragment (which might have attached data) instead of\n\t\t\t\t\t\t// using it; in addition, use the original fragment object for the last\n\t\t\t\t\t\t// item instead of first because it can end up being emptied incorrectly\n\t\t\t\t\t\t// in certain situations (Bug #8070).\n\t\t\t\t\t\t// Fragments from the fragment cache must always be cloned and never used\n\t\t\t\t\t\t// in place.\n\t\t\t\t\t\tresults.cacheable || (l > 1 && i < lastIndex) ?\n\t\t\t\t\t\t\tjQuery.clone( fragment, true, true ) :\n\t\t\t\t\t\t\tfragment\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( scripts.length ) {\n\t\t\t\tjQuery.each( scripts, evalScript );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\nfunction root( elem, cur ) {\n\treturn jQuery.nodeName(elem, \"table\") ?\n\t\t(elem.getElementsByTagName(\"tbody\")[0] ||\n\t\telem.appendChild(elem.ownerDocument.createElement(\"tbody\"))) :\n\t\telem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar internalKey = jQuery.expando,\n\t\toldData = jQuery.data( src ),\n\t\tcurData = jQuery.data( dest, oldData );\n\n\t// Switch to use the internal data object, if it exists, for the next\n\t// stage of data copying\n\tif ( (oldData = oldData[ internalKey ]) ) {\n\t\tvar events = oldData.events;\n\t\t\t\tcurData = curData[ internalKey ] = jQuery.extend({}, oldData);\n\n\t\tif ( events ) {\n\t\t\tdelete curData.handle;\n\t\t\tcurData.events = {};\n\n\t\t\tfor ( var type in events ) {\n\t\t\t\tfor ( var i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? \".\" : \"\" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction cloneFixAttributes( src, dest ) {\n\tvar nodeName;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// clearAttributes removes the attributes, which we don't want,\n\t// but also removes the attachEvent events, which we *do* want\n\tif ( dest.clearAttributes ) {\n\t\tdest.clearAttributes();\n\t}\n\n\t// mergeAttributes, in contrast, only merges back on the\n\t// original attributes, not the events\n\tif ( dest.mergeAttributes ) {\n\t\tdest.mergeAttributes( src );\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 fail to clone children inside object elements that use\n\t// the proprietary classid attribute value (rather than the type\n\t// attribute) to identify the type of content to display\n\tif ( nodeName === \"object\" ) {\n\t\tdest.outerHTML = src.outerHTML;\n\n\t} else if ( nodeName === \"input\" && (src.type === \"checkbox\" || src.type === \"radio\") ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\t\tif ( src.checked ) {\n\t\t\tdest.defaultChecked = dest.checked = src.checked;\n\t\t}\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n\n\t// Event data gets referenced instead of copied if the expando\n\t// gets copied too\n\tdest.removeAttribute( jQuery.expando );\n}\n\njQuery.buildFragment = function( args, nodes, scripts ) {\n\tvar fragment, cacheable, cacheresults, doc;\n\n  // nodes may contain either an explicit document object,\n  // a jQuery collection or context object.\n  // If nodes[0] contains a valid object to assign to doc\n  if ( nodes && nodes[0] ) {\n    doc = nodes[0].ownerDocument || nodes[0];\n  }\n\n  // Ensure that an attr object doesn't incorrectly stand in as a document object\n\t// Chrome and Firefox seem to allow this to occur and will throw exception\n\t// Fixes #8950\n\tif ( !doc.createDocumentFragment ) {\n\t\tdoc = document;\n\t}\n\n\t// Only cache \"small\" (1/2 KB) HTML strings that are associated with the main document\n\t// Cloning options loses the selected state, so don't cache them\n\t// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment\n\t// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache\n\tif ( args.length === 1 && typeof args[0] === \"string\" && args[0].length < 512 && doc === document &&\n\t\targs[0].charAt(0) === \"<\" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {\n\n\t\tcacheable = true;\n\n\t\tcacheresults = jQuery.fragments[ args[0] ];\n\t\tif ( cacheresults && cacheresults !== 1 ) {\n\t\t\tfragment = cacheresults;\n\t\t}\n\t}\n\n\tif ( !fragment ) {\n\t\tfragment = doc.createDocumentFragment();\n\t\tjQuery.clean( args, doc, fragment, scripts );\n\t}\n\n\tif ( cacheable ) {\n\t\tjQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;\n\t}\n\n\treturn { fragment: fragment, cacheable: cacheable };\n};\n\njQuery.fragments = {};\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar ret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tparent = this.length === 1 && this[0].parentNode;\n\n\t\tif ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {\n\t\t\tinsert[ original ]( this[0] );\n\t\t\treturn this;\n\n\t\t} else {\n\t\t\tfor ( var i = 0, l = insert.length; i < l; i++ ) {\n\t\t\t\tvar elems = (i > 0 ? this.clone(true) : this).get();\n\t\t\t\tjQuery( insert[i] )[ original ]( elems );\n\t\t\t\tret = ret.concat( elems );\n\t\t\t}\n\n\t\t\treturn this.pushStack( ret, name, insert.selector );\n\t\t}\n\t};\n});\n\nfunction getAll( elem ) {\n\tif ( \"getElementsByTagName\" in elem ) {\n\t\treturn elem.getElementsByTagName( \"*\" );\n\n\t} else if ( \"querySelectorAll\" in elem ) {\n\t\treturn elem.querySelectorAll( \"*\" );\n\n\t} else {\n\t\treturn [];\n\t}\n}\n\n// Used in clean, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( elem.type === \"checkbox\" || elem.type === \"radio\" ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n// Finds all inputs and passes them to fixDefaultChecked\nfunction findInputs( elem ) {\n\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\tfixDefaultChecked( elem );\n\t} else if ( \"getElementsByTagName\" in elem ) {\n\t\tjQuery.grep( elem.getElementsByTagName(\"input\"), fixDefaultChecked );\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar clone = elem.cloneNode(true),\n\t\t\t\tsrcElements,\n\t\t\t\tdestElements,\n\t\t\t\ti;\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\t\t\t// IE copies events bound via attachEvent when using cloneNode.\n\t\t\t// Calling detachEvent on the clone will also remove the events\n\t\t\t// from the original. In order to get around this, we use some\n\t\t\t// proprietary methods to clear the events. Thanks to MooTools\n\t\t\t// guys for this hotness.\n\n\t\t\tcloneFixAttributes( elem, clone );\n\n\t\t\t// Using Sizzle here is crazy slow, so we use getElementsByTagName\n\t\t\t// instead\n\t\t\tsrcElements = getAll( elem );\n\t\t\tdestElements = getAll( clone );\n\n\t\t\t// Weird iteration because IE will replace the length property\n\t\t\t// with an element if you are cloning the body and one of the\n\t\t\t// elements on the page has a name or id of \"length\"\n\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tcloneFixAttributes( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tcloneCopyEvent( elem, clone );\n\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = getAll( elem );\n\t\t\t\tdestElements = getAll( clone );\n\n\t\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsrcElements = destElements = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tclean: function( elems, context, fragment, scripts ) {\n\t\tvar checkScriptType;\n\n\t\tcontext = context || document;\n\n\t\t// !context.createElement fails in IE with an error but returns typeof 'object'\n\t\tif ( typeof context.createElement === \"undefined\" ) {\n\t\t\tcontext = context.ownerDocument || context[0] && context[0].ownerDocument || document;\n\t\t}\n\n\t\tvar ret = [], j;\n\n\t\tfor ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( typeof elem === \"number\" ) {\n\t\t\t\telem += \"\";\n\t\t\t}\n\n\t\t\tif ( !elem ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Convert html string into DOM nodes\n\t\t\tif ( typeof elem === \"string\" ) {\n\t\t\t\tif ( !rhtml.test( elem ) ) {\n\t\t\t\t\telem = context.createTextNode( elem );\n\t\t\t\t} else {\n\t\t\t\t\t// Fix \"XHTML\"-style tags in all browsers\n\t\t\t\t\telem = elem.replace(rxhtmlTag, \"<$1></$2>\");\n\n\t\t\t\t\t// Trim whitespace, otherwise indexOf won't work as expected\n\t\t\t\t\tvar tag = (rtagName.exec( elem ) || [\"\", \"\"])[1].toLowerCase(),\n\t\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default,\n\t\t\t\t\t\tdepth = wrap[0],\n\t\t\t\t\t\tdiv = context.createElement(\"div\");\n\n\t\t\t\t\t// Go to html and back, then peel off extra wrappers\n\t\t\t\t\tdiv.innerHTML = wrap[1] + elem + wrap[2];\n\n\t\t\t\t\t// Move to the right depth\n\t\t\t\t\twhile ( depth-- ) {\n\t\t\t\t\t\tdiv = div.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\tvar hasBody = rtbody.test(elem),\n\t\t\t\t\t\t\ttbody = tag === \"table\" && !hasBody ?\n\t\t\t\t\t\t\t\tdiv.firstChild && div.firstChild.childNodes :\n\n\t\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\t\twrap[1] === \"<table>\" && !hasBody ?\n\t\t\t\t\t\t\t\t\tdiv.childNodes :\n\t\t\t\t\t\t\t\t\t[];\n\n\t\t\t\t\t\tfor ( j = tbody.length - 1; j >= 0 ; --j ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( tbody[ j ], \"tbody\" ) && !tbody[ j ].childNodes.length ) {\n\t\t\t\t\t\t\t\ttbody[ j ].parentNode.removeChild( tbody[ j ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// IE completely kills leading whitespace when innerHTML is used\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tdiv.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\telem = div.childNodes;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Resets defaultChecked for any radios and checkboxes\n\t\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\t\tvar len;\n\t\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\t\tif ( elem[0] && typeof (len = elem.length) === \"number\" ) {\n\t\t\t\t\tfor ( j = 0; j < len; j++ ) {\n\t\t\t\t\t\tfindInputs( elem[j] );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfindInputs( elem );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( elem.nodeType ) {\n\t\t\t\tret.push( elem );\n\t\t\t} else {\n\t\t\t\tret = jQuery.merge( ret, elem );\n\t\t\t}\n\t\t}\n\n\t\tif ( fragment ) {\n\t\t\tcheckScriptType = function( elem ) {\n\t\t\t\treturn !elem.type || rscriptType.test( elem.type );\n\t\t\t};\n\t\t\tfor ( i = 0; ret[i]; i++ ) {\n\t\t\t\tif ( scripts && jQuery.nodeName( ret[i], \"script\" ) && (!ret[i].type || ret[i].type.toLowerCase() === \"text/javascript\") ) {\n\t\t\t\t\tscripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );\n\n\t\t\t\t} else {\n\t\t\t\t\tif ( ret[i].nodeType === 1 ) {\n\t\t\t\t\t\tvar jsTags = jQuery.grep( ret[i].getElementsByTagName( \"script\" ), checkScriptType );\n\n\t\t\t\t\t\tret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );\n\t\t\t\t\t}\n\t\t\t\t\tfragment.appendChild( ret[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando;\n\n\t\tfor ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tid = elem[ jQuery.expando ];\n\n\t\t\tif ( id ) {\n\t\t\t\tdata = cache[ id ] && cache[ id ][ internalKey ];\n\n\t\t\t\tif ( data && data.events ) {\n\t\t\t\t\tfor ( var type in data.events ) {\n\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Null the DOM reference to avoid IE6/7/8 leak (#7054)\n\t\t\t\t\tif ( data.handle ) {\n\t\t\t\t\t\tdata.handle.elem = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\tdelete elem[ jQuery.expando ];\n\n\t\t\t\t} else if ( elem.removeAttribute ) {\n\t\t\t\t\telem.removeAttribute( jQuery.expando );\n\t\t\t\t}\n\n\t\t\t\tdelete cache[ id ];\n\t\t\t}\n\t\t}\n\t}\n});\n\nfunction evalScript( i, elem ) {\n\tif ( elem.src ) {\n\t\tjQuery.ajax({\n\t\t\turl: elem.src,\n\t\t\tasync: false,\n\t\t\tdataType: \"script\"\n\t\t});\n\t} else {\n\t\tjQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || \"\" ).replace( rcleanScript, \"/*$0*/\" ) );\n\t}\n\n\tif ( elem.parentNode ) {\n\t\telem.parentNode.removeChild( elem );\n\t}\n}\n\n\n\n\nvar ralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity=([^)]*)/,\n\t// fixed for IE9, see #8346\n\trupper = /([A-Z]|^ms)/g,\n\trnumpx = /^-?\\d+(?:px)?$/i,\n\trnum = /^-?\\d/,\n\trrelNum = /^([\\-+])=([\\-+.\\de]+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssWidth = [ \"Left\", \"Right\" ],\n\tcssHeight = [ \"Top\", \"Bottom\" ],\n\tcurCSS,\n\n\tgetComputedStyle,\n\tcurrentStyle;\n\njQuery.fn.css = function( name, value ) {\n\t// Setting 'undefined' is a no-op\n\tif ( arguments.length === 2 && value === undefined ) {\n\t\treturn this;\n\t}\n\n\treturn jQuery.access( this, name, value, true, function( elem, name, value ) {\n\t\treturn value !== undefined ?\n\t\t\tjQuery.style( elem, name, value ) :\n\t\t\tjQuery.css( elem, name );\n\t});\n};\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\", \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\n\t\t\t\t} else {\n\t\t\t\t\treturn elem.style.opacity;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Exclude the following css properties to add px\n\tcssNumber: {\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, origName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style, hooks = jQuery.cssHooks[ origName ];\n\n\t\tname = jQuery.cssProps[ origName ] || origName;\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra ) {\n\t\tvar ret, hooks;\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.camelCase( name );\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tname = jQuery.cssProps[ name ] || name;\n\n\t\t// cssFloat needs a special treatment\n\t\tif ( name === \"cssFloat\" ) {\n\t\t\tname = \"float\";\n\t\t}\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {\n\t\t\treturn ret;\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t} else if ( curCSS ) {\n\t\t\treturn curCSS( elem, name );\n\t\t}\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations\n\tswap: function( elem, options, callback ) {\n\t\tvar old = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( var name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tcallback.call( elem );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\t}\n});\n\n// DEPRECATED, Use jQuery.css() instead\njQuery.curCSS = jQuery.css;\n\njQuery.each([\"height\", \"width\"], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tvar val;\n\n\t\t\tif ( computed ) {\n\t\t\t\tif ( elem.offsetWidth !== 0 ) {\n\t\t\t\t\treturn getWH( elem, name, extra );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\tval = getWH( elem, name, extra );\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn val;\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tif ( rnumpx.test( value ) ) {\n\t\t\t\t// ignore negative width and height values #1599\n\t\t\t\tvalue = parseFloat( value );\n\n\t\t\t\tif ( value >= 0 ) {\n\t\t\t\t\treturn value + \"px\";\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( parseFloat( RegExp.$1 ) / 100 ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNaN( value ) ? \"\" : \"alpha(opacity=\" + value * 100 + \")\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\tif ( value >= 1 && jQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there there is no filter style applied in a css rule, we are done\n\t\t\t\tif ( currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\njQuery(function() {\n\t// This hook cannot be added until DOM ready because the support test\n\t// for it is not run until after DOM ready\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\tvar ret;\n\t\t\t\tjQuery.swap( elem, { \"display\": \"inline-block\" }, function() {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tret = curCSS( elem, \"margin-right\", \"marginRight\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret = elem.style.marginRight;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t}\n});\n\nif ( document.defaultView && document.defaultView.getComputedStyle ) {\n\tgetComputedStyle = function( elem, name ) {\n\t\tvar ret, defaultView, computedStyle;\n\n\t\tname = name.replace( rupper, \"-$1\" ).toLowerCase();\n\n\t\tif ( !(defaultView = elem.ownerDocument.defaultView) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {\n\t\t\tret = computedStyle.getPropertyValue( name );\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n}\n\nif ( document.documentElement.currentStyle ) {\n\tcurrentStyle = function( elem, name ) {\n\t\tvar left,\n\t\t\tret = elem.currentStyle && elem.currentStyle[ name ],\n\t\t\trsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],\n\t\t\tstyle = elem.style;\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\tif ( !rnumpx.test( ret ) && rnum.test( ret ) ) {\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : (ret || 0);\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\ncurCSS = getComputedStyle || currentStyle;\n\nfunction getWH( elem, name, extra ) {\n\n\t// Start with offset property\n\tvar val = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\twhich = name === \"width\" ? cssWidth : cssHeight;\n\n\tif ( val > 0 ) {\n\t\tif ( extra !== \"border\" ) {\n\t\t\tjQuery.each( which, function() {\n\t\t\t\tif ( !extra ) {\n\t\t\t\t\tval -= parseFloat( jQuery.css( elem, \"padding\" + this ) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( extra === \"margin\" ) {\n\t\t\t\t\tval += parseFloat( jQuery.css( elem, extra + this ) ) || 0;\n\t\t\t\t} else {\n\t\t\t\t\tval -= parseFloat( jQuery.css( elem, \"border\" + this + \"Width\" ) ) || 0;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn val + \"px\";\n\t}\n\n\t// Fall back to computed then uncomputed css if necessary\n\tval = curCSS( elem, name, name );\n\tif ( val < 0 || val == null ) {\n\t\tval = elem.style[ name ] || 0;\n\t}\n\t// Normalize \"\", auto, and prepare for extra\n\tval = parseFloat( val ) || 0;\n\n\t// Add padding, border, margin\n\tif ( extra ) {\n\t\tjQuery.each( which, function() {\n\t\t\tval += parseFloat( jQuery.css( elem, \"padding\" + this ) ) || 0;\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += parseFloat( jQuery.css( elem, \"border\" + this + \"Width\" ) ) || 0;\n\t\t\t}\n\t\t\tif ( extra === \"margin\" ) {\n\t\t\t\tval += parseFloat( jQuery.css( elem, extra + this ) ) || 0;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn val + \"px\";\n}\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\tvar width = elem.offsetWidth,\n\t\t\theight = elem.offsetHeight;\n\n\t\treturn (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trhash = /#.*$/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\trinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trquery = /\\?/,\n\trscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n\trselectTextarea = /^(?:select|textarea)/i,\n\trspacesAjax = /\\s+/,\n\trts = /([?&])_=[^&]*/,\n\trurl = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Document location\n\tajaxLocation,\n\n\t// Document location segments\n\tajaxLocParts,\n\t\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = [\"*/\"] + [\"*\"];\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\tvar dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),\n\t\t\t\ti = 0,\n\t\t\t\tlength = dataTypes.length,\n\t\t\t\tdataType,\n\t\t\t\tlist,\n\t\t\t\tplaceBefore;\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\tfor(; i < length; i++ ) {\n\t\t\t\tdataType = dataTypes[ i ];\n\t\t\t\t// We control if we're asked to add before\n\t\t\t\t// any existing element\n\t\t\t\tplaceBefore = /^\\+/.test( dataType );\n\t\t\t\tif ( placeBefore ) {\n\t\t\t\t\tdataType = dataType.substr( 1 ) || \"*\";\n\t\t\t\t}\n\t\t\t\tlist = structure[ dataType ] = structure[ dataType ] || [];\n\t\t\t\t// then we add to the structure accordingly\n\t\t\t\tlist[ placeBefore ? \"unshift\" : \"push\" ]( func );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,\n\t\tdataType /* internal */, inspected /* internal */ ) {\n\n\tdataType = dataType || options.dataTypes[ 0 ];\n\tinspected = inspected || {};\n\n\tinspected[ dataType ] = true;\n\n\tvar list = structure[ dataType ],\n\t\ti = 0,\n\t\tlength = list ? list.length : 0,\n\t\texecuteOnly = ( structure === prefilters ),\n\t\tselection;\n\n\tfor(; i < length && ( executeOnly || !selection ); i++ ) {\n\t\tselection = list[ i ]( options, originalOptions, jqXHR );\n\t\t// If we got redirected to another dataType\n\t\t// we try there if executing only and not done already\n\t\tif ( typeof selection === \"string\" ) {\n\t\t\tif ( !executeOnly || inspected[ selection ] ) {\n\t\t\t\tselection = undefined;\n\t\t\t} else {\n\t\t\t\toptions.dataTypes.unshift( selection );\n\t\t\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\t\t\tstructure, options, originalOptions, jqXHR, selection, inspected );\n\t\t\t}\n\t\t}\n\t}\n\t// If we're only executing or nothing was selected\n\t// we try the catchall dataType if not done already\n\tif ( ( executeOnly || !selection ) && !inspected[ \"*\" ] ) {\n\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\tstructure, options, originalOptions, jqXHR, \"*\", inspected );\n\t}\n\t// unnecessary when only executing (prefilters)\n\t// but it'll be ignored by the caller in that case\n\treturn selection;\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\tfor( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n}\n\njQuery.fn.extend({\n\tload: function( url, params, callback ) {\n\t\tif ( typeof url !== \"string\" && _load ) {\n\t\t\treturn _load.apply( this, arguments );\n\n\t\t// Don't do a request if no elements are being requested\n\t\t} else if ( !this.length ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar off = url.indexOf( \" \" );\n\t\tif ( off >= 0 ) {\n\t\t\tvar selector = url.slice( off, url.length );\n\t\t\turl = url.slice( 0, off );\n\t\t}\n\n\t\t// Default to a GET request\n\t\tvar type = \"GET\";\n\n\t\t// If the second parameter was provided\n\t\tif ( params ) {\n\t\t\t// If it's a function\n\t\t\tif ( jQuery.isFunction( params ) ) {\n\t\t\t\t// We assume that it's the callback\n\t\t\t\tcallback = params;\n\t\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t\t} else if ( typeof params === \"object\" ) {\n\t\t\t\tparams = jQuery.param( params, jQuery.ajaxSettings.traditional );\n\t\t\t\ttype = \"POST\";\n\t\t\t}\n\t\t}\n\n\t\tvar self = this;\n\n\t\t// Request the remote document\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params,\n\t\t\t// Complete callback (responseText is used internally)\n\t\t\tcomplete: function( jqXHR, status, responseText ) {\n\t\t\t\t// Store the response as specified by the jqXHR object\n\t\t\t\tresponseText = jqXHR.responseText;\n\t\t\t\t// If successful, inject the HTML into all the matched elements\n\t\t\t\tif ( jqXHR.isResolved() ) {\n\t\t\t\t\t// #4825: Get the actual response in case\n\t\t\t\t\t// a dataFilter is present in ajaxSettings\n\t\t\t\t\tjqXHR.done(function( r ) {\n\t\t\t\t\t\tresponseText = r;\n\t\t\t\t\t});\n\t\t\t\t\t// See if a selector was specified\n\t\t\t\t\tself.html( selector ?\n\t\t\t\t\t\t// Create a dummy div to hold the results\n\t\t\t\t\t\tjQuery(\"<div>\")\n\t\t\t\t\t\t\t// inject the contents of the document in, removing the scripts\n\t\t\t\t\t\t\t// to avoid any 'Permission Denied' errors in IE\n\t\t\t\t\t\t\t.append(responseText.replace(rscript, \"\"))\n\n\t\t\t\t\t\t\t// Locate the specified elements\n\t\t\t\t\t\t\t.find(selector) :\n\n\t\t\t\t\t\t// If not, just inject the full result\n\t\t\t\t\t\tresponseText );\n\t\t\t\t}\n\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tself.each( callback, [ responseText, status, jqXHR ] );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t},\n\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\treturn this.elements ? jQuery.makeArray( this.elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\treturn this.name && !this.disabled &&\n\t\t\t\t( this.checked || rselectTextarea.test( this.nodeName ) ||\n\t\t\t\t\trinput.test( this.type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val, i ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( \"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split( \" \" ), function( i, o ){\n\tjQuery.fn[ o ] = function( f ){\n\t\treturn this.bind( o, f );\n\t};\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\ttype: method,\n\t\t\turl: url,\n\t\t\tdata: data,\n\t\t\tsuccess: callback,\n\t\t\tdataType: type\n\t\t});\n\t};\n});\n\njQuery.extend({\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\tif ( settings ) {\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( target, jQuery.ajaxSettings );\n\t\t} else {\n\t\t\t// Extending ajaxSettings\n\t\t\tsettings = target;\n\t\t\ttarget = jQuery.ajaxSettings;\n\t\t}\n\t\tajaxExtend( target, settings );\n\t\treturn target;\n\t},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\ttype: \"GET\",\n\t\tcontentType: \"application/x-www-form-urlencoded\",\n\t\tprocessData: true,\n\t\tasync: true,\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\thtml: \"text/html\",\n\t\t\ttext: \"text/plain\",\n\t\t\tjson: \"application/json, text/javascript\",\n\t\t\t\"*\": allTypes\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\"\n\t\t},\n\n\t\t// List of data converters\n\t\t// 1) key format is \"source_type destination_type\" (a single space in-between)\n\t\t// 2) the catchall symbol \"*\" can be used for source_type\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": window.String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\tcontext: true,\n\t\t\turl: true\n\t\t}\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events\n\t\t\t// It's the callbackContext if one was provided in the options\n\t\t\t// and if it's a DOM node or a jQuery collection\n\t\t\tglobalEventContext = callbackContext !== s &&\n\t\t\t\t( callbackContext.nodeType || callbackContext instanceof jQuery ) ?\n\t\t\t\t\t\tjQuery( callbackContext ) : jQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery._Deferred(),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// ifModified key\n\t\t\tifModifiedKey,\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// transport\n\t\t\ttransport,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match === undefined ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tstatusText = statusText || \"abort\";\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( statusText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, statusText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Callback for when everything is done\n\t\t// It is defined here because jslint complains if it is declared\n\t\t// at the end of the function (which would be more logical and readable)\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\tvar isSuccess,\n\t\t\t\tsuccess,\n\t\t\t\terror,\n\t\t\t\tstatusText = nativeStatusText,\n\t\t\t\tresponse = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,\n\t\t\t\tlastModified,\n\t\t\t\tetag;\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( status >= 200 && status < 300 || status === 304 ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\n\t\t\t\t\tif ( ( lastModified = jqXHR.getResponseHeader( \"Last-Modified\" ) ) ) {\n\t\t\t\t\t\tjQuery.lastModified[ ifModifiedKey ] = lastModified;\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( etag = jqXHR.getResponseHeader( \"Etag\" ) ) ) {\n\t\t\t\t\t\tjQuery.etag[ ifModifiedKey ] = etag;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If not modified\n\t\t\t\tif ( status === 304 ) {\n\n\t\t\t\t\tstatusText = \"notmodified\";\n\t\t\t\t\tisSuccess = true;\n\n\t\t\t\t// If we have data\n\t\t\t\t} else {\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tsuccess = ajaxConvert( s, response );\n\t\t\t\t\t\tstatusText = \"success\";\n\t\t\t\t\t\tisSuccess = true;\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t// We have a parsererror\n\t\t\t\t\t\tstatusText = \"parsererror\";\n\t\t\t\t\t\terror = e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif( !statusText || status ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = \"\" + ( nativeStatusText || statusText );\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajax\" + ( isSuccess ? \"Success\" : \"Error\" ),\n\t\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\t\tjqXHR.complete = completeDeferred.done;\n\n\t\t// Status-dependent callbacks\n\t\tjqXHR.statusCode = function( map ) {\n\t\t\tif ( map ) {\n\t\t\t\tvar tmp;\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tfor( tmp in map ) {\n\t\t\t\t\t\tstatusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttmp = map[ jqXHR.status ];\n\t\t\t\t\tjqXHR.then( tmp, tmp );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().split( rspacesAjax );\n\n\t\t// Determine if a cross-domain request is in order\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? 80 : 443 ) ) !=\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? 80 : 443 ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefiler, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.data;\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Get ifModifiedKey before adding the anti-cache parameter\n\t\t\tifModifiedKey = s.url;\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\n\t\t\t\tvar ts = jQuery.now(),\n\t\t\t\t\t// try replacing _= if it is there\n\t\t\t\t\tret = s.url.replace( rts, \"$1_=\" + ts );\n\n\t\t\t\t// if nothing was replaced, add timestamp to the end\n\t\t\t\ts.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? \"&\" : \"?\" ) + \"_=\" + ts : \"\" );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tifModifiedKey = ifModifiedKey || s.url;\n\t\t\tif ( jQuery.lastModified[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ ifModifiedKey ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ ifModifiedKey ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t\t// Abort if not done already\n\t\t\t\tjqXHR.abort();\n\t\t\t\treturn false;\n\n\t\t}\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout( function(){\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch (e) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.error( e );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tparam: function( a, traditional ) {\n\t\tvar s = [],\n\t\t\tadd = function( key, value ) {\n\t\t\t\t// If value is a function, invoke it and return its value\n\t\t\t\tvalue = jQuery.isFunction( value ) ? value() : value;\n\t\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t\t};\n\n\t\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\t\tif ( traditional === undefined ) {\n\t\t\ttraditional = jQuery.ajaxSettings.traditional;\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each( a, function() {\n\t\t\t\tadd( this.name, this.value );\n\t\t\t});\n\n\t\t} else {\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor ( var prefix in a ) {\n\t\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join( \"&\" ).replace( r20, \"+\" );\n\t}\n});\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// If array item is non-scalar (array or object), encode its\n\t\t\t\t// numeric index to resolve deserialization ambiguity issues.\n\t\t\t\t// Note that rack (as of 1.0.0) can't currently deserialize\n\t\t\t\t// nested arrays properly, and attempting to do so may cause\n\t\t\t\t// a server error. Possible fixes are to modify rack's\n\t\t\t\t// deserialization algorithm or to provide an option or flag\n\t\t\t\t// to force array serialization to be shallow.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" || jQuery.isArray(v) ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && obj != null && typeof obj === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( var name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// This is still on the jQuery object... for now\n// Want to move this to jQuery.ajax some day\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {}\n\n});\n\n/* Handles responses to an ajax request:\n * - sets all responseXXX fields accordingly\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar contents = s.contents,\n\t\tdataTypes = s.dataTypes,\n\t\tresponseFields = s.responseFields,\n\t\tct,\n\t\ttype,\n\t\tfinalDataType,\n\t\tfirstDataType;\n\n\t// Fill responseXXX fields\n\tfor( type in responseFields ) {\n\t\tif ( type in responses ) {\n\t\t\tjqXHR[ responseFields[type] ] = responses[ type ];\n\t\t}\n\t}\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"content-type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n// Chain conversions given the request and the original response\nfunction ajaxConvert( s, response ) {\n\n\t// Apply the dataFilter if provided\n\tif ( s.dataFilter ) {\n\t\tresponse = s.dataFilter( response, s.dataType );\n\t}\n\n\tvar dataTypes = s.dataTypes,\n\t\tconverters = {},\n\t\ti,\n\t\tkey,\n\t\tlength = dataTypes.length,\n\t\ttmp,\n\t\t// Current and previous dataTypes\n\t\tcurrent = dataTypes[ 0 ],\n\t\tprev,\n\t\t// Conversion expression\n\t\tconversion,\n\t\t// Conversion function\n\t\tconv,\n\t\t// Conversion functions (transitive conversion)\n\t\tconv1,\n\t\tconv2;\n\n\t// For each dataType in the chain\n\tfor( i = 1; i < length; i++ ) {\n\n\t\t// Create converters map\n\t\t// with lowercased keys\n\t\tif ( i === 1 ) {\n\t\t\tfor( key in s.converters ) {\n\t\t\t\tif( typeof key === \"string\" ) {\n\t\t\t\t\tconverters[ key.toLowerCase() ] = s.converters[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Get the dataTypes\n\t\tprev = current;\n\t\tcurrent = dataTypes[ i ];\n\n\t\t// If current is auto dataType, update it to prev\n\t\tif( current === \"*\" ) {\n\t\t\tcurrent = prev;\n\t\t// If no auto and dataTypes are actually different\n\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t// Get the converter\n\t\t\tconversion = prev + \" \" + current;\n\t\t\tconv = converters[ conversion ] || converters[ \"* \" + current ];\n\n\t\t\t// If there is no direct converter, search transitively\n\t\t\tif ( !conv ) {\n\t\t\t\tconv2 = undefined;\n\t\t\t\tfor( conv1 in converters ) {\n\t\t\t\t\ttmp = conv1.split( \" \" );\n\t\t\t\t\tif ( tmp[ 0 ] === prev || tmp[ 0 ] === \"*\" ) {\n\t\t\t\t\t\tconv2 = converters[ tmp[1] + \" \" + current ];\n\t\t\t\t\t\tif ( conv2 ) {\n\t\t\t\t\t\t\tconv1 = converters[ conv1 ];\n\t\t\t\t\t\t\tif ( conv1 === true ) {\n\t\t\t\t\t\t\t\tconv = conv2;\n\t\t\t\t\t\t\t} else if ( conv2 === true ) {\n\t\t\t\t\t\t\t\tconv = conv1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\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\t// If we found no converter, dispatch an error\n\t\t\tif ( !( conv || conv2 ) ) {\n\t\t\t\tjQuery.error( \"No conversion from \" + conversion.replace(\" \",\" to \") );\n\t\t\t}\n\t\t\t// If found converter is not an equivalence\n\t\t\tif ( conv !== true ) {\n\t\t\t\t// Convert with 1 or 2 converters accordingly\n\t\t\t\tresponse = conv ? conv( response ) : conv2( conv1(response) );\n\t\t\t}\n\t\t}\n\t}\n\treturn response;\n}\n\n\n\n\nvar jsc = jQuery.now(),\n\tjsre = /(\\=)\\?(&|$)|\\?\\?/i;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\treturn jQuery.expando + \"_\" + ( jsc++ );\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar inspectData = s.contentType === \"application/x-www-form-urlencoded\" &&\n\t\t( typeof s.data === \"string\" );\n\n\tif ( s.dataTypes[ 0 ] === \"jsonp\" ||\n\t\ts.jsonp !== false && ( jsre.test( s.url ) ||\n\t\t\t\tinspectData && jsre.test( s.data ) ) ) {\n\n\t\tvar responseContainer,\n\t\t\tjsonpCallback = s.jsonpCallback =\n\t\t\t\tjQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,\n\t\t\tprevious = window[ jsonpCallback ],\n\t\t\turl = s.url,\n\t\t\tdata = s.data,\n\t\t\treplace = \"$1\" + jsonpCallback + \"$2\";\n\n\t\tif ( s.jsonp !== false ) {\n\t\t\turl = url.replace( jsre, replace );\n\t\t\tif ( s.url === url ) {\n\t\t\t\tif ( inspectData ) {\n\t\t\t\t\tdata = data.replace( jsre, replace );\n\t\t\t\t}\n\t\t\t\tif ( s.data === data ) {\n\t\t\t\t\t// Add callback manually\n\t\t\t\t\turl += (/\\?/.test( url ) ? \"&\" : \"?\") + s.jsonp + \"=\" + jsonpCallback;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ts.url = url;\n\t\ts.data = data;\n\n\t\t// Install callback\n\t\twindow[ jsonpCallback ] = function( response ) {\n\t\t\tresponseContainer = [ response ];\n\t\t};\n\n\t\t// Clean-up function\n\t\tjqXHR.always(function() {\n\t\t\t// Set callback back to previous value\n\t\t\twindow[ jsonpCallback ] = previous;\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( previous ) ) {\n\t\t\t\twindow[ jsonpCallback ]( responseContainer[ 0 ] );\n\t\t\t}\n\t\t});\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( jsonpCallback + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /javascript|ecmascript/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || document.getElementsByTagName( \"head\" )[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement( \"script\" );\n\n\t\t\t\tscript.async = \"async\";\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( head && script.parentNode ) {\n\t\t\t\t\t\t\thead.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = undefined;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t// Use insertBefore instead of appendChild  to circumvent an IE6 bug.\n\t\t\t\t// This arises when a base node is used (#2709 and #4378).\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( 0, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar // #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject ? function() {\n\t\t// Abort all pending requests\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( 0, 1 );\n\t\t}\n\t} : false,\n\txhrId = 0,\n\txhrCallbacks;\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\n(function( xhr ) {\n\tjQuery.extend( jQuery.support, {\n\t\tajax: !!xhr,\n\t\tcors: !!xhr && ( \"withCredentials\" in xhr )\n\t});\n})( jQuery.ajaxSettings.xhr() );\n\n// Create transport if the browser can provide an xhr\nif ( jQuery.support.ajax ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar xhr = s.xhr(),\n\t\t\t\t\t\thandle,\n\t\t\t\t\t\ti;\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( _ ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\n\t\t\t\t\t\tvar status,\n\t\t\t\t\t\t\tstatusText,\n\t\t\t\t\t\t\tresponseHeaders,\n\t\t\t\t\t\t\tresponses,\n\t\t\t\t\t\t\txml;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occured\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\txml = xhr.responseXML;\n\n\t\t\t\t\t\t\t\t\t// Construct response list\n\t\t\t\t\t\t\t\t\tif ( xml && xml.documentElement /* #4958 */ ) {\n\t\t\t\t\t\t\t\t\t\tresponses.xml = xml;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\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}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// if we're in sync mode or it's in cache\n\t\t\t\t\t// and has been retrieved directly (IE6 & IE7)\n\t\t\t\t\t// we need to manually fire the callback\n\t\t\t\t\tif ( !s.async || xhr.readyState === 4 ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback(0,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\n\n\n\n\nvar elemdisplay = {},\n\tiframe, iframeDoc,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = /^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,\n\ttimerId,\n\tfxAttrs = [\n\t\t// height animations\n\t\t[ \"height\", \"marginTop\", \"marginBottom\", \"paddingTop\", \"paddingBottom\" ],\n\t\t// width animations\n\t\t[ \"width\", \"marginLeft\", \"marginRight\", \"paddingLeft\", \"paddingRight\" ],\n\t\t// opacity animations\n\t\t[ \"opacity\" ]\n\t],\n\tfxNow;\n\njQuery.fn.extend({\n\tshow: function( speed, easing, callback ) {\n\t\tvar elem, display;\n\n\t\tif ( speed || speed === 0 ) {\n\t\t\treturn this.animate( genFx(\"show\", 3), speed, easing, callback);\n\n\t\t} else {\n\t\t\tfor ( var i = 0, j = this.length; i < j; i++ ) {\n\t\t\t\telem = this[i];\n\n\t\t\t\tif ( elem.style ) {\n\t\t\t\t\tdisplay = elem.style.display;\n\n\t\t\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t\t\t// being hidden by cascaded rules or not\n\t\t\t\t\tif ( !jQuery._data(elem, \"olddisplay\") && display === \"none\" ) {\n\t\t\t\t\t\tdisplay = elem.style.display = \"\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set elements which have been overridden with display: none\n\t\t\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t\t\t// for such an element\n\t\t\t\t\tif ( display === \"\" && jQuery.css( elem, \"display\" ) === \"none\" ) {\n\t\t\t\t\t\tjQuery._data(elem, \"olddisplay\", defaultDisplay(elem.nodeName));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the display of most of the elements in a second loop\n\t\t\t// to avoid the constant reflow\n\t\t\tfor ( i = 0; i < j; i++ ) {\n\t\t\t\telem = this[i];\n\n\t\t\t\tif ( elem.style ) {\n\t\t\t\t\tdisplay = elem.style.display;\n\n\t\t\t\t\tif ( display === \"\" || display === \"none\" ) {\n\t\t\t\t\t\telem.style.display = jQuery._data(elem, \"olddisplay\") || \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t},\n\n\thide: function( speed, easing, callback ) {\n\t\tif ( speed || speed === 0 ) {\n\t\t\treturn this.animate( genFx(\"hide\", 3), speed, easing, callback);\n\n\t\t} else {\n\t\t\tfor ( var i = 0, j = this.length; i < j; i++ ) {\n\t\t\t\tif ( this[i].style ) {\n\t\t\t\t\tvar display = jQuery.css( this[i], \"display\" );\n\n\t\t\t\t\tif ( display !== \"none\" && !jQuery._data( this[i], \"olddisplay\" ) ) {\n\t\t\t\t\t\tjQuery._data( this[i], \"olddisplay\", display );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the display of the elements in a second loop\n\t\t\t// to avoid the constant reflow\n\t\t\tfor ( i = 0; i < j; i++ ) {\n\t\t\t\tif ( this[i].style ) {\n\t\t\t\t\tthis[i].style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t},\n\n\t// Save the old toggle function\n\t_toggle: jQuery.fn.toggle,\n\n\ttoggle: function( fn, fn2, callback ) {\n\t\tvar bool = typeof fn === \"boolean\";\n\n\t\tif ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {\n\t\t\tthis._toggle.apply( this, arguments );\n\n\t\t} else if ( fn == null || bool ) {\n\t\t\tthis.each(function() {\n\t\t\t\tvar state = bool ? fn : jQuery(this).is(\":hidden\");\n\t\t\t\tjQuery(this)[ state ? \"show\" : \"hide\" ]();\n\t\t\t});\n\n\t\t} else {\n\t\t\tthis.animate(genFx(\"toggle\", 3), fn, fn2, callback);\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tfadeTo: function( speed, to, easing, callback ) {\n\t\treturn this.filter(\":hidden\").css(\"opacity\", 0).show().end()\n\t\t\t\t\t.animate({opacity: to}, speed, easing, callback);\n\t},\n\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar optall = jQuery.speed(speed, easing, callback);\n\n\t\tif ( jQuery.isEmptyObject( prop ) ) {\n\t\t\treturn this.each( optall.complete, [ false ] );\n\t\t}\n\n\t\t// Do not change referenced properties as per-property easing will be lost\n\t\tprop = jQuery.extend( {}, prop );\n\n\t\treturn this[ optall.queue === false ? \"each\" : \"queue\" ](function() {\n\t\t\t// XXX 'this' does not always have a nodeName when running the\n\t\t\t// test suite\n\n\t\t\tif ( optall.queue === false ) {\n\t\t\t\tjQuery._mark( this );\n\t\t\t}\n\n\t\t\tvar opt = jQuery.extend( {}, optall ),\n\t\t\t\tisElement = this.nodeType === 1,\n\t\t\t\thidden = isElement && jQuery(this).is(\":hidden\"),\n\t\t\t\tname, val, p,\n\t\t\t\tdisplay, e,\n\t\t\t\tparts, start, end, unit;\n\n\t\t\t// will store per property easing and be used to determine when an animation is complete\n\t\t\topt.animatedProperties = {};\n\n\t\t\tfor ( p in prop ) {\n\n\t\t\t\t// property name normalization\n\t\t\t\tname = jQuery.camelCase( p );\n\t\t\t\tif ( p !== name ) {\n\t\t\t\t\tprop[ name ] = prop[ p ];\n\t\t\t\t\tdelete prop[ p ];\n\t\t\t\t}\n\n\t\t\t\tval = prop[ name ];\n\n\t\t\t\t// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)\n\t\t\t\tif ( jQuery.isArray( val ) ) {\n\t\t\t\t\topt.animatedProperties[ name ] = val[ 1 ];\n\t\t\t\t\tval = prop[ name ] = val[ 0 ];\n\t\t\t\t} else {\n\t\t\t\t\topt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';\n\t\t\t\t}\n\n\t\t\t\tif ( val === \"hide\" && hidden || val === \"show\" && !hidden ) {\n\t\t\t\t\treturn opt.complete.call( this );\n\t\t\t\t}\n\n\t\t\t\tif ( isElement && ( name === \"height\" || name === \"width\" ) ) {\n\t\t\t\t\t// Make sure that nothing sneaks out\n\t\t\t\t\t// Record all 3 overflow attributes because IE does not\n\t\t\t\t\t// change the overflow attribute when overflowX and\n\t\t\t\t\t// overflowY are set to the same value\n\t\t\t\t\topt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];\n\n\t\t\t\t\t// Set display property to inline-block for height/width\n\t\t\t\t\t// animations on inline elements that are having width/height\n\t\t\t\t\t// animated\n\t\t\t\t\tif ( jQuery.css( this, \"display\" ) === \"inline\" &&\n\t\t\t\t\t\t\tjQuery.css( this, \"float\" ) === \"none\" ) {\n\t\t\t\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout ) {\n\t\t\t\t\t\t\tthis.style.display = \"inline-block\";\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdisplay = defaultDisplay( this.nodeName );\n\n\t\t\t\t\t\t\t// inline-level elements accept inline-block;\n\t\t\t\t\t\t\t// block-level elements need to be inline with layout\n\t\t\t\t\t\t\tif ( display === \"inline\" ) {\n\t\t\t\t\t\t\t\tthis.style.display = \"inline-block\";\n\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.style.display = \"inline\";\n\t\t\t\t\t\t\t\tthis.style.zoom = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( opt.overflow != null ) {\n\t\t\t\tthis.style.overflow = \"hidden\";\n\t\t\t}\n\n\t\t\tfor ( p in prop ) {\n\t\t\t\te = new jQuery.fx( this, opt, p );\n\t\t\t\tval = prop[ p ];\n\n\t\t\t\tif ( rfxtypes.test(val) ) {\n\t\t\t\t\te[ val === \"toggle\" ? hidden ? \"show\" : \"hide\" : val ]();\n\n\t\t\t\t} else {\n\t\t\t\t\tparts = rfxnum.exec( val );\n\t\t\t\t\tstart = e.cur();\n\n\t\t\t\t\tif ( parts ) {\n\t\t\t\t\t\tend = parseFloat( parts[2] );\n\t\t\t\t\t\tunit = parts[3] || ( jQuery.cssNumber[ p ] ? \"\" : \"px\" );\n\n\t\t\t\t\t\t// We need to compute starting value\n\t\t\t\t\t\tif ( unit !== \"px\" ) {\n\t\t\t\t\t\t\tjQuery.style( this, p, (end || 1) + unit);\n\t\t\t\t\t\t\tstart = ((end || 1) / e.cur()) * start;\n\t\t\t\t\t\t\tjQuery.style( this, p, start + unit);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\t\t\tif ( parts[1] ) {\n\t\t\t\t\t\t\tend = ( (parts[ 1 ] === \"-=\" ? -1 : 1) * end ) + start;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\te.custom( start, end, unit );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.custom( start, val, \"\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For JS strict compliance\n\t\t\treturn true;\n\t\t});\n\t},\n\n\tstop: function( clearQueue, gotoEnd ) {\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue([]);\n\t\t}\n\n\t\tthis.each(function() {\n\t\t\tvar timers = jQuery.timers,\n\t\t\t\ti = timers.length;\n\t\t\t// clear marker counters if we know they won't be\n\t\t\tif ( !gotoEnd ) {\n\t\t\t\tjQuery._unmark( true, this );\n\t\t\t}\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( timers[i].elem === this ) {\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\t// force the next step to be the last\n\t\t\t\t\t\ttimers[i](true);\n\t\t\t\t\t}\n\n\t\t\t\t\ttimers.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// start the next in the queue if the last step wasn't forced\n\t\tif ( !gotoEnd ) {\n\t\t\tthis.dequeue();\n\t\t}\n\n\t\treturn this;\n\t}\n\n});\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout( clearFxNow, 0 );\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction clearFxNow() {\n\tfxNow = undefined;\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, num ) {\n\tvar obj = {};\n\n\tjQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {\n\t\tobj[ this ] = type;\n\t});\n\n\treturn obj;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\", 1),\n\tslideUp: genFx(\"hide\", 1),\n\tslideToggle: genFx(\"toggle\", 1),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.extend({\n\tspeed: function( speed, easing, fn ) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tjQuery.isFunction( speed ) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !jQuery.isFunction(easing) && easing\n\t\t};\n\n\t\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\t\topt.complete = function( noUnmark ) {\n\t\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\t\topt.old.call( this );\n\t\t\t}\n\n\t\t\tif ( opt.queue !== false ) {\n\t\t\t\tjQuery.dequeue( this );\n\t\t\t} else if ( noUnmark !== false ) {\n\t\t\t\tjQuery._unmark( this );\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t},\n\n\teasing: {\n\t\tlinear: function( p, n, firstNum, diff ) {\n\t\t\treturn firstNum + diff * p;\n\t\t},\n\t\tswing: function( p, n, firstNum, diff ) {\n\t\t\treturn ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;\n\t\t}\n\t},\n\n\ttimers: [],\n\n\tfx: function( elem, options, prop ) {\n\t\tthis.options = options;\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\n\t\toptions.orig = options.orig || {};\n\t}\n\n});\n\njQuery.fx.prototype = {\n\t// Simple function for setting a style value\n\tupdate: function() {\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\t(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );\n\t},\n\n\t// Get the current size\n\tcur: function() {\n\t\tif ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {\n\t\t\treturn this.elem[ this.prop ];\n\t\t}\n\n\t\tvar parsed,\n\t\t\tr = jQuery.css( this.elem, this.prop );\n\t\t// Empty strings, null, undefined and \"auto\" are converted to 0,\n\t\t// complex values such as \"rotate(1rad)\" are returned as is,\n\t\t// simple values such as \"10px\" are parsed to Float.\n\t\treturn isNaN( parsed = parseFloat( r ) ) ? !r || r === \"auto\" ? 0 : r : parsed;\n\t},\n\n\t// Start an animation from one number to another\n\tcustom: function( from, to, unit ) {\n\t\tvar self = this,\n\t\t\tfx = jQuery.fx;\n\n\t\tthis.startTime = fxNow || createFxNow();\n\t\tthis.start = from;\n\t\tthis.end = to;\n\t\tthis.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? \"\" : \"px\" );\n\t\tthis.now = this.start;\n\t\tthis.pos = this.state = 0;\n\n\t\tfunction t( gotoEnd ) {\n\t\t\treturn self.step(gotoEnd);\n\t\t}\n\n\t\tt.elem = this.elem;\n\n\t\tif ( t() && jQuery.timers.push(t) && !timerId ) {\n\t\t\ttimerId = setInterval( fx.tick, fx.interval );\n\t\t}\n\t},\n\n\t// Simple 'show' function\n\tshow: function() {\n\t\t// Remember where we started, so that we can go back to it later\n\t\tthis.options.orig[this.prop] = jQuery.style( this.elem, this.prop );\n\t\tthis.options.show = true;\n\n\t\t// Begin the animation\n\t\t// Make sure that we start at a small width/height to avoid any\n\t\t// flash of content\n\t\tthis.custom(this.prop === \"width\" || this.prop === \"height\" ? 1 : 0, this.cur());\n\n\t\t// Start by showing the element\n\t\tjQuery( this.elem ).show();\n\t},\n\n\t// Simple 'hide' function\n\thide: function() {\n\t\t// Remember where we started, so that we can go back to it later\n\t\tthis.options.orig[this.prop] = jQuery.style( this.elem, this.prop );\n\t\tthis.options.hide = true;\n\n\t\t// Begin the animation\n\t\tthis.custom(this.cur(), 0);\n\t},\n\n\t// Each step of an animation\n\tstep: function( gotoEnd ) {\n\t\tvar t = fxNow || createFxNow(),\n\t\t\tdone = true,\n\t\t\telem = this.elem,\n\t\t\toptions = this.options,\n\t\t\ti, n;\n\n\t\tif ( gotoEnd || t >= options.duration + this.startTime ) {\n\t\t\tthis.now = this.end;\n\t\t\tthis.pos = this.state = 1;\n\t\t\tthis.update();\n\n\t\t\toptions.animatedProperties[ this.prop ] = true;\n\n\t\t\tfor ( i in options.animatedProperties ) {\n\t\t\t\tif ( options.animatedProperties[i] !== true ) {\n\t\t\t\t\tdone = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( done ) {\n\t\t\t\t// Reset the overflow\n\t\t\t\tif ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {\n\n\t\t\t\t\tjQuery.each( [ \"\", \"X\", \"Y\" ], function (index, value) {\n\t\t\t\t\t\telem.style[ \"overflow\" + value ] = options.overflow[index];\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Hide the element if the \"hide\" operation was done\n\t\t\t\tif ( options.hide ) {\n\t\t\t\t\tjQuery(elem).hide();\n\t\t\t\t}\n\n\t\t\t\t// Reset the properties, if the item has been hidden or shown\n\t\t\t\tif ( options.hide || options.show ) {\n\t\t\t\t\tfor ( var p in options.animatedProperties ) {\n\t\t\t\t\t\tjQuery.style( elem, p, options.orig[p] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Execute the complete function\n\t\t\t\toptions.complete.call( elem );\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t} else {\n\t\t\t// classical easing cannot be used with an Infinity duration\n\t\t\tif ( options.duration == Infinity ) {\n\t\t\t\tthis.now = t;\n\t\t\t} else {\n\t\t\t\tn = t - this.startTime;\n\t\t\t\tthis.state = n / options.duration;\n\n\t\t\t\t// Perform the easing function, defaults to swing\n\t\t\t\tthis.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );\n\t\t\t\tthis.now = this.start + ((this.end - this.start) * this.pos);\n\t\t\t}\n\t\t\t// Perform the next step of the animation\n\t\t\tthis.update();\n\t\t}\n\n\t\treturn true;\n\t}\n};\n\njQuery.extend( jQuery.fx, {\n\ttick: function() {\n\t\tfor ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {\n\t\t\tif ( !timers[i]() ) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif ( !timers.length ) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t},\n\n\tinterval: 13,\n\n\tstop: function() {\n\t\tclearInterval( timerId );\n\t\ttimerId = null;\n\t},\n\n\tspeeds: {\n\t\tslow: 600,\n\t\tfast: 200,\n\t\t// Default speed\n\t\t_default: 400\n\t},\n\n\tstep: {\n\t\topacity: function( fx ) {\n\t\t\tjQuery.style( fx.elem, \"opacity\", fx.now );\n\t\t},\n\n\t\t_default: function( fx ) {\n\t\t\tif ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {\n\t\t\t\tfx.elem.style[ fx.prop ] = (fx.prop === \"width\" || fx.prop === \"height\" ? Math.max(0, fx.now) : fx.now) + fx.unit;\n\t\t\t} else {\n\t\t\t\tfx.elem[ fx.prop ] = fx.now;\n\t\t\t}\n\t\t}\n\t}\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\n\n// Try to restore the default display value of an element\nfunction defaultDisplay( nodeName ) {\n\n\tif ( !elemdisplay[ nodeName ] ) {\n\n\t\tvar body = document.body,\n\t\t\telem = jQuery( \"<\" + nodeName + \">\" ).appendTo( body ),\n\t\t\tdisplay = elem.css( \"display\" );\n\n\t\telem.remove();\n\n\t\t// If the simple way fails,\n\t\t// get element's real default display by attaching it to a temp iframe\n\t\tif ( display === \"none\" || display === \"\" ) {\n\t\t\t// No iframe to use yet, so create it\n\t\t\tif ( !iframe ) {\n\t\t\t\tiframe = document.createElement( \"iframe\" );\n\t\t\t\tiframe.frameBorder = iframe.width = iframe.height = 0;\n\t\t\t}\n\n\t\t\tbody.appendChild( iframe );\n\n\t\t\t// Create a cacheable copy of the iframe document on first call.\n\t\t\t// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML\n\t\t\t// document to it; WebKit & Firefox won't allow reusing the iframe document.\n\t\t\tif ( !iframeDoc || !iframe.createElement ) {\n\t\t\t\tiframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;\n\t\t\t\tiframeDoc.write( ( document.compatMode === \"CSS1Compat\" ? \"<!doctype html>\" : \"\" ) + \"<html><body>\" );\n\t\t\t\tiframeDoc.close();\n\t\t\t}\n\n\t\t\telem = iframeDoc.createElement( nodeName );\n\n\t\t\tiframeDoc.body.appendChild( elem );\n\n\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t\tbody.removeChild( iframe );\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn elemdisplay[ nodeName ];\n}\n\n\n\n\nvar rtable = /^t(?:able|d|h)$/i,\n\trroot = /^(?:body|html)$/i;\n\nif ( \"getBoundingClientRect\" in document.documentElement ) {\n\tjQuery.fn.offset = function( options ) {\n\t\tvar elem = this[0], box;\n\n\t\tif ( options ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t\t}\n\n\t\tif ( !elem || !elem.ownerDocument ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( elem === elem.ownerDocument.body ) {\n\t\t\treturn jQuery.offset.bodyOffset( elem );\n\t\t}\n\n\t\ttry {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t} catch(e) {}\n\n\t\tvar doc = elem.ownerDocument,\n\t\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure we're not dealing with a disconnected DOM node\n\t\tif ( !box || !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box ? { top: box.top, left: box.left } : { top: 0, left: 0 };\n\t\t}\n\n\t\tvar body = doc.body,\n\t\t\twin = getWindow(doc),\n\t\t\tclientTop  = docElem.clientTop  || body.clientTop  || 0,\n\t\t\tclientLeft = docElem.clientLeft || body.clientLeft || 0,\n\t\t\tscrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,\n\t\t\tscrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,\n\t\t\ttop  = box.top  + scrollTop  - clientTop,\n\t\t\tleft = box.left + scrollLeft - clientLeft;\n\n\t\treturn { top: top, left: left };\n\t};\n\n} else {\n\tjQuery.fn.offset = function( options ) {\n\t\tvar elem = this[0];\n\n\t\tif ( options ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t\t}\n\n\t\tif ( !elem || !elem.ownerDocument ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( elem === elem.ownerDocument.body ) {\n\t\t\treturn jQuery.offset.bodyOffset( elem );\n\t\t}\n\n\t\tjQuery.offset.initialize();\n\n\t\tvar computedStyle,\n\t\t\toffsetParent = elem.offsetParent,\n\t\t\tprevOffsetParent = elem,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tdocElem = doc.documentElement,\n\t\t\tbody = doc.body,\n\t\t\tdefaultView = doc.defaultView,\n\t\t\tprevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,\n\t\t\ttop = elem.offsetTop,\n\t\t\tleft = elem.offsetLeft;\n\n\t\twhile ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {\n\t\t\tif ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === \"fixed\" ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcomputedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;\n\t\t\ttop  -= elem.scrollTop;\n\t\t\tleft -= elem.scrollLeft;\n\n\t\t\tif ( elem === offsetParent ) {\n\t\t\t\ttop  += elem.offsetTop;\n\t\t\t\tleft += elem.offsetLeft;\n\n\t\t\t\tif ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {\n\t\t\t\t\ttop  += parseFloat( computedStyle.borderTopWidth  ) || 0;\n\t\t\t\t\tleft += parseFloat( computedStyle.borderLeftWidth ) || 0;\n\t\t\t\t}\n\n\t\t\t\tprevOffsetParent = offsetParent;\n\t\t\t\toffsetParent = elem.offsetParent;\n\t\t\t}\n\n\t\t\tif ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== \"visible\" ) {\n\t\t\t\ttop  += parseFloat( computedStyle.borderTopWidth  ) || 0;\n\t\t\t\tleft += parseFloat( computedStyle.borderLeftWidth ) || 0;\n\t\t\t}\n\n\t\t\tprevComputedStyle = computedStyle;\n\t\t}\n\n\t\tif ( prevComputedStyle.position === \"relative\" || prevComputedStyle.position === \"static\" ) {\n\t\t\ttop  += body.offsetTop;\n\t\t\tleft += body.offsetLeft;\n\t\t}\n\n\t\tif ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === \"fixed\" ) {\n\t\t\ttop  += Math.max( docElem.scrollTop, body.scrollTop );\n\t\t\tleft += Math.max( docElem.scrollLeft, body.scrollLeft );\n\t\t}\n\n\t\treturn { top: top, left: left };\n\t};\n}\n\njQuery.offset = {\n\tinitialize: function() {\n\t\tvar body = document.body, container = document.createElement(\"div\"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, \"marginTop\") ) || 0,\n\t\t\thtml = \"<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";\n\n\t\tjQuery.extend( container.style, { position: \"absolute\", top: 0, left: 0, margin: 0, border: 0, width: \"1px\", height: \"1px\", visibility: \"hidden\" } );\n\n\t\tcontainer.innerHTML = html;\n\t\tbody.insertBefore( container, body.firstChild );\n\t\tinnerDiv = container.firstChild;\n\t\tcheckDiv = innerDiv.firstChild;\n\t\ttd = innerDiv.nextSibling.firstChild.firstChild;\n\n\t\tthis.doesNotAddBorder = (checkDiv.offsetTop !== 5);\n\t\tthis.doesAddBorderForTableAndCells = (td.offsetTop === 5);\n\n\t\tcheckDiv.style.position = \"fixed\";\n\t\tcheckDiv.style.top = \"20px\";\n\n\t\t// safari subtracts parent border width here which is 5px\n\t\tthis.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);\n\t\tcheckDiv.style.position = checkDiv.style.top = \"\";\n\n\t\tinnerDiv.style.overflow = \"hidden\";\n\t\tinnerDiv.style.position = \"relative\";\n\n\t\tthis.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);\n\n\t\tthis.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);\n\n\t\tbody.removeChild( container );\n\t\tjQuery.offset.initialize = jQuery.noop;\n\t},\n\n\tbodyOffset: function( body ) {\n\t\tvar top = body.offsetTop,\n\t\t\tleft = body.offsetLeft;\n\n\t\tjQuery.offset.initialize();\n\n\t\tif ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {\n\t\t\ttop  += parseFloat( jQuery.css(body, \"marginTop\") ) || 0;\n\t\t\tleft += parseFloat( jQuery.css(body, \"marginLeft\") ) || 0;\n\t\t}\n\n\t\treturn { top: top, left: left };\n\t},\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif (options.top != null) {\n\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t}\n\t\tif (options.left != null) {\n\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\tposition: function() {\n\t\tif ( !this[0] ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar elem = this[0],\n\n\t\t// Get *real* offsetParent\n\t\toffsetParent = this.offsetParent(),\n\n\t\t// Get correct offsets\n\t\toffset       = this.offset(),\n\t\tparentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();\n\n\t\t// Subtract element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\toffset.top  -= parseFloat( jQuery.css(elem, \"marginTop\") ) || 0;\n\t\toffset.left -= parseFloat( jQuery.css(elem, \"marginLeft\") ) || 0;\n\n\t\t// Add offsetParent borders\n\t\tparentOffset.top  += parseFloat( jQuery.css(offsetParent[0], \"borderTopWidth\") ) || 0;\n\t\tparentOffset.left += parseFloat( jQuery.css(offsetParent[0], \"borderLeftWidth\") ) || 0;\n\n\t\t// Subtract the two offsets\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top,\n\t\t\tleft: offset.left - parentOffset.left\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || document.body;\n\t\t\twhile ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, \"position\") === \"static\") ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( [\"Left\", \"Top\"], function( i, name ) {\n\tvar method = \"scroll\" + name;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\tvar elem, win;\n\n\t\tif ( val === undefined ) {\n\t\t\telem = this[ 0 ];\n\n\t\t\tif ( !elem ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\twin = getWindow( elem );\n\n\t\t\t// Return the scroll offset\n\t\t\treturn win ? (\"pageXOffset\" in win) ? win[ i ? \"pageYOffset\" : \"pageXOffset\" ] :\n\t\t\t\tjQuery.support.boxModel && win.document.documentElement[ method ] ||\n\t\t\t\t\twin.document.body[ method ] :\n\t\t\t\telem[ method ];\n\t\t}\n\n\t\t// Set the scroll offset\n\t\treturn this.each(function() {\n\t\t\twin = getWindow( this );\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!i ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\t i ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\tthis[ method ] = val;\n\t\t\t}\n\t\t});\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n\n\n\n\n// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods\njQuery.each([ \"Height\", \"Width\" ], function( i, name ) {\n\n\tvar type = name.toLowerCase();\n\n\t// innerHeight and innerWidth\n\tjQuery.fn[ \"inner\" + name ] = function() {\n\t\tvar elem = this[0];\n\t\treturn elem && elem.style ?\n\t\t\tparseFloat( jQuery.css( elem, type, \"padding\" ) ) :\n\t\t\tnull;\n\t};\n\n\t// outerHeight and outerWidth\n\tjQuery.fn[ \"outer\" + name ] = function( margin ) {\n\t\tvar elem = this[0];\n\t\treturn elem && elem.style ?\n\t\t\tparseFloat( jQuery.css( elem, type, margin ? \"margin\" : \"border\" ) ) :\n\t\t\tnull;\n\t};\n\n\tjQuery.fn[ type ] = function( size ) {\n\t\t// Get window width or height\n\t\tvar elem = this[0];\n\t\tif ( !elem ) {\n\t\t\treturn size == null ? null : this;\n\t\t}\n\n\t\tif ( jQuery.isFunction( size ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tvar self = jQuery( this );\n\t\t\t\tself[ type ]( size.call( this, i, self[ type ]() ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode\n\t\t\t// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat\n\t\t\tvar docElemProp = elem.document.documentElement[ \"client\" + name ],\n\t\t\t\tbody = elem.document.body;\n\t\t\treturn elem.document.compatMode === \"CSS1Compat\" && docElemProp ||\n\t\t\t\tbody && body[ \"client\" + name ] || docElemProp;\n\n\t\t// Get document width or height\n\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t// Either scroll[Width/Height] or offset[Width/Height], whichever is greater\n\t\t\treturn Math.max(\n\t\t\t\telem.documentElement[\"client\" + name],\n\t\t\t\telem.body[\"scroll\" + name], elem.documentElement[\"scroll\" + name],\n\t\t\t\telem.body[\"offset\" + name], elem.documentElement[\"offset\" + name]\n\t\t\t);\n\n\t\t// Get or set width or height on the element\n\t\t} else if ( size === undefined ) {\n\t\t\tvar orig = jQuery.css( elem, type ),\n\t\t\t\tret = parseFloat( orig );\n\n\t\t\treturn jQuery.isNaN( ret ) ? orig : ret;\n\n\t\t// Set the width or height on the element (default to pixels if value is unitless)\n\t\t} else {\n\t\t\treturn this.css( type, typeof size === \"string\" ? size : size + \"px\" );\n\t\t}\n\t};\n\n});\n\n\n// Expose jQuery to the global object\nwindow.jQuery = window.$ = jQuery;\n})(window);\n//Register jQuery as a module.\nif (typeof define !== \"undefined\" && define.amd) {\n    define('jquery',[], function() {return jQuery });\n}\n\ndefine(\"require-jquery\", function(){});\n"
  },
  {
    "path": "client/js/lib/stacktrace.js",
    "content": "// Domain Public by Eric Wendelin http://eriwen.com/ (2008)\n//                  Luke Smith http://lucassmith.name/ (2008)\n//                  Loic Dachary <loic@dachary.org> (2008)\n//                  Johan Euphrosine <proppy@aminche.com> (2008)\n//                  Øyvind Sean Kinsey http://kinsey.no/blog (2010)\n//\n// Information and discussions\n// http://jspoker.pokersource.info/skin/test-printstacktrace.html\n// http://eriwen.com/javascript/js-stack-trace/\n// http://eriwen.com/javascript/stacktrace-update/\n// http://pastie.org/253058\n//\n// guessFunctionNameFromLines comes from firebug\n//\n// Software License Agreement (BSD License)\n//\n// Copyright (c) 2007, Parakey Inc.\n// All rights reserved.\n//\n// Redistribution and use of this software in source and binary forms, with or without modification,\n// are permitted provided that the following conditions are met:\n//\n// * Redistributions of source code must retain the above\n//   copyright notice, this list of conditions and the\n//   following disclaimer.\n//\n// * Redistributions in binary form must reproduce the above\n//   copyright notice, this list of conditions and the\n//   following disclaimer in the documentation and/or other\n//   materials provided with the distribution.\n//\n// * Neither the name of Parakey Inc. nor the names of its\n//   contributors may be used to endorse or promote products\n//   derived from this software without specific prior\n//   written permission of Parakey Inc.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR\n// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER\n// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\n// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n/**\n * Main function giving a function stack trace with a forced or passed in Error \n *\n * @cfg {Error} e The error to create a stacktrace from (optional)\n * @cfg {Boolean} guess If we should try to resolve the names of anonymous functions\n * @return {Array} of Strings with functions, lines, files, and arguments where possible \n */\nfunction printStackTrace(options) {\n    var ex = (options && options.e) ? options.e : null;\n    var guess = options ? !!options.guess : true;\n    \n    var p = new printStackTrace.implementation();\n    var result = p.run(ex);\n    return (guess) ? p.guessFunctions(result) : result;\n}\n\nprintStackTrace.implementation = function() {};\n\nprintStackTrace.implementation.prototype = {\n    run: function(ex) {\n        // Use either the stored mode, or resolve it\n        var mode = this._mode || this.mode();\n        if (mode === 'other') {\n            return this.other(arguments.callee);\n        } else {\n            ex = ex ||\n                (function() {\n                    try {\n                        var _err = __undef__ << 1;\n                    } catch (e) {\n                        return e;\n                    }\n                })();\n            return this[mode](ex);\n        }\n    },\n    \n    /**\n     * @return {String} mode of operation for the environment in question.\n     */\n    mode: function() {\n        try {\n            var _err = __undef__ << 1;\n        } catch (e) {\n            if (e['arguments']) {\n                return (this._mode = 'chrome');\n            } else if (window.opera && e.stacktrace) {\n                return (this._mode = 'opera10');\n            } else if (e.stack) {\n                return (this._mode = 'firefox');\n            } else if (window.opera && !('stacktrace' in e)) { //Opera 9-\n                return (this._mode = 'opera');\n            }\n        }\n        return (this._mode = 'other');\n    },\n\n    /**\n     * Given a context, function name, and callback function, overwrite it so that it calls\n     * printStackTrace() first with a callback and then runs the rest of the body.\n     * \n     * @param {Object} context of execution (e.g. window)\n     * @param {String} functionName to instrument\n     * @param {Function} function to call with a stack trace on invocation\n     */\n    instrumentFunction: function(context, functionName, callback) {\n        context = context || window;\n        context['_old' + functionName] = context[functionName];\n        context[functionName] = function() { \n            callback.call(this, printStackTrace());\n            return context['_old' + functionName].apply(this, arguments);\n        };\n        context[functionName]._instrumented = true;\n    },\n    \n    /**\n     * Given a context and function name of a function that has been\n     * instrumented, revert the function to it's original (non-instrumented)\n     * state.\n     *\n     * @param {Object} context of execution (e.g. window)\n     * @param {String} functionName to de-instrument\n     */\n    deinstrumentFunction: function(context, functionName) {\n        if (context[functionName].constructor === Function &&\n                context[functionName]._instrumented &&\n                context['_old' + functionName].constructor === Function) {\n            context[functionName] = context['_old' + functionName];\n        }\n    },\n    \n    /**\n     * Given an Error object, return a formatted Array based on Chrome's stack string.\n     * \n     * @param e - Error object to inspect\n     * @return Array<String> of function calls, files and line numbers\n     */\n    chrome: function(e) {\n        return e.stack.replace(/^[^\\n]*\\n/, '').replace(/^[^\\n]*\\n/, '').replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@').split('\\n');\n    },\n\n    /**\n     * Given an Error object, return a formatted Array based on Firefox's stack string.\n     * \n     * @param e - Error object to inspect\n     * @return Array<String> of function calls, files and line numbers\n     */\n    firefox: function(e) {\n        return e.stack.replace(/^[^\\n]*\\n/, '').replace(/(?:\\n@:0)?\\s+$/m, '').replace(/^\\(/gm, '{anonymous}(').split('\\n');\n    },\n\n    /**\n     * Given an Error object, return a formatted Array based on Opera 10's stacktrace string.\n     * \n     * @param e - Error object to inspect\n     * @return Array<String> of function calls, files and line numbers\n     */\n    opera10: function(e) {\n        var stack = e.stacktrace;\n        var lines = stack.split('\\n'), ANON = '{anonymous}',\n            lineRE = /.*line (\\d+), column (\\d+) in ((<anonymous function\\:?\\s*(\\S+))|([^\\(]+)\\([^\\)]*\\))(?: in )?(.*)\\s*$/i, i, j, len;\n        for (i = 2, j = 0, len = lines.length; i < len - 2; i++) {\n            if (lineRE.test(lines[i])) {\n                var location = RegExp.$6 + ':' + RegExp.$1 + ':' + RegExp.$2;\n                var fnName = RegExp.$3;\n                fnName = fnName.replace(/<anonymous function\\s?(\\S+)?>/g, ANON);\n                lines[j++] = fnName + '@' + location;\n            }\n        }\n        \n        lines.splice(j, lines.length - j);\n        return lines;\n    },\n    \n    // Opera 7.x-9.x only!\n    opera: function(e) {\n        var lines = e.message.split('\\n'), ANON = '{anonymous}', \n            lineRE = /Line\\s+(\\d+).*script\\s+(http\\S+)(?:.*in\\s+function\\s+(\\S+))?/i, \n            i, j, len;\n        \n        for (i = 4, j = 0, len = lines.length; i < len; i += 2) {\n            //TODO: RegExp.exec() would probably be cleaner here\n            if (lineRE.test(lines[i])) {\n                lines[j++] = (RegExp.$3 ? RegExp.$3 + '()@' + RegExp.$2 + RegExp.$1 : ANON + '()@' + RegExp.$2 + ':' + RegExp.$1) + ' -- ' + lines[i + 1].replace(/^\\s+/, '');\n            }\n        }\n        \n        lines.splice(j, lines.length - j);\n        return lines;\n    },\n    \n    // Safari, IE, and others\n    other: function(curr) {\n        var ANON = '{anonymous}', fnRE = /function\\s*([\\w\\-$]+)?\\s*\\(/i,\n            stack = [], j = 0, fn, args;\n        \n        var maxStackSize = 10;\n        while (curr && stack.length < maxStackSize) {\n            fn = fnRE.test(curr.toString()) ? RegExp.$1 || ANON : ANON;\n            args = Array.prototype.slice.call(curr['arguments']);\n            stack[j++] = fn + '(' + this.stringifyArguments(args) + ')';\n            curr = curr.caller;\n        }\n        return stack;\n    },\n    \n    /**\n     * Given arguments array as a String, subsituting type names for non-string types.\n     *\n     * @param {Arguments} object\n     * @return {Array} of Strings with stringified arguments\n     */\n    stringifyArguments: function(args) {\n        for (var i = 0; i < args.length; ++i) {\n            var arg = args[i];\n            if (arg === undefined) {\n                args[i] = 'undefined';\n            } else if (arg === null) {\n                args[i] = 'null';\n            } else if (arg.constructor) {\n                if (arg.constructor === Array) {\n                    if (arg.length < 3) {\n                        args[i] = '[' + this.stringifyArguments(arg) + ']';\n                    } else {\n                        args[i] = '[' + this.stringifyArguments(Array.prototype.slice.call(arg, 0, 1)) + '...' + this.stringifyArguments(Array.prototype.slice.call(arg, -1)) + ']';\n                    }\n                } else if (arg.constructor === Object) {\n                    args[i] = '#object';\n                } else if (arg.constructor === Function) {\n                    args[i] = '#function';\n                } else if (arg.constructor === String) {\n                    args[i] = '\"' + arg + '\"';\n                }\n            }\n        }\n        return args.join(',');\n    },\n    \n    sourceCache: {},\n    \n    /**\n     * @return the text from a given URL.\n     */\n    ajax: function(url) {\n        var req = this.createXMLHTTPObject();\n        if (!req) {\n            return;\n        }\n        req.open('GET', url, false);\n        req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');\n        req.send('');\n        return req.responseText;\n    },\n    \n    /**\n     * Try XHR methods in order and store XHR factory.\n     *\n     * @return <Function> XHR function or equivalent\n     */\n    createXMLHTTPObject: function() {\n        var xmlhttp, XMLHttpFactories = [\n            function() {\n                return new XMLHttpRequest();\n            }, function() {\n                return new ActiveXObject('Msxml2.XMLHTTP');\n            }, function() {\n                return new ActiveXObject('Msxml3.XMLHTTP');\n            }, function() {\n                return new ActiveXObject('Microsoft.XMLHTTP');\n            }\n        ];\n        for (var i = 0; i < XMLHttpFactories.length; i++) {\n            try {\n                xmlhttp = XMLHttpFactories[i]();\n                // Use memoization to cache the factory\n                this.createXMLHTTPObject = XMLHttpFactories[i];\n                return xmlhttp;\n            } catch (e) {}\n        }\n    },\n\n    /**\n     * Given a URL, check if it is in the same domain (so we can get the source\n     * via Ajax).\n     *\n     * @param url <String> source url\n     * @return False if we need a cross-domain request\n     */\n    isSameDomain: function(url) {\n        return url.indexOf(location.hostname) !== -1;\n    },\n    \n    /**\n     * Get source code from given URL if in the same domain.\n     *\n     * @param url <String> JS source URL\n     * @return <String> Source code\n     */\n    getSource: function(url) {\n        if (!(url in this.sourceCache)) {\n            this.sourceCache[url] = this.ajax(url).split('\\n');\n        }\n        return this.sourceCache[url];\n    },\n    \n    guessFunctions: function(stack) {\n        for (var i = 0; i < stack.length; ++i) {\n            var reStack = /\\{anonymous\\}\\(.*\\)@(\\w+:\\/\\/([\\-\\w\\.]+)+(:\\d+)?[^:]+):(\\d+):?(\\d+)?/;\n            var frame = stack[i], m = reStack.exec(frame);\n            if (m) {\n                var file = m[1], lineno = m[4]; //m[7] is character position in Chrome\n                if (file && this.isSameDomain(file) && lineno) {\n                    var functionName = this.guessFunctionName(file, lineno);\n                    stack[i] = frame.replace('{anonymous}', functionName);\n                }\n            }\n        }\n        return stack;\n    },\n    \n    guessFunctionName: function(url, lineNo) {\n        try {\n            return this.guessFunctionNameFromLines(lineNo, this.getSource(url));\n        } catch (e) {\n            return 'getSource failed with url: ' + url + ', exception: ' + e.toString();\n        }\n    },\n    \n    guessFunctionNameFromLines: function(lineNo, source) {\n        var reFunctionArgNames = /function ([^(]*)\\(([^)]*)\\)/;\n        var reGuessFunction = /['\"]?([0-9A-Za-z_]+)['\"]?\\s*[:=]\\s*(function|eval|new Function)/;\n        // Walk backwards from the first line in the function until we find the line which\n        // matches the pattern above, which is the function definition\n        var line = \"\", maxLines = 10;\n        for (var i = 0; i < maxLines; ++i) {\n            line = source[lineNo - i] + line;\n            if (line !== undefined) {\n                var m = reGuessFunction.exec(line);\n                if (m && m[1]) {\n                    return m[1];\n                } else {\n                    m = reFunctionArgNames.exec(line);\n                    if (m && m[1]) {\n                        return m[1];\n                    }\n                }\n            }\n        }\n        return '(?)';\n    }\n};\n"
  },
  {
    "path": "client/js/main.js",
    "content": "\ndefine(['jquery', 'app'], function($, App) {\n    var app, game;\n\n    var initApp = function() {\n        $(document).ready(function() {\n        \tapp = new App();\n            app.center();\n        \n            if(Detect.isWindows()) {\n                // Workaround for graphical glitches on text\n                $('body').addClass('windows');\n            }\n            \n            if(Detect.isOpera()) {\n                // Fix for no pointer events\n                $('body').addClass('opera');\n            }\n        \n            $('body').click(function(event) {\n                if($('#parchment').hasClass('credits')) {\n                    app.toggleCredits();\n                }\n                \n                if($('#parchment').hasClass('about')) {\n                    app.toggleAbout();\n                }\n            });\n\t\n        \t$('.barbutton').click(function() {\n        \t    $(this).toggleClass('active');\n        \t});\n\t\n        \t$('#chatbutton').click(function() {\n        \t    if($('#chatbutton').hasClass('active')) {\n        \t        app.showChat();\n        \t    } else {\n                    app.hideChat();\n        \t    }\n        \t});\n\t\n        \t$('#helpbutton').click(function() {\n                app.toggleAbout();\n        \t});\n\t\n        \t$('#achievementsbutton').click(function() {\n                app.toggleAchievements();\n                if(app.blinkInterval) {\n                    clearInterval(app.blinkInterval);\n                }\n                $(this).removeClass('blink');\n        \t});\n\t\n        \t$('#instructions').click(function() {\n                app.hideWindows();\n        \t});\n        \t\n        \t$('#playercount').click(function() {\n        \t    app.togglePopulationInfo();\n        \t});\n        \t\n        \t$('#population').click(function() {\n        \t    app.togglePopulationInfo();\n        \t});\n\t\n        \t$('.clickable').click(function(event) {\n                event.stopPropagation();\n        \t});\n\t\n        \t$('#toggle-credits').click(function() {\n        \t    app.toggleCredits();\n        \t});\n\t\n        \t$('#create-new span').click(function() {\n        \t    app.animateParchment('loadcharacter', 'confirmation');\n        \t});\n\t\n        \t$('.delete').click(function() {\n                app.storage.clear();\n        \t    app.animateParchment('confirmation', 'createcharacter');\n        \t});\n\t\n        \t$('#cancel span').click(function() {\n        \t    app.animateParchment('confirmation', 'loadcharacter');\n        \t});\n        \t\n        \t$('.ribbon').click(function() {\n        \t    app.toggleAbout();\n        \t});\n\n            $('#nameinput').bind(\"keyup\", function() {\n                app.toggleButton();\n            });\n    \n            $('#previous').click(function() {\n                var $achievements = $('#achievements');\n        \n                if(app.currentPage === 1) {\n                    return false;\n                } else {\n                    app.currentPage -= 1;\n                    $achievements.removeClass().addClass('active page' + app.currentPage);\n                }\n            });\n    \n            $('#next').click(function() {\n                var $achievements = $('#achievements'),\n                    $lists = $('#lists'),\n                    nbPages = $lists.children('ul').length;\n        \n                if(app.currentPage === nbPages) {\n                    return false;\n                } else {\n                    app.currentPage += 1;\n                    $achievements.removeClass().addClass('active page' + app.currentPage);\n                }\n            });\n\n            $('#notifications div').bind(TRANSITIONEND, app.resetMessagesPosition.bind(app));\n    \n            $('.close').click(function() {\n                app.hideWindows();\n            });\n        \n            $('.twitter').click(function() {\n                var url = $(this).attr('href');\n\n               app.openPopup('twitter', url);\n               return false;\n            });\n\n            $('.facebook').click(function() {\n                var url = $(this).attr('href');\n\n               app.openPopup('facebook', url);\n               return false;\n            });\n        \n            var data = app.storage.data;\n    \t\tif(data.hasAlreadyPlayed) {\n    \t\t    if(data.player.name && data.player.name !== \"\") {\n\t\t            $('#playername').html(data.player.name);\n    \t\t        $('#playerimage').attr('src', data.player.image);\n    \t\t    }\n    \t\t}\n    \t\t\n    \t\t$('.play div').click(function(event) {\n                var nameFromInput = $('#nameinput').attr('value'),\n                    nameFromStorage = $('#playername').html(),\n                    name = nameFromInput || nameFromStorage;\n                \n                app.tryStartingGame(name);\n            });\n        \n            document.addEventListener(\"touchstart\", function() {},false);\n            \n            $('#resize-check').bind(\"transitionend\", app.resizeUi.bind(app));\n            $('#resize-check').bind(\"webkitTransitionEnd\", app.resizeUi.bind(app));\n            $('#resize-check').bind(\"oTransitionEnd\", app.resizeUi.bind(app));\n        \n            log.info(\"App initialized.\");\n        \n            initGame();\n        });\n    };\n    \n    var initGame = function() {\n        require(['game'], function(Game) {\n            \n            var canvas = document.getElementById(\"entities\"),\n        \t    background = document.getElementById(\"background\"),\n        \t    foreground = document.getElementById(\"foreground\"),\n        \t    input = document.getElementById(\"chatinput\");\n\n    \t\tgame = new Game(app);\n    \t\tgame.setup('#bubbles', canvas, background, foreground, input);\n    \t\tgame.setStorage(app.storage);\n    \t\tapp.setGame(game);\n    \t\t\n    \t\tif(app.isDesktop && app.supportsWorkers) {\n    \t\t    game.loadMap();\n    \t\t}\n\t\n    \t\tgame.onGameStart(function() {\n                app.initEquipmentIcons();\n    \t\t});\n    \t\t\n    \t\tgame.onDisconnect(function(message) {\n    \t\t    $('#death').find('p').html(message+\"<em>Please reload the page.</em>\");\n    \t\t    $('#respawn').hide();\n    \t\t});\n\t\n    \t\tgame.onPlayerDeath(function() {\n    \t\t    if($('body').hasClass('credits')) {\n    \t\t        $('body').removeClass('credits');\n    \t\t    }\n                $('body').addClass('death');\n    \t\t});\n\t\n    \t\tgame.onPlayerEquipmentChange(function() {\n    \t\t    app.initEquipmentIcons();\n    \t\t});\n\t\n    \t\tgame.onPlayerInvincible(function() {\n    \t\t    $('#hitpoints').toggleClass('invincible');\n    \t\t});\n\n    \t\tgame.onNbPlayersChange(function(worldPlayers, totalPlayers) {\n    \t\t    var setWorldPlayersString = function(string) {\n        \t\t        $(\"#instance-population\").find(\"span:nth-child(2)\").text(string);\n        \t\t        $(\"#playercount\").find(\"span:nth-child(2)\").text(string);\n        \t\t    },\n        \t\t    setTotalPlayersString = function(string) {\n        \t\t        $(\"#world-population\").find(\"span:nth-child(2)\").text(string);\n        \t\t    };\n    \t\t    \n    \t\t    $(\"#playercount\").find(\"span.count\").text(worldPlayers);\n    \t\t    \n    \t\t    $(\"#instance-population\").find(\"span\").text(worldPlayers);\n    \t\t    if(worldPlayers == 1) {\n    \t\t        setWorldPlayersString(\"player\");\n    \t\t    } else {\n    \t\t        setWorldPlayersString(\"players\");\n    \t\t    }\n    \t\t    \n    \t\t    $(\"#world-population\").find(\"span\").text(totalPlayers);\n    \t\t    if(totalPlayers == 1) {\n    \t\t        setTotalPlayersString(\"player\");\n    \t\t    } else {\n    \t\t        setTotalPlayersString(\"players\");\n    \t\t    }\n    \t\t});\n\t\n    \t\tgame.onAchievementUnlock(function(id, name, description) {\n    \t\t    app.unlockAchievement(id, name);\n    \t\t});\n\t\n    \t\tgame.onNotification(function(message) {\n    \t\t    app.showMessage(message);\n    \t\t});\n\t\n            app.initHealthBar();\n\t\n            $('#nameinput').attr('value', '');\n    \t\t$('#chatbox').attr('value', '');\n    \t\t\n        \tif(game.renderer.mobile || game.renderer.tablet) {\n                $('#foreground').bind('touchstart', function(event) {\n                    app.center();\n                    app.setMouseCoordinates(event.originalEvent.touches[0]);\n                \tgame.click();\n                \tapp.hideWindows();\n                });\n            } else {\n                $('#foreground').click(function(event) {\n                    app.center();\n                    app.setMouseCoordinates(event);\n                    if(game) {\n                \t    game.click();\n                \t}\n                \tapp.hideWindows();\n                    // $('#chatinput').focus();\n                });\n            }\n\n            $('body').unbind('click');\n            $('body').click(function(event) {\n                var hasClosedParchment = false;\n                \n                if($('#parchment').hasClass('credits')) {\n                    if(game.started) {\n                        app.closeInGameCredits();\n                        hasClosedParchment = true;\n                    } else {\n                        app.toggleCredits();\n                    }\n                }\n                \n                if($('#parchment').hasClass('about')) {\n                    if(game.started) {\n                        app.closeInGameAbout();\n                        hasClosedParchment = true;\n                    } else {\n                        app.toggleAbout();\n                    }\n                }\n                \n                if(game.started && !game.renderer.mobile && game.player && !hasClosedParchment) {\n                    game.click();\n                }\n            });\n            \n            $('#respawn').click(function(event) {\n                game.audioManager.playSound(\"revive\");\n                game.restart();\n                $('body').removeClass('death');\n            });\n            \n            $(document).mousemove(function(event) {\n            \tapp.setMouseCoordinates(event);\n            \tif(game.started) {\n            \t    game.movecursor();\n            \t}\n            });\n\n            $(document).keydown(function(e) {\n            \tvar key = e.which,\n                    $chat = $('#chatinput');\n\n                if(key === 13) {\n                    if($('#chatbox').hasClass('active')) {\n                        app.hideChat();\n                    } else {\n                        app.showChat();\n                    }\n                }\n            });\n            \n            $('#chatinput').keydown(function(e) {\n                var key = e.which,\n                    $chat = $('#chatinput');\n\n                if(key === 13) {\n                    if($chat.attr('value') !== '') {\n                        if(game.player) {\n                            game.say($chat.attr('value'));\n                        }\n                        $chat.attr('value', '');\n                        app.hideChat();\n                        $('#foreground').focus();\n                        return false;\n                    } else {\n                        app.hideChat();\n                        return false;\n                    }\n                }\n                \n                if(key === 27) {\n                    app.hideChat();\n                    return false;\n                }\n            });\n\n            $('#nameinput').keypress(function(event) {\n                var $name = $('#nameinput'),\n                    name = $name.attr('value');\n\n                if(event.keyCode === 13) {\n                    if(name !== '') {\n                        app.tryStartingGame(name, function() {\n                            $name.blur(); // exit keyboard on mobile\n                        });\n                        return false; // prevent form submit\n                    } else {\n                        return false; // prevent form submit\n                    }\n                }\n            });\n            \n            $('#mutebutton').click(function() {\n                game.audioManager.toggle();\n            });\n            \n            $(document).bind(\"keydown\", function(e) {\n            \tvar key = e.which,\n            \t    $chat = $('#chatinput');\n\n                if($('#chatinput:focus').size() == 0 && $('#nameinput:focus').size() == 0) {\n                    if(key === 13) { // Enter\n                        if(game.ready) {\n                            $chat.focus();\n                            return false;\n                        }\n                    }\n                    if(key === 32) { // Space\n                        // game.togglePathingGrid();\n                        return false;\n                    }\n                    if(key === 70) { // F\n                        // game.toggleDebugInfo();\n                        return false;\n                    }\n                    if(key === 27) { // ESC\n                        app.hideWindows();\n                        _.each(game.player.attackers, function(attacker) {\n                            attacker.stop();\n                        });\n                        return false;\n                    }\n                    if(key === 65) { // a\n                        // game.player.hit();\n                        return false;\n                    }\n                } else {\n                    if(key === 13 && game.ready) {\n                        $chat.focus();\n                        return false;\n                    }\n                }\n            });\n            \n            if(game.renderer.tablet) {\n                $('body').addClass('tablet');\n            }\n        });\n    };\n    \n    initApp();\n});\n"
  },
  {
    "path": "client/js/map.js",
    "content": "\ndefine(['jquery', 'area'], function($, Area) {\n    \n    var Map = Class.extend({\n        init: function(loadMultiTilesheets, game) {\n            this.game = game;\n        \tthis.data = [];\n        \tthis.isLoaded = false;\n        \tthis.tilesetsLoaded = false;\n        \tthis.mapLoaded = false;\n        \tthis.loadMultiTilesheets = loadMultiTilesheets;\n        \t\n        \tvar useWorker = !(this.game.renderer.mobile || this.game.renderer.tablet);\n\n        \tthis._loadMap(useWorker);\n        \tthis._initTilesets();\n        },\n        \n        _checkReady: function() {\n            if(this.tilesetsLoaded && this.mapLoaded) {\n                this.isLoaded = true;\n                if(this.ready_func) {\n        \t    \tthis.ready_func();\n        \t    }\n        \t}\n        },\n\n        _loadMap: function(useWorker) {\n        \tvar self = this,\n        \t    filepath = \"maps/world_client.json\";\n        \t\n        \tif(useWorker) {\n        \t    log.info(\"Loading map with web worker.\");\n                var worker = new Worker('js/mapworker.js');\n                worker.postMessage(1);\n            \n                worker.onmessage = function(event) {\n                    var map = event.data;\n                    self._initMap(map);\n                    self.grid = map.grid;\n                    self.plateauGrid = map.plateauGrid;\n                    self.mapLoaded = true;\n                    self._checkReady();\n                };\n            } else {\n                log.info(\"Loading map via Ajax.\");\n                $.get(filepath, function (data) {\n                    self._initMap(data);\n                    self._generateCollisionGrid();\n                    self._generatePlateauGrid();\n                    self.mapLoaded = true;\n                    self._checkReady();\n                }, 'json');\n            }        \n        },\n        \n        _initTilesets: function() {\n            var tileset1, tileset2, tileset3;\n            \n            if(!this.loadMultiTilesheets) {\n                this.tilesetCount = 1;\n                tileset1 = this._loadTileset('img/1/tilesheet.png');\n            } else {\n                if(this.game.renderer.mobile || this.game.renderer.tablet) {\n                    this.tilesetCount = 1;\n                    tileset2 = this._loadTileset('img/2/tilesheet.png');\n                } else {\n                    this.tilesetCount = 2;\n                    tileset2 = this._loadTileset('img/2/tilesheet.png');\n                    tileset3 = this._loadTileset('img/3/tilesheet.png');\n                }\n            }\n        \n            this.tilesets = [tileset1, tileset2, tileset3];\n        },\n\n        _initMap: function(map) {\n            this.width = map.width;\n            this.height = map.height;\n            this.tilesize = map.tilesize;\n            this.data = map.data;\n            this.blocking = map.blocking || [];\n            this.plateau = map.plateau || [];\n            this.musicAreas = map.musicAreas || [];\n            this.collisions = map.collisions;\n            this.high = map.high;\n            this.animated = map.animated;\n            \n            this.doors = this._getDoors(map);\n            this.checkpoints = this._getCheckpoints(map);\n        },\n    \n        _getDoors: function(map) {\n            var doors = {},\n                self = this;\n\n            _.each(map.doors, function(door) {\n                var o;\n                \n                switch(door.to) {\n                    case 'u': o = Types.Orientations.UP;\n                        break;\n                    case 'd': o = Types.Orientations.DOWN;\n                        break;\n                    case 'l': o = Types.Orientations.LEFT;\n                        break;\n                    case 'r': o = Types.Orientations.RIGHT;\n                        break;\n                    default : o = Types.Orientations.DOWN;\n                }\n                \n                doors[self.GridPositionToTileIndex(door.x, door.y)] = {\n                    x: door.tx,\n                    y: door.ty,\n                    orientation: o,\n                    cameraX: door.tcx,\n                    cameraY: door.tcy,\n                    portal: door.p === 1,\n                };\n            });\n        \n            return doors;\n        },\n\n        _loadTileset: function(filepath) {\n        \tvar self = this;\n    \t    var tileset = new Image();\n    \t\n        \ttileset.src = filepath;\n    \n            log.info(\"Loading tileset: \"+filepath);\n    \n        \ttileset.onload = function() {\n                if(tileset.width % self.tilesize > 0) {\n                    throw Error(\"Tileset size should be a multiple of \"+ self.tilesize);\n                }\n                log.info(\"Map tileset loaded.\");\n            \n                self.tilesetCount -= 1;\n                if(self.tilesetCount === 0) {\n                    log.debug(\"All map tilesets loaded.\")\n                    \n            \t\tself.tilesetsLoaded = true;\n            \t\tself._checkReady();\n            \t}\n        \t};\n    \t\n        \treturn tileset;\n        },\n\n        ready: function(f) {\n        \tthis.ready_func = f;\n        },\n\n        tileIndexToGridPosition: function(tileNum) {\n            var x = 0,\n                y = 0;\n        \n            var getX = function(num, w) {\n                if(num == 0) {\n                    return 0;\n                }\n                return (num % w == 0) ? w - 1 : (num % w) - 1;\n            }\n    \n            tileNum -= 1;\n            x = getX(tileNum + 1, this.width);\n            y = Math.floor(tileNum / this.width);\n    \n            return { x: x, y: y };\n        },\n\n        GridPositionToTileIndex: function(x, y) {\n            return (y * this.width) + x + 1;\n        },\n\n        isColliding: function(x, y) { \n            if(this.isOutOfBounds(x, y) || !this.grid) {\n                return false;\n            }\n            return (this.grid[y][x] === 1);\n        },\n    \n        isPlateau: function(x, y) { \n            if(this.isOutOfBounds(x, y) || !this.plateauGrid) {\n                return false;\n            }\n            return (this.plateauGrid[y][x] === 1);\n        },\n        \n        _generateCollisionGrid: function() {\n            var tileIndex = 0,\n                self = this;\n\n            this.grid = [];\n            for(var\tj, i = 0; i < this.height; i++) {\n                this.grid[i] = [];\n                for(j = 0; j < this.width; j++) {\n                    this.grid[i][j] = 0;\n                }\n            }\n\n            _.each(this.collisions, function(tileIndex) {\n                var pos = self.tileIndexToGridPosition(tileIndex+1);\n                self.grid[pos.y][pos.x] = 1;\n            });\n\n            _.each(this.blocking, function(tileIndex) {\n                var pos = self.tileIndexToGridPosition(tileIndex+1);\n                if(self.grid[pos.y] !== undefined) {\n                    self.grid[pos.y][pos.x] = 1;\n                }\n            });\n            log.info(\"Collision grid generated.\");\n        },\n\n        _generatePlateauGrid: function() {\n            var tileIndex = 0;\n\n            this.plateauGrid = [];\n            for(var\tj, i = 0; i < this.height; i++) {\n                this.plateauGrid[i] = [];\n                for(j = 0; j < this.width; j++) {\n                    if(_.include(this.plateau, tileIndex)) {\n                        this.plateauGrid[i][j] = 1;\n                    } else {\n                        this.plateauGrid[i][j] = 0;\n                    }\n                    tileIndex += 1;\n                }\n            }\n            log.info(\"Plateau grid generated.\");\n        },\n    \n        /**\n         * Returns true if the given position is located within the dimensions of the map.\n         *\n         * @returns {Boolean} Whether the position is out of bounds.\n         */\n        isOutOfBounds: function(x, y) {\n            return isInt(x) && isInt(y) && (x < 0 || x >= this.width || y < 0 || y >= this.height);\n        },\n    \n        /**\n         * Returns true if the given tile id is \"high\", i.e. above all entities.\n         * Used by the renderer to know which tiles to draw after all the entities \n         * have been drawn.\n         *\n         * @param {Number} id The tile id in the tileset\n         * @see Renderer.drawHighTiles\n         */\n        isHighTile: function(id) {\n            return _.indexOf(this.high, id+1) >= 0;\n        },\n    \n        /**\n         * Returns true if the tile is animated. Used by the renderer.\n         * @param {Number} id The tile id in the tileset\n         */\n        isAnimatedTile: function(id) {\n            return id+1 in this.animated;\n        },\n    \n        /**\n         * \n         */\n        getTileAnimationLength: function(id) {\n            return this.animated[id+1].l;\n        },\n    \n        /**\n         * \n         */\n        getTileAnimationDelay: function(id) {\n            var animProperties = this.animated[id+1];\n            if(animProperties.d) {\n                return animProperties.d;\n            } else {\n                return 100;\n            }\n        },\n    \n        isDoor: function(x, y) {\n            return this.doors[this.GridPositionToTileIndex(x, y)] !== undefined;\n        },\n    \n        getDoorDestination: function(x, y) {\n            return this.doors[this.GridPositionToTileIndex(x, y)];\n        },\n\n        _getCheckpoints: function(map) {\n            var checkpoints = [];\n            _.each(map.checkpoints, function(cp) {\n                var area = new Area(cp.x, cp.y, cp.w, cp.h);\n                area.id = cp.id;\n                checkpoints.push(area);\n            });\n            return checkpoints;\n        },\n    \n        getCurrentCheckpoint: function(entity) {\n            return _.detect(this.checkpoints, function(checkpoint) {\n                return checkpoint.contains(entity);\n            });\n        }\n    });\n    \n    return Map;\n});\n"
  },
  {
    "path": "client/js/mapworker.js",
    "content": "\nimportScripts('../maps/world_client.js', 'lib/underscore.min.js');\n\nonmessage = function (event) {\n    generateCollisionGrid();\n    generatePlateauGrid();\n    \n    postMessage(mapData);\n};\n\nfunction generateCollisionGrid() {\n    var tileIndex = 0;\n\n    mapData.grid = [];\n    for(var\tj, i = 0; i < mapData.height; i++) {\n        mapData.grid[i] = [];\n        for(j = 0; j < mapData.width; j++) {\n            mapData.grid[i][j] = 0;\n        }\n    }\n\n    _.each(mapData.collisions, function(tileIndex) {\n        var pos = tileIndexToGridPosition(tileIndex+1);\n        mapData.grid[pos.y][pos.x] = 1;\n    });\n    \n    _.each(mapData.blocking, function(tileIndex) {\n        var pos = tileIndexToGridPosition(tileIndex+1);\n        if(mapData.grid[pos.y] !== undefined) {\n            mapData.grid[pos.y][pos.x] = 1;\n        }\n    });\n}\n\nfunction generatePlateauGrid() {\n    var tileIndex = 0;\n\n    mapData.plateauGrid = [];\n    for(var\tj, i = 0; i < mapData.height; i++) {\n        mapData.plateauGrid[i] = [];\n        for(j = 0; j < mapData.width; j++) {\n            if(_.include(mapData.plateau, tileIndex)) {\n                mapData.plateauGrid[i][j] = 1;\n            } else {\n                mapData.plateauGrid[i][j] = 0;\n            }\n            tileIndex += 1;\n        }\n    }\n}\n\nfunction tileIndexToGridPosition(tileNum) {\n    var x = 0,\n        y = 0;\n\n    var getX = function(num, w) {\n        if(num == 0) {\n            return 0;\n        }\n        return (num % w == 0) ? w - 1 : (num % w) - 1;\n    }\n\n    tileNum -= 1;\n    x = getX(tileNum + 1, mapData.width);\n    y = Math.floor(tileNum / mapData.width);\n\n    return { x: x, y: y };\n}\n"
  },
  {
    "path": "client/js/mob.js",
    "content": "\ndefine(['character'], function(Character) {\n    \n    var Mob = Character.extend({\n        init: function(id, kind) {\n            this._super(id, kind);\n        \n            this.aggroRange = 1;\n            this.isAggressive = true;\n        }\n    });\n    \n    return Mob;\n});"
  },
  {
    "path": "client/js/mobs.js",
    "content": "\ndefine(['mob', 'timer'], function(Mob, Timer) {\n\n    var Mobs = {\n        Rat: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.RAT);\n                this.moveSpeed = 350;\n                this.idleSpeed = 700;\n                this.shadowOffsetY = -2;\n                this.isAggressive = false;\n            }\n        }),\n\n        Skeleton: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.SKELETON);\n                this.moveSpeed = 350;\n                this.atkSpeed = 100;\n                this.idleSpeed = 800;\n                this.shadowOffsetY = 1;\n                this.setAttackRate(1300);\n            }\n        }),\n\n        Skeleton2: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.SKELETON2);\n                this.moveSpeed = 200;\n                this.atkSpeed = 100;\n                this.idleSpeed = 800;\n                this.walkSpeed = 200;\n                this.shadowOffsetY = 1;\n                this.setAttackRate(1300);\n            }\n        }),\n\n        Spectre: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.SPECTRE);\n                this.moveSpeed = 150;\n                this.atkSpeed = 50;\n                this.idleSpeed = 200;\n                this.walkSpeed = 200;\n                this.shadowOffsetY = 1;\n                this.setAttackRate(900);\n            }\n        }),\n        \n        Deathknight: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.DEATHKNIGHT);\n                this.atkSpeed = 50;\n        \t\tthis.moveSpeed = 220;\n        \t\tthis.walkSpeed = 100;\n        \t\tthis.idleSpeed = 450;\n        \t\tthis.setAttackRate(800);\n        \t\tthis.aggroRange = 3;\n            },\n            \n            idle: function(orientation) {\n                if(!this.hasTarget()) {\n                    this._super(Types.Orientations.DOWN);\n                } else {\n                    this._super(orientation);\n                }\n            }\n        }),\n\n        Goblin: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.GOBLIN);\n                this.moveSpeed = 150;\n                this.atkSpeed = 60;\n                this.idleSpeed = 600;\n                this.setAttackRate(700);\n            }\n        }),\n\n        Ogre: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.OGRE);\n                this.moveSpeed = 300;\n                this.atkSpeed = 100;\n                this.idleSpeed = 600;\n            }\n        }),\n\n        Crab: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.CRAB);\n                this.moveSpeed = 200;\n                this.atkSpeed = 40;\n                this.idleSpeed = 500;\n            }\n        }),\n\n        Snake: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.SNAKE);\n                this.moveSpeed = 200;\n                this.atkSpeed = 40;\n                this.idleSpeed = 250;\n                this.walkSpeed = 100;\n                this.shadowOffsetY = -4;\n            }\n        }),\n\n        Eye: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.EYE);\n                this.moveSpeed = 200;\n                this.atkSpeed = 40;\n                this.idleSpeed = 50;\n            }\n        }),\n\n        Bat: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.BAT);\n                this.moveSpeed = 120;\n                this.atkSpeed = 90;\n                this.idleSpeed = 90;\n                this.walkSpeed = 85;\n                this.isAggressive = false;\n            }\n        }),\n\n        Wizard: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.WIZARD);\n                this.moveSpeed = 200;\n                this.atkSpeed = 100;\n                this.idleSpeed = 150;\n            }\n        }),\n\n        Boss: Mob.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.BOSS);\n                this.moveSpeed = 300;\n                this.atkSpeed = 50;\n                this.idleSpeed = 400;\n                this.atkRate = 2000;\n                this.attackCooldown = new Timer(this.atkRate);\n        \t\tthis.aggroRange = 3;\n            },\n            \n            idle: function(orientation) {\n                if(!this.hasTarget()) {\n                    this._super(Types.Orientations.DOWN);\n                } else {\n                    this._super(orientation);\n                }\n            }\n        })\n    };\n\n    return Mobs;\n});\n"
  },
  {
    "path": "client/js/npc.js",
    "content": "\ndefine(['character'], function(Character) {\n\n    var NpcTalk = {\n        \"guard\": [\n            \"Hello there\",\n            \"We don't need to see your identification\",\n            \"You are not the player we're looking for\",\n            \"Move along, move along...\"\n        ],\n    \n        \"king\": [\n            \"Hi, I'm the King\",\n            \"I run this place\",\n            \"Like a boss\",\n            \"I talk to people\",\n            \"Like a boss\",\n            \"I wear a crown\",\n            \"Like a boss\",\n            \"I do nothing all day\",\n            \"Like a boss\",\n            \"Now leave me alone\",\n            \"Like a boss\"\n        ],\n    \n        \"villagegirl\": [\n            \"Hi there, adventurer!\",\n            \"How do you like this game?\",\n            \"It's all happening in a single web page! Isn't it crazy?\",\n            \"It's all made possible thanks to WebSockets.\",\n            \"I don't know much about it, after all I'm just a program.\",\n            'Why don&#x27;t you read this <a target=\"_blank\" href=\"http://hacks.mozilla.org/2012/03/browserquest/\">blog post</a> and learn all about it?'\n        ],\n    \n        \"villager\": [\n            \"Howdy stranger. Do you like poetry?\",\n            \"Roses are red, violets are blue...\",\n            \"I like hunting rats, and so do you...\",\n            \"The rats are dead, now what to do?\",\n            \"To be honest, I have no clue.\",\n            \"Maybe the forest, could interest you...\",\n            \"or instead, cook a rat stew.\"\n        ],\n    \n        \"agent\": [\n            \"Do not try to bend the sword\",\n            \"That's impossible\",\n            \"Instead, only try to realize the truth...\",\n            \"There is no sword.\"\n        ],\n    \n        \"rick\": [\n            \"We're no strangers to love\",\n            \"You know the rules and so do I\",\n            \"A full commitment's what I'm thinking of\",\n            \"You wouldn't get this from any other guy\",\n            \"I just wanna tell you how I'm feeling\",\n            \"Gotta make you understand\",\n            \"Never gonna give you up\",\n            \"Never gonna let you down\",\n            \"Never gonna run around and desert you\",\n            \"Never gonna make you cry\",\n            \"Never gonna say goodbye\",\n            \"Never gonna tell a lie and hurt you\"\n        ],\n        \n        \"scientist\": [\n            \"Greetings.\",\n            \"I am the inventor of these two potions.\",\n            \"The red one will replenish your health points...\",\n            \"The orange one will turn you into a firefox and make you invincible...\",\n            \"But it only lasts for a short while.\",\n            \"So make good use of it!\",\n            \"Now if you'll excuse me, I need to get back to my experiments...\"\n        ],\n    \n        \"nyan\": [\n            \"nyan nyan nyan nyan nyan\",\n            \"nyan nyan nyan nyan nyan nyan nyan\",\n            \"nyan nyan nyan nyan nyan nyan\",\n            \"nyan nyan nyan nyan nyan nyan nyan nyan\"\n        ],\n        \n        \"beachnpc\": [\n            \"lorem ipsum dolor sit amet\",\n            \"consectetur adipisicing elit, sed do eiusmod tempor\"\n        ],\n        \n        \"forestnpc\": [\n            \"lorem ipsum dolor sit amet\",\n            \"consectetur adipisicing elit, sed do eiusmod tempor\"\n        ],\n        \n        \"desertnpc\": [\n            \"lorem ipsum dolor sit amet\",\n            \"consectetur adipisicing elit, sed do eiusmod tempor\"\n        ],\n        \n        \"lavanpc\": [\n            \"lorem ipsum dolor sit amet\",\n            \"consectetur adipisicing elit, sed do eiusmod tempor\"\n        ],\n    \n        \"priest\": [\n            \"Oh, hello, young man.\",\n            \"Wisdom is everything, so I'll share a few guidelines with you.\",\n            \"You are free to go wherever you like in this world\",\n            \"but beware of the many foes that await you.\",\n            \"You can find many weapons and armors by killing enemies.\",\n            \"The tougher the enemy, the higher the potential rewards.\",\n            \"You can also unlock achievements by exploring and hunting.\",\n            \"Click on the small cup icon to see a list of all the achievements.\",\n            \"Please stay a while and enjoy the many surprises of BrowserQuest\",\n            \"Farewell, young friend.\"\n        ],\n        \n        \"sorcerer\": [\n            \"Ah... I had foreseen you would come to see me.\",\n            \"Well? How do you like my new staff?\",\n            \"Pretty cool, eh?\",\n            \"Where did I get it, you ask?\",\n            \"I understand. It's easy to get envious.\",\n            \"I actually crafted it myself, using my mad wizard skills.\",\n            \"But let me tell you one thing...\",\n            \"There are lots of items in this game.\",\n            \"Some more powerful than others.\",\n            \"In order to find them, exploration is key.\",\n            \"Good luck.\"\n        ],\n        \n        \"octocat\": [\n            \"Welcome to BrowserQuest!\",\n            \"Want to see the source code?\",\n            'Check out <a target=\"_blank\" href=\"http://github.com/mozilla/BrowserQuest\">the repository on GitHub</a>'\n        ],\n        \n        \"coder\": [\n            \"Hi! Do you know that you can also play BrowserQuest on your tablet or mobile?\",\n            \"That's the beauty of HTML5!\",\n            \"Give it a try...\"\n        ],\n    \n        \"beachnpc\": [\n            \"Don't mind me, I'm just here on vacation.\",\n            \"I have to say...\",\n            \"These giant crabs are somewhat annoying.\",\n            \"Could you please get rid of them for me?\"\n        ],\n        \n        \"desertnpc\": [\n            \"One does not simply walk into these mountains...\",\n            \"An ancient undead lord is said to dwell here.\",\n            \"Nobody knows exactly what he looks like...\",\n            \"...for none has lived to tell the tale.\",\n            \"It's not too late to turn around and go home, kid.\"\n        ],\n    \n        \"othernpc\": [\n            \"lorem ipsum\",\n            \"lorem ipsum\"\n        ]\n    };\n\n    var Npc = Character.extend({\n        init: function(id, kind) {\n            this._super(id, kind, 1);\n            this.itemKind = Types.getKindAsString(this.kind);\n            this.talkCount = NpcTalk[this.itemKind].length;\n            this.talkIndex = 0;\n        },\n    \n        talk: function() {\n            var msg = null;\n        \n            if(this.talkIndex > this.talkCount) {\n                this.talkIndex = 0;\n            }\n            if(this.talkIndex < this.talkCount) {\n                msg = NpcTalk[this.itemKind][this.talkIndex];\n            }\n            this.talkIndex += 1;\n            \n            return msg;\n        }\n    });\n    \n    return Npc;\n});"
  },
  {
    "path": "client/js/npcs.js",
    "content": "\ndefine(['npc'], function(Npc) {\n\n    var NPCs = {\n\n        Guard: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.GUARD, 1);\n            }\n        }),\n\n        King: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.KING, 1);\n            }\n        }),\n\n        Agent: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.AGENT, 1);\n            }\n        }),\n\n        Rick: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.RICK, 1);\n            }\n        }),\n\n        VillageGirl: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.VILLAGEGIRL, 1);\n            }\n        }),\n\n        Villager: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.VILLAGER, 1);\n            }\n        }),\n        \n        Coder: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.CODER, 1);\n            }\n        }),\n\n        Scientist: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.SCIENTIST, 1);\n            }\n        }),\n\n        Nyan: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.NYAN, 1);\n                this.idleSpeed = 50;\n            }\n        }),\n        \n        Sorcerer: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.SORCERER, 1);\n                this.idleSpeed = 150;\n            }\n        }),\n\n        Priest: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.PRIEST, 1);\n            }\n        }),\n        \n        BeachNpc: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.BEACHNPC, 1);\n            }\n        }),\n        \n        ForestNpc: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.FORESTNPC, 1);\n            }\n        }),\n\n        DesertNpc: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.DESERTNPC, 1);\n            }\n        }),\n\n        LavaNpc: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.LAVANPC, 1);\n            }\n        }),\n\n        Octocat: Npc.extend({\n            init: function(id) {\n                this._super(id, Types.Entities.OCTOCAT, 1);\n            }\n        })\n    };\n    \n    return NPCs;\n});\n"
  },
  {
    "path": "client/js/pathfinder.js",
    "content": "\ndefine(['lib/astar'], function(AStar) {\n\n    var Pathfinder = Class.extend({\n        init: function(width, height) {\n            this.width = width;\n            this.height = height;\n            this.grid = null;\n            this.blankGrid = [];\n            this.initBlankGrid_();\n            this.ignored = [];\n        },\n    \n        initBlankGrid_: function() {\n            for(var i=0; i < this.height; i += 1) {\n                this.blankGrid[i] = [];\n                for(var j=0; j < this.width; j += 1) {\n                    this.blankGrid[i][j] = 0;\n                }\n            }\n        },\n    \n        findPath: function(grid, entity, x, y, findIncomplete) {\n            var start = [entity.gridX, entity.gridY],\n        \t\tend = [x, y],\n        \t\tpath;\n\n            this.grid = grid;\n        \tthis.applyIgnoreList_(true);\n            path = AStar(this.grid, start, end);\n        \n            if(path.length === 0 && findIncomplete === true) {\n                // If no path was found, try and find an incomplete one\n                // to at least get closer to destination.\n                path = this.findIncompletePath_(start, end);\n            }\n        \n            return path;\n        },\n    \n        /**\n         * Finds a path which leads the closest possible to an unreachable x, y position.\n         *\n         * Whenever A* returns an empty path, it means that the destination tile is unreachable.\n         * We would like the entities to move the closest possible to it though, instead of\n         * staying where they are without moving at all. That's why we have this function which\n         * returns an incomplete path to the chosen destination.\n         *\n         * @private\n         * @returns {Array} The incomplete path towards the end position\n         */\n        findIncompletePath_: function(start, end) {\n            var perfect, x, y,\n                incomplete = [];\n\n            perfect = AStar(this.blankGrid, start, end);\n        \n            for(var i=perfect.length-1; i > 0; i -= 1) {\n                x = perfect[i][0];\n                y = perfect[i][1];\n            \n                if(this.grid[y][x] === 0) {\n                    incomplete = AStar(this.grid, start, [x, y]);\n                    break;\n                }\n            }\n            return incomplete;\n        },\n    \n        /**\n         * Removes colliding tiles corresponding to the given entity's position in the pathing grid.\n         */\n        ignoreEntity: function(entity) {\n            if(entity) {\n                this.ignored.push(entity);\n            }\n        },\n\n        applyIgnoreList_: function(ignored) {\n            var self = this,\n                x, y, g;\n\n            _.each(this.ignored, function(entity) {\n                x = entity.isMoving() ? entity.nextGridX : entity.gridX;\n                y = entity.isMoving() ? entity.nextGridY : entity.gridY;\n\n                if(x >= 0 && y >= 0) {\n                    self.grid[y][x] = ignored ? 0 : 1;\n                }\n            });\n        },\n    \n        clearIgnoreList: function() {\n            this.applyIgnoreList_(false);\n            this.ignored = [];\n        }\n    });\n    \n    return Pathfinder;\n});\n"
  },
  {
    "path": "client/js/player.js",
    "content": "\ndefine(['character', 'exceptions'], function(Character, Exceptions) {\n\n    var Player = Character.extend({\n        MAX_LEVEL: 10,\n    \n        init: function(id, name, kind) {\n            this._super(id, kind);\n        \n            this.name = name;\n        \n            // Renderer\n     \t\tthis.nameOffsetY = -10;\n        \n            // sprites\n            this.spriteName = \"clotharmor\";\n            this.weaponName = \"sword1\";\n        \n            // modes\n            this.isLootMoving = false;\n            this.isSwitchingWeapon = true;\n        },\n    \n        loot: function(item) {\n            if(item) {\n                var rank, currentRank, msg, currentArmorName;\n            \n                if(this.currentArmorSprite) {\n                    currentArmorName = this.currentArmorSprite.name;\n                } else {\n                    currentArmorName = this.spriteName;\n                }\n\n                if(item.type === \"armor\") {\n                    rank = Types.getArmorRank(item.kind);\n                    currentRank = Types.getArmorRank(Types.getKindFromString(currentArmorName));\n                    msg = \"You are wearing a better armor\";\n                } else if(item.type === \"weapon\") {\n                    rank = Types.getWeaponRank(item.kind);\n                    currentRank = Types.getWeaponRank(Types.getKindFromString(this.weaponName));\n                    msg = \"You are wielding a better weapon\";\n                }\n\n                if(rank && currentRank) {\n                    if(rank === currentRank) {\n                        throw new Exceptions.LootException(\"You already have this \"+item.type);\n                    } else if(rank <= currentRank) {\n                        throw new Exceptions.LootException(msg);\n                    }\n                }\n            \n                log.info('Player '+this.id+' has looted '+item.id);\n                if(Types.isArmor(item.kind) && this.invincible) {\n                    this.stopInvincibility();\n                }\n                item.onLoot(this);\n            }\n        },\n    \n        /**\n         * Returns true if the character is currently walking towards an item in order to loot it.\n         */\n        isMovingToLoot: function() {\n            return this.isLootMoving;\n        },\n    \n        getSpriteName: function() {\n            return this.spriteName;\n        },\n    \n        setSpriteName: function(name) {\n            this.spriteName = name;\n        },\n        \n        getArmorName: function() {\n            var sprite = this.getArmorSprite();\n            return sprite.id;\n        },\n        \n        getArmorSprite: function() {\n            if(this.invincible) {\n                return this.currentArmorSprite;\n            } else {\n                return this.sprite;\n            }\n        },\n    \n        getWeaponName: function() {\n            return this.weaponName;\n        },\n    \n        setWeaponName: function(name) {\n            this.weaponName = name;\n        },\n    \n        hasWeapon: function() {\n            return this.weaponName !== null;\n        },\n    \n        switchWeapon: function(newWeaponName) {\n            var count = 14, \n                value = false, \n                self = this;\n        \n            var toggle = function() {\n                value = !value;\n                return value;\n            };\n        \n            if(newWeaponName !== this.getWeaponName()) {\n                if(this.isSwitchingWeapon) {\n                    clearInterval(blanking);\n                }\n            \n                this.switchingWeapon = true;\n                var blanking = setInterval(function() {\n                    if(toggle()) {\n                        self.setWeaponName(newWeaponName);\n                    } else {\n                        self.setWeaponName(null);\n                    }\n\n                    count -= 1;\n                    if(count === 1) {\n                        clearInterval(blanking);\n                        self.switchingWeapon = false;\n                    \n                        if(self.switch_callback) {\n                            self.switch_callback();\n                        }\n                    }\n                }, 90);\n            }\n        },\n    \n        switchArmor: function(newArmorSprite) {\n            var count = 14, \n                value = false, \n                self = this;\n        \n            var toggle = function() {\n                value = !value;\n                return value;\n            };\n        \n            if(newArmorSprite && newArmorSprite.id !== this.getSpriteName()) {\n                if(this.isSwitchingArmor) {\n                    clearInterval(blanking);\n                }\n            \n                this.isSwitchingArmor = true;\n                self.setSprite(newArmorSprite);\n                self.setSpriteName(newArmorSprite.id);\n                var blanking = setInterval(function() {\n                    self.setVisible(toggle());\n\n                    count -= 1;\n                    if(count === 1) {\n                        clearInterval(blanking);\n                        self.isSwitchingArmor = false;\n                    \n                        if(self.switch_callback) {\n                            self.switch_callback();\n                        }\n                    }\n                }, 90);\n            }\n        },\n        \n        onArmorLoot: function(callback) {\n            this.armorloot_callback = callback;\n        },\n    \n        onSwitchItem: function(callback) {\n            this.switch_callback = callback;\n        },\n        \n        onInvincible: function(callback) {\n            this.invincible_callback = callback;\n        },\n\n        startInvincibility: function() {\n            var self = this;\n        \n            if(!this.invincible) {\n                this.currentArmorSprite = this.getSprite();\n                this.invincible = true;\n                this.invincible_callback();      \n            } else {\n                // If the player already has invincibility, just reset its duration.\n                if(this.invincibleTimeout) {\n                    clearTimeout(this.invincibleTimeout);\n                }\n            }\n        \n            this.invincibleTimeout = setTimeout(function() {\n                self.stopInvincibility();\n                self.idle();\n            }, 15000);\n        },\n    \n        stopInvincibility: function() {\n            this.invincible_callback();\n            this.invincible = false;\n        \n            if(this.currentArmorSprite) {\n                this.setSprite(this.currentArmorSprite);\n                this.setSpriteName(this.currentArmorSprite.id);\n                this.currentArmorSprite = null;\n            }\n            if(this.invincibleTimeout) {\n                clearTimeout(this.invincibleTimeout);\n            }\n        }\n    });\n\n    return Player;\n});"
  },
  {
    "path": "client/js/renderer.js",
    "content": "\ndefine(['camera', 'item', 'character', 'player', 'timer'], \nfunction(Camera, Item, Character, Player, Timer) {\n\n    var Renderer = Class.extend({\n        init: function(game, canvas, background, foreground) {\n            this.game = game;\n            this.context = (canvas && canvas.getContext) ? canvas.getContext(\"2d\") : null;\n            this.background = (background && background.getContext) ? background.getContext(\"2d\") : null;\n            this.foreground = (foreground && foreground.getContext) ? foreground.getContext(\"2d\") : null;\n        \n            this.canvas = canvas;\n            this.backcanvas = background;\n            this.forecanvas = foreground;\n\n            this.initFPS();\n            this.tilesize = 16;\n        \n            this.upscaledRendering = this.context.mozImageSmoothingEnabled !== undefined;\n            this.supportsSilhouettes = this.upscaledRendering;\n        \n            this.rescale(this.getScaleFactor());\n        \n            this.lastTime = new Date();\n            this.frameCount = 0;\n            this.maxFPS = this.FPS;\n            this.realFPS = 0;\n            this.isDebugInfoVisible = false;\n        \n            this.animatedTileCount = 0;\n            this.highTileCount = 0;\n        \n            this.tablet = Detect.isTablet(window.innerWidth);\n            \n            this.fixFlickeringTimer = new Timer(100);\n        },\n    \n        getWidth: function() {\n            return this.canvas.width;\n        },\n    \n        getHeight: function() {\n            return this.canvas.height;\n        },\n    \n        setTileset: function(tileset) {\n            this.tileset = tileset;\n        },\n    \n        getScaleFactor: function() {\n            var w = window.innerWidth,\n                h = window.innerHeight,\n                scale;\n        \n            this.mobile = false;\n        \n            if(w <= 1000) {\n                scale = 2;\n                this.mobile = true;\n            }\n            else if(w <= 1500 || h <= 870) {\n                scale = 2;\n            }\n            else {\n                scale = 3;\n            }\n        \n            return scale;\n        },\n    \n        rescale: function(factor) {\n            this.scale = this.getScaleFactor();\n        \n            this.createCamera();\n        \n            this.context.mozImageSmoothingEnabled = false;\n            this.background.mozImageSmoothingEnabled = false;\n            this.foreground.mozImageSmoothingEnabled = false;\n        \n            this.initFont();\n            this.initFPS();\n        \n            if(!this.upscaledRendering && this.game.map && this.game.map.tilesets) {\n                this.setTileset(this.game.map.tilesets[this.scale - 1]);\n            }\n            if(this.game.renderer) {\n                this.game.setSpriteScale(this.scale);\n            }\n        },\n\n        createCamera: function() {\n            this.camera = new Camera(this);\n            this.camera.rescale();\n        \n            this.canvas.width = this.camera.gridW * this.tilesize * this.scale;\n            this.canvas.height = this.camera.gridH * this.tilesize * this.scale;\n            log.debug(\"#entities set to \"+this.canvas.width+\" x \"+this.canvas.height);\n        \n            this.backcanvas.width = this.canvas.width;\n            this.backcanvas.height = this.canvas.height;\n            log.debug(\"#background set to \"+this.backcanvas.width+\" x \"+this.backcanvas.height);\n        \n            this.forecanvas.width = this.canvas.width;\n            this.forecanvas.height = this.canvas.height;\n            log.debug(\"#foreground set to \"+this.forecanvas.width+\" x \"+this.forecanvas.height);\n        },\n    \n        initFPS: function() {\n            this.FPS = this.mobile ? 50 : 50;\n        },\n    \n        initFont: function() {\n            var fontsize;\n        \n            switch(this.scale) {\n                case 1:\n                    fontsize = 10; break;\n                case 2:\n                    fontsize = Detect.isWindows() ? 10 : 13; break;\n                case 3:\n                    fontsize = 20;\n            }\n            this.setFontSize(fontsize);\n        },\n    \n        setFontSize: function(size) {\n            var font = size+\"px GraphicPixel\";\n        \n            this.context.font = font;\n            this.background.font = font;\n        },\n\n        drawText: function(text, x, y, centered, color, strokeColor) {\n            var ctx = this.context;\n            \n            var strokeSize;\n        \n            switch(this.scale) {\n                case 1:\n                    strokeSize = 3; break;\n                case 2:\n                    strokeSize = 3; break;\n                case 3:\n                    strokeSize = 5;\n            }\n            \n            if(text && x && y) {\n                ctx.save();\n                if(centered) {\n                    ctx.textAlign = \"center\";\n                }\n                ctx.strokeStyle = strokeColor || \"#373737\";\n                ctx.lineWidth = strokeSize;\n                ctx.strokeText(text, x, y);\n                ctx.fillStyle = color || \"white\";\n                ctx.fillText(text, x, y);\n                ctx.restore();\n            }\n        },\n    \n        drawCellRect: function(x, y, color) {\n            this.context.save();\n            this.context.lineWidth = 2*this.scale;\n            this.context.strokeStyle = color;\n            this.context.translate(x+2, y+2);\n            this.context.strokeRect(0, 0, (this.tilesize * this.scale) - 4, (this.tilesize * this.scale) - 4);\n            this.context.restore();\n        },\n\n        drawCellHighlight: function(x, y, color) {\n            var s = this.scale,\n                ts = this.tilesize,\n                tx = x * ts * s,\n                ty = y * ts * s;\n        \n            this.drawCellRect(tx, ty, color);\n        },\n    \n        drawTargetCell: function() {\n            var mouse = this.game.getMouseGridPosition();\n        \n            if(this.game.targetCellVisible && !(mouse.x === this.game.selectedX && mouse.y === this.game.selectedY)) {\n                this.drawCellHighlight(mouse.x, mouse.y, this.game.targetColor);\n            }\n        },\n    \n        drawAttackTargetCell: function() {\n            var mouse = this.game.getMouseGridPosition(),\n                entity = this.game.getEntityAt(mouse.x, mouse.y),\n                s = this.scale;\n        \n            if(entity) {\n                this.drawCellRect(entity.x * s, entity.y * s, \"rgba(255, 0, 0, 0.5)\");\n            }\n        },\n    \n        drawOccupiedCells: function() {\n            var positions = this.game.entityGrid;\n        \n            if(positions) {\n                for(var i=0; i < positions.length; i += 1) {\n                    for(var j=0; j < positions[i].length; j += 1) {\n                        if(!_.isNull(positions[i][j])) {\n                            this.drawCellHighlight(i, j, \"rgba(50, 50, 255, 0.5)\");\n                        }\n                    }\n                }\n            }\n        },\n    \n        drawPathingCells: function() {\n            var grid = this.game.pathingGrid;\n        \n            if(grid && this.game.debugPathing) {\n                for(var y=0; y < grid.length; y += 1) {\n                    for(var x=0; x < grid[y].length; x += 1) {\n                        if(grid[y][x] === 1 && this.game.camera.isVisiblePosition(x, y)) {\n                            this.drawCellHighlight(x, y, \"rgba(50, 50, 255, 0.5)\");\n                        }\n                    }\n                }\n            }\n        },\n\n        drawSelectedCell: function() {\n            var sprite = this.game.cursors[\"target\"],\n                anim = this.game.targetAnimation,\n                os = this.upscaledRendering ? 1 : this.scale,\n                ds = this.upscaledRendering ? this.scale : 1;\n        \n            if(this.game.selectedCellVisible) {\n                if(this.mobile || this.tablet) {\n                    if(this.game.drawTarget) {\n                        var x = this.game.selectedX,\n                            y = this.game.selectedY;\n                        \n                        this.drawCellHighlight(this.game.selectedX, this.game.selectedY, \"rgb(51, 255, 0)\");\n                        this.lastTargetPos = { x: x,\n                                               y: y };\n                        this.game.drawTarget = false;\n                    }\n                } else {\n                    if(sprite && anim) {\n                        var\tframe = anim.currentFrame,\n                            s = this.scale,\n                            x = frame.x * os,\n                            y = frame.y * os,\n                            w = sprite.width * os,\n                            h = sprite.height * os,\n                            ts = 16,\n                            dx = this.game.selectedX * ts * s,\n                            dy = this.game.selectedY * ts * s,\n                            dw = w * ds,\n                            dh = h * ds;\n\n                        this.context.save();\n                        this.context.translate(dx, dy);\n                        this.context.drawImage(sprite.image, x, y, w, h, 0, 0, dw, dh);\n                        this.context.restore();\n                    }\n                }\n            }\n        },\n    \n        clearScaledRect: function(ctx, x, y, w, h) {\n            var s = this.scale;\n        \n            ctx.clearRect(x * s, y * s, w * s, h * s);\n        },\n\n        drawCursor: function() {\n            var mx = this.game.mouse.x,\n                my = this.game.mouse.y,\n                s = this.scale,\n                os = this.upscaledRendering ? 1 : this.scale;\n        \n            this.context.save();\n            if(this.game.currentCursor && this.game.currentCursor.isLoaded) {\n                this.context.drawImage(this.game.currentCursor.image, 0, 0, 14 * os, 14 * os, mx, my, 14*s, 14*s);\n            }\n            this.context.restore();\n        },\n\n        drawScaledImage: function(ctx, image, x, y, w, h, dx, dy) {\n            var s = this.upscaledRendering ? 1 : this.scale;\n            _.each(arguments, function(arg) {\n                if(_.isUndefined(arg) || _.isNaN(arg) || _.isNull(arg) || arg < 0) {\n                    log.error(\"x:\"+x+\" y:\"+y+\" w:\"+w+\" h:\"+h+\" dx:\"+dx+\" dy:\"+dy, true);\n                    throw Error(\"A problem occured when trying to draw on the canvas\");\n                }\n            });\n        \n            ctx.drawImage(image,\n                          x * s,\n                          y * s,\n                          w * s,\n                          h * s,\n                          dx * this.scale,\n                          dy * this.scale,\n                          w * this.scale,\n                          h * this.scale);\n        },\n\n        drawTile: function(ctx, tileid, tileset, setW, gridW, cellid) {\n            var s = this.upscaledRendering ? 1 : this.scale;\n            if(tileid !== -1) { // -1 when tile is empty in Tiled. Don't attempt to draw it.\n                this.drawScaledImage(ctx,\n                                     tileset,\n                                     getX(tileid + 1, (setW / s)) * this.tilesize,\n                                     Math.floor(tileid / (setW / s)) * this.tilesize,\n                                     this.tilesize,\n                                     this.tilesize,\n                                     getX(cellid + 1, gridW) * this.tilesize,\n                                     Math.floor(cellid / gridW) * this.tilesize);\n            }\n        },\n    \n        clearTile: function(ctx, gridW, cellid) {\n            var s = this.scale,\n                ts = this.tilesize,\n                x = getX(cellid + 1, gridW) * ts * s,\n                y = Math.floor(cellid / gridW) * ts * s,\n                w = ts * s,\n                h = w;\n        \n            ctx.clearRect(x, y, h, w);\n        },\n\n        drawEntity: function(entity) {\n            var sprite = entity.sprite,\n                shadow = this.game.shadows[\"small\"],\n                anim = entity.currentAnimation,\n                os = this.upscaledRendering ? 1 : this.scale,\n                ds = this.upscaledRendering ? this.scale : 1;\n        \n            if(anim && sprite) {\n                var\tframe = anim.currentFrame,\n                    s = this.scale,\n                    x = frame.x * os,\n                    y = frame.y * os,\n                    w = sprite.width * os,\n                    h = sprite.height * os,\n                    ox = sprite.offsetX * s,\n                    oy = sprite.offsetY * s,\n                    dx = entity.x * s,\n                    dy = entity.y * s,\n                    dw = w * ds,\n                    dh = h * ds;\n            \n                if(entity.isFading) {\n                    this.context.save();\n                    this.context.globalAlpha = entity.fadingAlpha;\n                }\n            \n                if(!this.mobile && !this.tablet) {\n                    this.drawEntityName(entity);\n                }\n            \n                this.context.save();\n                if(entity.flipSpriteX) {\n                    this.context.translate(dx + this.tilesize*s, dy);\n                    this.context.scale(-1, 1);\n                }\n                else if(entity.flipSpriteY) {\n                    this.context.translate(dx, dy + dh);\n                    this.context.scale(1, -1);\n                }\n                else {\n                    this.context.translate(dx, dy);\n                }\n            \n                if(entity.isVisible()) {\n                    if(entity.hasShadow()) {\n                        this.context.drawImage(shadow.image, 0, 0, shadow.width * os, shadow.height * os,\n                                               0,\n                                               entity.shadowOffsetY * ds,\n                                               shadow.width * os * ds, shadow.height * os * ds);\n                    }\n                \n                    this.context.drawImage(sprite.image, x, y, w, h, ox, oy, dw, dh);\n\n                    if(entity instanceof Item && entity.kind !== Types.Entities.CAKE) {\n                        var sparks = this.game.sprites[\"sparks\"],\n                            anim = this.game.sparksAnimation,\n                            frame = anim.currentFrame,\n                            sx = sparks.width * frame.index * os,\n                            sy = sparks.height * anim.row * os,\n                            sw = sparks.width * os,\n                            sh = sparks.width * os;\n\n                        this.context.drawImage(sparks.image, sx, sy, sw, sh,\n                                               sparks.offsetX * s,\n                                               sparks.offsetY * s,\n                                               sw * ds, sh * ds);\n                    }\n                }\n            \n                if(entity instanceof Character && !entity.isDead && entity.hasWeapon()) {\n                    var weapon = this.game.sprites[entity.getWeaponName()];\n        \n                    if(weapon) {\n                        var weaponAnimData = weapon.animationData[anim.name],\n                            index = frame.index < weaponAnimData.length ? frame.index : frame.index % weaponAnimData.length;\n                            wx = weapon.width * index * os,\n                            wy = weapon.height * anim.row * os,\n                            ww = weapon.width * os,\n                            wh = weapon.height * os;\n\n                        this.context.drawImage(weapon.image, wx, wy, ww, wh,\n                                               weapon.offsetX * s,\n                                               weapon.offsetY * s,\n                                               ww * ds, wh * ds);\n                    }\n                }\n            \n                this.context.restore();\n            \n                if(entity.isFading) {\n                    this.context.restore();\n                }\n            }\n        },\n\n        drawEntities: function(dirtyOnly) {\n            var self = this;\n        \n            this.game.forEachVisibleEntityByDepth(function(entity) {\n                if(entity.isLoaded) {\n                    if(dirtyOnly) {\n                        if(entity.isDirty) {\n                            self.drawEntity(entity);\n                            \n                            entity.isDirty = false;\n                            entity.oldDirtyRect = entity.dirtyRect;\n                            entity.dirtyRect = null;\n                        }\n                    } else {\n                        self.drawEntity(entity);\n                    }\n                }\n            });\n        },\n        \n        drawDirtyEntities: function() {\n            this.drawEntities(true);\n        },\n        \n        clearDirtyRect: function(r) {\n            this.context.clearRect(r.x, r.y, r.w, r.h);\n        },\n    \n        clearDirtyRects: function() {\n            var self = this,\n                count = 0;\n            \n            this.game.forEachVisibleEntityByDepth(function(entity) {\n                if(entity.isDirty && entity.oldDirtyRect) {\n                    self.clearDirtyRect(entity.oldDirtyRect);\n                    count += 1;\n                }\n            });\n            \n            this.game.forEachAnimatedTile(function(tile) {\n                if(tile.isDirty) {\n                    self.clearDirtyRect(tile.dirtyRect);\n                    count += 1;\n                }\n            });\n            \n            if(this.game.clearTarget && this.lastTargetPos) {\n                var last = this.lastTargetPos;\n                    rect = this.getTargetBoundingRect(last.x, last.y);\n                \n                this.clearDirtyRect(rect);\n                this.game.clearTarget = false;\n                count += 1;\n            }\n            \n            if(count > 0) {\n                //log.debug(\"count:\"+count);\n            }\n        },\n        \n        getEntityBoundingRect: function(entity) {\n            var rect = {},\n                s = this.scale,\n                spr;\n                \n            if(entity instanceof Player && entity.hasWeapon()) {\n                var weapon = this.game.sprites[entity.getWeaponName()];\n                spr = weapon;\n            } else {\n                spr = entity.sprite;\n            }\n    \n            if(spr) {\n                rect.x = (entity.x + spr.offsetX - this.camera.x) * s;\n                rect.y = (entity.y + spr.offsetY - this.camera.y) * s;\n                rect.w = spr.width * s;\n                rect.h = spr.height * s;\n                rect.left = rect.x;\n                rect.right = rect.x + rect.w;\n                rect.top = rect.y;\n                rect.bottom = rect.y + rect.h;\n            }\n            return rect;\n        },\n        \n        getTileBoundingRect: function(tile) {\n            var rect = {},\n                gridW = this.game.map.width,\n                s = this.scale,\n                ts = this.tilesize,\n                cellid = tile.index;\n            \n            rect.x = ((getX(cellid + 1, gridW) * ts) - this.camera.x) * s;\n            rect.y = ((Math.floor(cellid / gridW) * ts) - this.camera.y) * s;\n            rect.w = ts * s;\n            rect.h = ts * s;\n            rect.left = rect.x;\n            rect.right = rect.x + rect.w;\n            rect.top = rect.y;\n            rect.bottom = rect.y + rect.h;\n            \n            return rect;\n        },\n        \n        getTargetBoundingRect: function(x, y) {\n            var rect = {},\n                s = this.scale,\n                ts = this.tilesize,\n                tx = x || this.game.selectedX,\n                ty = y || this.game.selectedY;\n            \n            rect.x = ((tx * ts) - this.camera.x) * s;\n            rect.y = ((ty * ts) - this.camera.y) * s;\n            rect.w = ts * s;\n            rect.h = ts * s;\n            rect.left = rect.x;\n            rect.right = rect.x + rect.w;\n            rect.top = rect.y;\n            rect.bottom = rect.y + rect.h;\n            \n            return rect;\n        },\n        \n        isIntersecting: function(rect1, rect2) {\n            return !((rect2.left > rect1.right) ||\n                     (rect2.right < rect1.left) ||\n                     (rect2.top > rect1.bottom) ||\n                     (rect2.bottom < rect1.top));\n        },\n        \n        drawEntityName: function(entity) {\n            this.context.save();\n            if(entity.name && entity instanceof Player) {\n                var color = (entity.id === this.game.playerId) ? \"#fcda5c\" : \"white\";\n                this.drawText(entity.name,\n                              (entity.x + 8) * this.scale,\n                              (entity.y + entity.nameOffsetY) * this.scale,\n                              true,\n                              color);\n            }\n            this.context.restore();\n        },\n\n        drawTerrain: function() {\n            var self = this,\n                m = this.game.map,\n                tilesetwidth = this.tileset.width / m.tilesize;\n        \n            this.game.forEachVisibleTile(function (id, index) {\n                if(!m.isHighTile(id) && !m.isAnimatedTile(id)) { // Don't draw unnecessary tiles\n                    self.drawTile(self.background, id, self.tileset, tilesetwidth, m.width, index);\n                }\n            }, 1);\n        },\n    \n        drawAnimatedTiles: function(dirtyOnly) {\n            var self = this,\n                m = this.game.map,\n                tilesetwidth = this.tileset.width / m.tilesize;\n        \n            this.animatedTileCount = 0;\n            this.game.forEachAnimatedTile(function (tile) {\n                if(dirtyOnly) {\n                    if(tile.isDirty) {\n                        self.drawTile(self.context, tile.id, self.tileset, tilesetwidth, m.width, tile.index);\n                        tile.isDirty = false;\n                    }\n                } else {\n                    self.drawTile(self.context, tile.id, self.tileset, tilesetwidth, m.width, tile.index);\n                    self.animatedTileCount += 1;\n                }\n            });\n        },\n        \n        drawDirtyAnimatedTiles: function() {\n            this.drawAnimatedTiles(true);\n        },\n    \n        drawHighTiles: function(ctx) {\n            var self = this,\n                m = this.game.map,\n                tilesetwidth = this.tileset.width / m.tilesize;\n        \n            this.highTileCount = 0;\n            this.game.forEachVisibleTile(function (id, index) {\n                if(m.isHighTile(id)) {\n                    self.drawTile(ctx, id, self.tileset, tilesetwidth, m.width, index);\n                    self.highTileCount += 1;\n                }\n            }, 1);\n        },\n\n        drawBackground: function(ctx, color) {\n            ctx.fillStyle = color;\n            ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n        },\n\n        drawFPS: function() {\n            var nowTime = new Date(),\n                diffTime = nowTime.getTime() - this.lastTime.getTime();\n\n            if (diffTime >= 1000) {\n                this.realFPS = this.frameCount;\n                this.frameCount = 0;\n                this.lastTime = nowTime;\n            }\n            this.frameCount++;\n        \n            //this.drawText(\"FPS: \" + this.realFPS + \" / \" + this.maxFPS, 30, 30, false);\n            this.drawText(\"FPS: \" + this.realFPS, 30, 30, false);\n        },\n    \n        drawDebugInfo: function() {\n            if(this.isDebugInfoVisible) {\n                this.drawFPS();\n                this.drawText(\"A: \" + this.animatedTileCount, 100, 30, false);\n                this.drawText(\"H: \" + this.highTileCount, 140, 30, false);\n            }\n        },\n    \n        drawCombatInfo: function() {\n            var self = this;\n        \n            switch(this.scale) {\n                case 2: this.setFontSize(20); break;\n                case 3: this.setFontSize(30); break;\n            }\n            this.game.infoManager.forEachInfo(function(info) {\n                self.context.save();\n                self.context.globalAlpha = info.opacity;\n                self.drawText(info.value, (info.x + 8) * self.scale, Math.floor(info.y * self.scale), true, info.fillColor, info.strokeColor);\n                self.context.restore();\n            });\n            this.initFont();\n        },\n    \n        setCameraView: function(ctx) {\n            ctx.translate(-this.camera.x * this.scale, -this.camera.y * this.scale);\n        },\n    \n        clearScreen: function(ctx) {\n            ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n        },\n    \n        getPlayerImage: function() {\n            var canvas = document.createElement('canvas'),\n    \t        ctx = canvas.getContext('2d'),\n    \t        os = this.upscaledRendering ? 1 : this.scale,\n    \t        player = this.game.player,\n    \t        sprite = player.getArmorSprite(),\n    \t        spriteAnim = sprite.animationData[\"idle_down\"],\n    \t        // character\n    \t        row = spriteAnim.row,\n                w = sprite.width * os,\n                h = sprite.height * os,\n    \t        y = row * h,\n    \t        // weapon\n    \t        weapon = this.game.sprites[this.game.player.getWeaponName()],\n    \t        ww = weapon.width * os,\n    \t        wh = weapon.height * os,\n    \t        wy = wh * row,\n    \t        offsetX = (weapon.offsetX - sprite.offsetX) * os,\n    \t        offsetY = (weapon.offsetY - sprite.offsetY) * os,\n    \t        // shadow\n    \t        shadow = this.game.shadows[\"small\"],\n    \t        sw = shadow.width * os,\n    \t        sh = shadow.height * os,\n    \t        ox = -sprite.offsetX * os;\n    \t        oy = -sprite.offsetY * os;\n\t    \n    \t    canvas.width = w;\n    \t    canvas.height = h;\n\t    \n    \t    ctx.clearRect(0, 0, w, h);\n    \t    ctx.drawImage(shadow.image, 0, 0, sw, sh, ox, oy, sw, sh);\n    \t    ctx.drawImage(sprite.image, 0, y, w, h, 0, 0, w, h);\n            ctx.drawImage(weapon.image, 0, wy, ww, wh, offsetX, offsetY, ww, wh);\n        \n            return canvas.toDataURL(\"image/png\");\n        },\n    \n        renderStaticCanvases: function() {\n            this.background.save();\n                this.setCameraView(this.background);\n                this.drawTerrain();\n            this.background.restore();\n        \n            if(this.mobile || this.tablet) {\n                this.clearScreen(this.foreground);\n                this.foreground.save();\n                    this.setCameraView(this.foreground);\n                    this.drawHighTiles(this.foreground);\n                this.foreground.restore();\n            }\n        },\n\n        renderFrame: function() {\n            if(this.mobile || this.tablet) {\n                this.renderFrameMobile();\n            }\n            else {\n                this.renderFrameDesktop();\n            }\n        },\n    \n        renderFrameDesktop: function() {\n            this.clearScreen(this.context);\n        \n            this.context.save();\n                this.setCameraView(this.context);\n                this.drawAnimatedTiles();\n            \n                if(this.game.started) {\n                    this.drawSelectedCell();\n                    this.drawTargetCell();\n                }\n\n                //this.drawOccupiedCells();\n                this.drawPathingCells();\n                this.drawEntities();\n                this.drawCombatInfo();\n                this.drawHighTiles(this.context);\n            this.context.restore();\n        \n            // Overlay UI elements\n            this.drawCursor();\n            this.drawDebugInfo();\n        },\n    \n        renderFrameMobile: function() {\n            this.clearDirtyRects();\n            this.preventFlickeringBug();\n\n            this.context.save();\n                this.setCameraView(this.context);\n                \n                this.drawDirtyAnimatedTiles();\n                this.drawSelectedCell();\n                this.drawDirtyEntities();\n            this.context.restore();\n        },\n        \n        preventFlickeringBug: function() {\n            if(this.fixFlickeringTimer.isOver(this.game.currentTime)) {\n                this.background.fillRect(0, 0, 0, 0);\n                this.context.fillRect(0, 0, 0, 0);\n                this.foreground.fillRect(0, 0, 0, 0);\n            }\n        }\n    });\n\n    var getX = function(id, w) {\n        if(id == 0) {\n            return 0;\n        }\n        return (id % w == 0) ? w - 1 : (id % w) - 1;\n    };\n    \n    return Renderer;\n});\n"
  },
  {
    "path": "client/js/sprite.js",
    "content": "\ndefine(['jquery', 'animation', 'sprites'], function($, Animation, sprites) {\n\n    var Sprite = Class.extend({\n        init: function(name, scale) {\n        \tthis.name = name;\n        \tthis.scale = scale;\n        \tthis.isLoaded = false;\n        \tthis.offsetX = 0;\n        \tthis.offsetY = 0;\n            this.loadJSON(sprites[name]);\n        },\n        \n        loadJSON: function(data) {\n    \t\tthis.id = data.id;\n    \t\tthis.filepath = \"img/\" + this.scale + \"/\" + this.id + \".png\";\n    \t\tthis.animationData = data.animations;\n    \t\tthis.width = data.width;\n    \t\tthis.height = data.height;\n    \t\tthis.offsetX = (data.offset_x !== undefined) ? data.offset_x : -16;\n            this.offsetY = (data.offset_y !== undefined) ? data.offset_y : -16;\n\t\n    \t\tthis.load();\n    \t},\n\n        load: function() {\n        \tvar self = this;\n\n        \tthis.image = new Image();\n        \tthis.image.src = this.filepath;\n\n        \tthis.image.onload = function() {\n        \t\tself.isLoaded = true;\n    \t\t    \n                if(self.onload_func) {\n                    self.onload_func();\n                }\n        \t};\n        },\n    \n        createAnimations: function() {\n            var animations = {};\n        \n    \t    for(var name in this.animationData) {\n    \t        var a = this.animationData[name];\n    \t        animations[name] = new Animation(name, a.length, a.row, this.width, this.height);\n    \t    }\n\t    \n    \t    return animations;\n    \t},\n\t\n    \tcreateHurtSprite: function() {\n    \t    var canvas = document.createElement('canvas'),\n    \t        ctx = canvas.getContext('2d'),\n    \t        width = this.image.width,\n    \t\t    height = this.image.height,\n    \t        spriteData, data;\n    \n    \t    canvas.width = width;\n    \t    canvas.height = height;\n    \t    ctx.drawImage(this.image, 0, 0, width, height);\n    \t    \n    \t    try {\n        \t    spriteData = ctx.getImageData(0, 0, width, height);\n\n        \t    data = spriteData.data;\n\n        \t    for(var i=0; i < data.length; i += 4) {\n        \t        data[i] = 255;\n        \t        data[i+1] = data[i+2] = 75;\n        \t    }\n        \t    spriteData.data = data;\n\n        \t    ctx.putImageData(spriteData, 0, 0);\n\n        \t    this.whiteSprite = { \n                    image: canvas,\n            \t    isLoaded: true,\n            \t    offsetX: this.offsetX,\n            \t    offsetY: this.offsetY,\n            \t    width: this.width,\n            \t    height: this.height\n            \t};\n    \t    } catch(e) {\n    \t        log.error(\"Error getting image data for sprite : \"+this.name);\n    \t    }\n        },\n\t\n    \tgetHurtSprite: function() {\n    \t    return this.whiteSprite;\n    \t},\n\t\n    \tcreateSilhouette: function() {\n    \t    var canvas = document.createElement('canvas'),\n    \t        ctx = canvas.getContext('2d'),\n    \t        width = this.image.width,\n    \t\t    height = this.image.height,\n    \t        spriteData, finalData, data;\n\t    \n    \t    canvas.width = width;\n    \t    canvas.height = height;\n    \t    ctx.drawImage(this.image, 0, 0, width, height);\n    \t    data = ctx.getImageData(0, 0, width, height).data;\n    \t    finalData = ctx.getImageData(0, 0, width, height);\n    \t    fdata = finalData.data;\n\t    \n    \t    var getIndex = function(x, y) {\n    \t        return ((width * (y-1)) + x - 1) * 4;\n    \t    };\n\t    \n    \t    var getPosition = function(i) {\n    \t        var x, y;\n\t        \n    \t        i = (i / 4) + 1;\n    \t        x = i % width;\n    \t        y = ((i - x) / width) + 1;\n\t        \n    \t        return { x: x, y: y };\n    \t    };\n\t    \n    \t    var hasAdjacentPixel = function(i) {\n    \t        var pos = getPosition(i);\n\t        \n    \t        if(pos.x < width && !isBlankPixel(getIndex(pos.x + 1, pos.y))) {\n    \t            return true;\n    \t        }\n    \t        if(pos.x > 1 && !isBlankPixel(getIndex(pos.x - 1, pos.y))) {\n        \t        return true;\n    \t        }\n    \t        if(pos.y < height && !isBlankPixel(getIndex(pos.x, pos.y + 1))) {\n        \t        return true;\n    \t        }\n    \t        if(pos.y > 1 && !isBlankPixel(getIndex(pos.x, pos.y - 1))) {\n        \t        return true;\n    \t        }\n    \t        return false;\n    \t    };\n\t    \n    \t    var isBlankPixel = function(i) {\n    \t        if(i < 0 || i >= data.length) {\n    \t            return true;\n    \t        }\n    \t        return data[i] === 0 && data[i+1] === 0 && data[i+2] === 0 && data[i+3] === 0;\n    \t    };\n\t    \n    \t    for(var i=0; i < data.length; i += 4) {\n    \t        if(isBlankPixel(i) && hasAdjacentPixel(i)) {\n    \t            fdata[i] = fdata[i+1] = 255;\n    \t            fdata[i+2] = 150;\n    \t            fdata[i+3] = 150;\n    \t        }\n    \t    }\n\n    \t    finalData.data = fdata;\n    \t    ctx.putImageData(finalData, 0, 0);\n\t    \n    \t    this.silhouetteSprite = { \n                image: canvas,\n        \t    isLoaded: true,\n        \t    offsetX: this.offsetX,\n        \t    offsetY: this.offsetY,\n        \t    width: this.width,\n        \t    height: this.height\n        \t};\n    \t}\n    });\n\n    return Sprite;\n});"
  },
  {
    "path": "client/js/sprites.js",
    "content": "\ndefine(['text!../sprites/agent.json',\n        'text!../sprites/arrow.json',\n        'text!../sprites/axe.json',\n        'text!../sprites/bat.json',\n        'text!../sprites/beachnpc.json',\n        'text!../sprites/bluesword.json',\n        'text!../sprites/boss.json',\n        'text!../sprites/chest.json',\n        'text!../sprites/clotharmor.json',\n        'text!../sprites/coder.json',\n        'text!../sprites/crab.json',\n        'text!../sprites/death.json',\n        'text!../sprites/deathknight.json',\n        'text!../sprites/desertnpc.json',\n        'text!../sprites/eye.json',\n        'text!../sprites/firefox.json',\n        'text!../sprites/forestnpc.json',\n        'text!../sprites/goblin.json',\n        'text!../sprites/goldenarmor.json',\n        'text!../sprites/goldensword.json',\n        'text!../sprites/guard.json',\n        'text!../sprites/hand.json',\n        'text!../sprites/impact.json',\n        'text!../sprites/item-axe.json',\n        'text!../sprites/item-bluesword.json',\n        'text!../sprites/item-burger.json',\n        'text!../sprites/item-cake.json',\n        'text!../sprites/item-firepotion.json',\n        'text!../sprites/item-flask.json',\n        'text!../sprites/item-goldenarmor.json',\n        'text!../sprites/item-goldensword.json',\n        'text!../sprites/item-leatherarmor.json',\n        'text!../sprites/item-mailarmor.json',\n        'text!../sprites/item-morningstar.json',\n        'text!../sprites/item-platearmor.json',\n        'text!../sprites/item-redarmor.json',\n        'text!../sprites/item-redsword.json',\n        'text!../sprites/item-sword1.json',\n        'text!../sprites/item-sword2.json',\n        'text!../sprites/king.json',\n        'text!../sprites/lavanpc.json',\n        'text!../sprites/leatherarmor.json',\n        'text!../sprites/loot.json',\n        'text!../sprites/mailarmor.json',\n        'text!../sprites/morningstar.json',\n        'text!../sprites/nyan.json',\n        'text!../sprites/octocat.json',\n        'text!../sprites/ogre.json',\n        'text!../sprites/platearmor.json',\n        'text!../sprites/priest.json',\n        'text!../sprites/rat.json',\n        'text!../sprites/redarmor.json',\n        'text!../sprites/redsword.json',\n        'text!../sprites/rick.json',\n        'text!../sprites/scientist.json',\n        'text!../sprites/shadow16.json',\n        'text!../sprites/skeleton.json',\n        'text!../sprites/skeleton2.json',\n        'text!../sprites/snake.json',\n        'text!../sprites/sorcerer.json',\n        'text!../sprites/sparks.json',\n        'text!../sprites/spectre.json',\n        'text!../sprites/sword.json',\n        'text!../sprites/sword1.json',\n        'text!../sprites/sword2.json',\n        'text!../sprites/talk.json',\n        'text!../sprites/target.json',\n        'text!../sprites/villagegirl.json',\n        'text!../sprites/villager.json',\n        'text!../sprites/wizard.json'], function() {\n    \n    var sprites = {};\n    \n    _.each(arguments, function(spriteJson) {\n        var sprite = JSON.parse(spriteJson);\n        \n        sprites[sprite.id] = sprite;\n    });\n    \n    return sprites;\n});\n"
  },
  {
    "path": "client/js/storage.js",
    "content": "\ndefine(function() {\n\n    var Storage = Class.extend({\n        init: function() {\n            if(this.hasLocalStorage() && localStorage.data) {\n                this.data = JSON.parse(localStorage.data);\n            } else {\n                this.resetData();\n            }\n        },\n    \n        resetData: function() {\n            this.data = {\n                hasAlreadyPlayed: false,\n                player: {\n                    name: \"\",\n                    weapon: \"\",\n                    armor: \"\",\n                    image: \"\"\n                },\n                achievements: {\n                    unlocked: [],\n                    ratCount: 0,\n                    skeletonCount: 0,\n                    totalKills: 0,\n                    totalDmg: 0,\n                    totalRevives: 0\n                }\n            };\n        },\n    \n        hasLocalStorage: function() {\n            return Modernizr.localstorage;\n        },\n    \n        save: function() {\n            if(this.hasLocalStorage()) {\n                localStorage.data = JSON.stringify(this.data);\n            }\n        },\n    \n        clear: function() {\n            if(this.hasLocalStorage()) {\n                localStorage.data = \"\";\n                this.resetData();\n            }\n        },\n    \n        // Player\n    \n        hasAlreadyPlayed: function() {\n            return this.data.hasAlreadyPlayed;\n        },\n    \n        initPlayer: function(name) {\n            this.data.hasAlreadyPlayed = true;\n            this.setPlayerName(name);\n        },\n        \n        setPlayerName: function(name) {\n            this.data.player.name = name;\n            this.save();\n        },\n    \n        setPlayerImage: function(img) {\n            this.data.player.image = img;\n            this.save();\n        },\n\n        setPlayerArmor: function(armor) {\n            this.data.player.armor = armor;\n            this.save();\n        },\n    \n        setPlayerWeapon: function(weapon) {\n            this.data.player.weapon = weapon;\n            this.save();\n        },\n\n        savePlayer: function(img, armor, weapon) {\n            this.setPlayerImage(img);\n            this.setPlayerArmor(armor);\n            this.setPlayerWeapon(weapon);\n        },\n    \n        // Achievements\n    \n        hasUnlockedAchievement: function(id) {\n            return _.include(this.data.achievements.unlocked, id);\n        },\n    \n        unlockAchievement: function(id) {\n            if(!this.hasUnlockedAchievement(id)) {\n                this.data.achievements.unlocked.push(id);\n                this.save();\n                return true;\n            }\n            return false;\n        },\n    \n        getAchievementCount: function() {\n            return _.size(this.data.achievements.unlocked);\n        },\n    \n        // Angry rats\n        getRatCount: function() {\n            return this.data.achievements.ratCount;\n        },\n    \n        incrementRatCount: function() {\n            if(this.data.achievements.ratCount < 10) {\n                this.data.achievements.ratCount++;\n                this.save();\n            }\n        },\n        \n        // Skull Collector\n        getSkeletonCount: function() {\n            return this.data.achievements.skeletonCount;\n        },\n\n        incrementSkeletonCount: function() {\n            if(this.data.achievements.skeletonCount < 10) {\n                this.data.achievements.skeletonCount++;\n                this.save();\n            }\n        },\n    \n        // Meatshield\n        getTotalDamageTaken: function() {\n            return this.data.achievements.totalDmg;\n        },\n    \n        addDamage: function(damage) {\n            if(this.data.achievements.totalDmg < 5000) {\n                this.data.achievements.totalDmg += damage;\n                this.save();\n            }\n        },\n        \n        // Hunter\n        getTotalKills: function() {\n            return this.data.achievements.totalKills;\n        },\n\n        incrementTotalKills: function() {\n            if(this.data.achievements.totalKills < 50) {\n                this.data.achievements.totalKills++;\n                this.save();\n            }\n        },\n    \n        // Still Alive\n        getTotalRevives: function() {\n            return this.data.achievements.totalRevives;\n        },\n    \n        incrementRevives: function() {\n            if(this.data.achievements.totalRevives < 5) {\n                this.data.achievements.totalRevives++;\n                this.save();\n            }\n        },\n    });\n    \n    return Storage;\n});\n"
  },
  {
    "path": "client/js/text.js",
    "content": "/*\n RequireJS text 0.26.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n Available via the MIT or new BSD license.\n see: http://github.com/jrburke/requirejs for details\n*/\n(function(){var j=[\"Msxml2.XMLHTTP\",\"Microsoft.XMLHTTP\",\"Msxml2.XMLHTTP.4.0\"],l=/^\\s*<\\?xml(\\s)+version=[\\'\\\"](\\d)*.(\\d)*[\\'\\\"](\\s)*\\?>/im,m=/<body[^>]*>\\s*([\\s\\S]+)\\s*<\\/body>/im,n=typeof location!==\"undefined\"&&location.href,i=[];define(function(){var e,h,k;typeof window!==\"undefined\"&&window.navigator&&window.document?h=function(a,b){var c=e.createXhr();c.open(\"GET\",a,!0);c.onreadystatechange=function(){c.readyState===4&&b(c.responseText)};c.send(null)}:typeof process!==\"undefined\"&&process.versions&&\nprocess.versions.node?(k=require.nodeRequire(\"fs\"),h=function(a,b){b(k.readFileSync(a,\"utf8\"))}):typeof Packages!==\"undefined\"&&(h=function(a,b){var c=new java.io.File(a),g=java.lang.System.getProperty(\"line.separator\"),c=new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(c),\"utf-8\")),d,f,e=\"\";try{d=new java.lang.StringBuffer;(f=c.readLine())&&f.length()&&f.charAt(0)===65279&&(f=f.substring(1));for(d.append(f);(f=c.readLine())!==null;)d.append(g),d.append(f);e=String(d.toString())}finally{c.close()}b(e)});\nreturn e={version:\"0.26.0\",strip:function(a){if(a){var a=a.replace(l,\"\"),b=a.match(m);b&&(a=b[1])}else a=\"\";return a},jsEscape:function(a){return a.replace(/(['\\\\])/g,\"\\\\$1\").replace(/[\\f]/g,\"\\\\f\").replace(/[\\b]/g,\"\\\\b\").replace(/[\\n]/g,\"\\\\n\").replace(/[\\t]/g,\"\\\\t\").replace(/[\\r]/g,\"\\\\r\")},createXhr:function(){var a,b,c;if(typeof XMLHttpRequest!==\"undefined\")return new XMLHttpRequest;else for(b=0;b<3;b++){c=j[b];try{a=new ActiveXObject(c)}catch(e){}if(a){j=[c];break}}if(!a)throw Error(\"createXhr(): XMLHttpRequest not available\");\nreturn a},get:h,parseName:function(a){var b=!1,c=a.indexOf(\".\"),e=a.substring(0,c),a=a.substring(c+1,a.length),c=a.indexOf(\"!\");c!==-1&&(b=a.substring(c+1,a.length),b=b===\"strip\",a=a.substring(0,c));return{moduleName:e,ext:a,strip:b}},xdRegExp:/^((\\w+)\\:)?\\/\\/([^\\/\\\\]+)/,canUseXhr:function(a,b,c,g){var d=e.xdRegExp.exec(a),f;if(!d)return!0;a=d[2];d=d[3];d=d.split(\":\");f=d[1];d=d[0];return(!a||a===b)&&(!d||d===c)&&(!f&&!d||f===g)},finishLoad:function(a,b,c,g,d){c=b?e.strip(c):c;d.isBuild&&d.inlineText&&\n(i[a]=c);g(c)},load:function(a,b,c,g){var d=e.parseName(a),f=d.moduleName+\".\"+d.ext,h=b.toUrl(f);!n||e.canUseXhr(h)?e.get(h,function(b){e.finishLoad(a,d.strip,b,c,g)}):b([f],function(a){e.finishLoad(d.moduleName+\".\"+d.ext,d.strip,a,c,g)})},write:function(a,b,c){if(b in i){var g=e.jsEscape(i[b]);c(\"define('\"+a+\"!\"+b+\"', function () { return '\"+g+\"';});\\n\")}},writeFile:function(a,b,c,g,d){var b=e.parseName(b),f=b.moduleName+\".\"+b.ext,h=c.toUrl(b.moduleName+\".\"+b.ext)+\".js\";e.load(f,c,function(){e.write(a,\nf,function(a){g(h,a)},d)},d)}}})})();\n"
  },
  {
    "path": "client/js/tile.js",
    "content": "\ndefine(function() {\n    \n    var Tile = Class.extend({\n    });\n\n    var AnimatedTile = Tile.extend({\n        init: function(id, length, speed, index) {\n            this.startId = id;\n        \tthis.id = id;\n        \tthis.length = length;\n        \tthis.speed = speed;\n        \tthis.index = index;\n        \tthis.lastTime = 0;\n        },\n    \n        tick: function() {\n            if((this.id - this.startId) < this.length - 1) {\n    \t        this.id += 1;\n    \t    } else {\n    \t        this.id = this.startId;\n    \t    }\n        },\n\n        animate: function(time) {\n            if((time - this.lastTime) > this.speed) {\n        \t    this.tick();\n        \t    this.lastTime = time;\n        \t    return true;\n            } else {\n                return false;\n            }\n        }\n    });\n    \n    return AnimatedTile;\n});"
  },
  {
    "path": "client/js/timer.js",
    "content": "\ndefine(function() {\n\n    var Timer = Class.extend({\n        init: function(duration, startTime) {\n            this.lastTime = startTime || 0;\n            this.duration = duration;\n        },\n\n        isOver: function(time) {\n            var over = false;\n       \n            if((time - this.lastTime) > this.duration) {\n                over = true;\n                this.lastTime = time;\n            }\n            return over;\n        }\n    });\n\n    return Timer;\n});"
  },
  {
    "path": "client/js/transition.js",
    "content": "\ndefine(function() {\n\n    var Transition = Class.extend({\n        init: function() {\n            this.startValue = 0;\n            this.endValue = 0;\n            this.duration = 0;\n            this.inProgress = false;\n        },\n\n        start: function(currentTime, updateFunction, stopFunction, startValue, endValue, duration) {\n            this.startTime = currentTime;\n            this.updateFunction = updateFunction;\n            this.stopFunction = stopFunction;\n            this.startValue = startValue;\n            this.endValue = endValue;\n            this.duration = duration;\n            this.inProgress = true;\n            this.count = 0;\n        },\n\n        step: function(currentTime) {\n            if(this.inProgress) {\n                if(this.count > 0) {\n                    this.count -= 1;\n                    log.debug(currentTime + \": jumped frame\");\n                }\n                else {\n                    var elapsed = currentTime - this.startTime;\n            \n                    if(elapsed > this.duration) {\n                        elapsed = this.duration;\n                    }\n        \n                    var diff = this.endValue - this.startValue;\n                    var i = this.startValue + ((diff / this.duration) * elapsed);\n            \n                    i = Math.round(i);\n            \n                    if(elapsed === this.duration || i === this.endValue) {\n                        this.stop();\n                        if(this.stopFunction) {\n                            this.stopFunction();\n                        }\n                    }\n                    else if(this.updateFunction) {\n                        this.updateFunction(i);\n                    }\n                }\n            }\n        },\n\n        restart: function(currentTime, startValue, endValue) {\n            this.start(currentTime, this.updateFunction, this.stopFunction, startValue, endValue, this.duration);\n            this.step(currentTime);\n        },\n\n        stop: function() {\n            this.inProgress = false;\n        }\n    });\n    \n    return Transition;\n});\n"
  },
  {
    "path": "client/js/updater.js",
    "content": "\ndefine(['character', 'timer'], function(Character, Timer) {\n\n    var Updater = Class.extend({\n        init: function(game) {\n            this.game = game;\n            this.playerAggroTimer = new Timer(1000);\n        },\n\n        update: function() {\n            this.updateZoning();\n            this.updateCharacters();\n            this.updatePlayerAggro();\n            this.updateTransitions();\n            this.updateAnimations();\n            this.updateAnimatedTiles();\n            this.updateChatBubbles();\n            this.updateInfos();\n        },\n\n        updateCharacters: function() {\n            var self = this;\n        \n            this.game.forEachEntity(function(entity) {\n                var isCharacter = entity instanceof Character;\n            \n                if(entity.isLoaded) {\n                    if(isCharacter) {\n                        self.updateCharacter(entity);\n                        self.game.onCharacterUpdate(entity);\n                    }\n                    self.updateEntityFading(entity);\n                }\n            });\n        },\n        \n        updatePlayerAggro: function() {\n            var t = this.game.currentTime,\n                player = this.game.player;\n            \n            // Check player aggro every 1s when not moving nor attacking\n            if(player && !player.isMoving() && !player.isAttacking()  && this.playerAggroTimer.isOver(t)) {\n                player.checkAggro();\n            }\n        },\n    \n        updateEntityFading: function(entity) {\n            if(entity && entity.isFading) {\n                var duration = 1000,\n                    t = this.game.currentTime,\n                    dt = t - entity.startFadingTime;\n            \n                if(dt > duration) {\n                    this.isFading = false;\n                    entity.fadingAlpha = 1;\n                } else {\n                    entity.fadingAlpha = dt / duration;\n                }\n            }\n        },\n\n        updateTransitions: function() {\n            var self = this,\n                m = null,\n                z = this.game.currentZoning;\n    \n            this.game.forEachEntity(function(entity) {\n                m = entity.movement;\n                if(m) {\n                    if(m.inProgress) {\n                        m.step(self.game.currentTime);\n                    }\n                }\n            });\n        \n            if(z) {\n                if(z.inProgress) {\n                    z.step(this.game.currentTime);\n                }\n            }\n        },\n    \n        updateZoning: function() {\n            var g = this.game,\n                c = g.camera,\n                z = g.currentZoning,\n                s = 3,\n                ts = 16,\n                speed = 500;\n        \n            if(z && z.inProgress === false) {\n                var orientation = this.game.zoningOrientation,\n                    startValue = endValue = offset = 0,\n                    updateFunc = null,\n                    endFunc = null;\n            \n                if(orientation === Types.Orientations.LEFT || orientation === Types.Orientations.RIGHT) {\n                    offset = (c.gridW - 2) * ts;\n                    startValue = (orientation === Types.Orientations.LEFT) ? c.x - ts : c.x + ts;\n                    endValue = (orientation === Types.Orientations.LEFT) ? c.x - offset : c.x + offset;\n                    updateFunc = function(x) {\n                        c.setPosition(x, c.y);\n                        g.initAnimatedTiles();\n                        g.renderer.renderStaticCanvases();\n                    }\n                    endFunc = function() {\n                        c.setPosition(z.endValue, c.y);\n                        g.endZoning();\n                    }\n                } else if(orientation === Types.Orientations.UP || orientation === Types.Orientations.DOWN) {\n                    offset = (c.gridH - 2) * ts;\n                    startValue = (orientation === Types.Orientations.UP) ? c.y - ts : c.y + ts;\n                    endValue = (orientation === Types.Orientations.UP) ? c.y - offset : c.y + offset;\n                    updateFunc = function(y) { \n                        c.setPosition(c.x, y);\n                        g.initAnimatedTiles();\n                        g.renderer.renderStaticCanvases();\n                    }\n                    endFunc = function() {\n                        c.setPosition(c.x, z.endValue);\n                        g.endZoning();\n                    }\n                }\n            \n                z.start(this.game.currentTime, updateFunc, endFunc, startValue, endValue, speed);\n            }\n        },\n\n        updateCharacter: function(c) {\n            var self = this;\n    \n            // Estimate of the movement distance for one update\n            var tick = Math.round(16 / Math.round((c.moveSpeed / (1000 / this.game.renderer.FPS))));\n    \n            if(c.isMoving() && c.movement.inProgress === false) {\n                if(c.orientation === Types.Orientations.LEFT) {\n                    c.movement.start(this.game.currentTime,\n                                     function(x) {\n                                        c.x = x;\n                                        c.hasMoved();\n                                     },\n                                     function() {\n                                        c.x = c.movement.endValue;\n                                        c.hasMoved();\n                                        c.nextStep();\n                                     },\n                                     c.x - tick,\n                                     c.x - 16,\n                                     c.moveSpeed);\n                }\n                else if(c.orientation === Types.Orientations.RIGHT) {\n                    c.movement.start(this.game.currentTime,\n                                     function(x) {\n                                        c.x = x;\n                                        c.hasMoved();\n                                     },\n                                     function() {\n                                        c.x = c.movement.endValue;\n                                        c.hasMoved();\n                                        c.nextStep();\n                                     },\n                                     c.x + tick,\n                                     c.x + 16,\n                                     c.moveSpeed);\n                }\n                else if(c.orientation === Types.Orientations.UP) {\n                    c.movement.start(this.game.currentTime,\n                                     function(y) {\n                                        c.y = y;\n                                        c.hasMoved();\n                                     },\n                                     function() {\n                                        c.y = c.movement.endValue;\n                                        c.hasMoved();\n                                        c.nextStep();\n                                     },\n                                     c.y - tick,\n                                     c.y - 16,\n                                     c.moveSpeed);\n                }\n                else if(c.orientation === Types.Orientations.DOWN) {\n                    c.movement.start(this.game.currentTime,\n                                     function(y) {\n                                        c.y = y;\n                                        c.hasMoved();\n                                     },\n                                     function() {\n                                        c.y = c.movement.endValue;\n                                        c.hasMoved();\n                                        c.nextStep();\n                                     },\n                                     c.y + tick,\n                                     c.y + 16,\n                                     c.moveSpeed);\n                }\n            }\n        },\n\n        updateAnimations: function() {\n            var t = this.game.currentTime;\n    \n            this.game.forEachEntity(function(entity) {\n                var anim = entity.currentAnimation;\n                \n                if(anim) {\n                    if(anim.update(t)) {\n                        entity.setDirty();\n                    }\n                }\n            });\n        \n            var sparks = this.game.sparksAnimation;\n            if(sparks) {\n                sparks.update(t);\n            }\n    \n            var target = this.game.targetAnimation;\n            if(target) {\n                target.update(t);\n            }\n        },\n    \n        updateAnimatedTiles: function() {\n            var self = this,\n                t = this.game.currentTime;\n        \n            this.game.forEachAnimatedTile(function (tile) {\n                if(tile.animate(t)) {\n                    tile.isDirty = true;\n                    tile.dirtyRect = self.game.renderer.getTileBoundingRect(tile);\n\n                    if(self.game.renderer.mobile || self.game.renderer.tablet) {\n                        self.game.checkOtherDirtyRects(tile.dirtyRect, tile, tile.x, tile.y);\n                    }\n                }\n            });\n        },\n    \n        updateChatBubbles: function() {\n            var t = this.game.currentTime;\n        \n            this.game.bubbleManager.update(t);\n        },\n    \n        updateInfos: function() {\n            var t = this.game.currentTime;\n        \n            this.game.infoManager.update(t);\n        }\n    });\n    \n    return Updater;\n});\n"
  },
  {
    "path": "client/js/util.js",
    "content": "Function.prototype.bind = function (bind) {\n    var self = this;\n    return function () {\n        var args = Array.prototype.slice.call(arguments);\n        return self.apply(bind || null, args);\n    };\n};\n\nvar isInt = function(n) {\n    return (n % 1) === 0;\n};\n\nvar TRANSITIONEND = 'transitionend webkitTransitionEnd oTransitionEnd';\n\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\nwindow.requestAnimFrame = (function(){\n  return  window.requestAnimationFrame       || \n          window.webkitRequestAnimationFrame || \n          window.mozRequestAnimationFrame    || \n          window.oRequestAnimationFrame      || \n          window.msRequestAnimationFrame     || \n          function(/* function */ callback, /* DOMElement */ element){\n            window.setTimeout(callback, 1000 / 60);\n          };\n})();"
  },
  {
    "path": "client/js/warrior.js",
    "content": "\ndefine(['player'], function(Player) {\n    \n    var Warrior = Player.extend({\n        init: function(id, name) {\n            this._super(id, name, Types.Entities.WARRIOR);\n        },\n    });\n    \n    return Warrior;\n});"
  },
  {
    "path": "client/maps/world_client.js",
    "content": "var mapData = {\"width\":172,\"height\":314,\"collisions\":[51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51445,51446,51447,51448,51449,51450,51451,51452,51453,51454,51455,51456,51457,51458,51459,51460,51461,51462,51463,51464,51465,51466,51467,51468,51469,51470,51471,51472,51473,51474,51475,51476,51477,51478,51479,51480,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,51500,51501,51502,51503,51504,51505,51506,51507,51508,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680,51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,51774,51775,51776,51777,51778,51779,51780,51781,51782,51783,51784,51785,51786,51787,51788,51789,51790,51791,51792,51793,51794,51795,51796,51797,51798,51799,51800,51801,51802,51803,51804,51805,51806,51807,51808,51809,51810,51811,51812,51813,51814,51815,51816,51817,51818,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51837,51838,51839,51840,51841,51842,51843,51844,51845,51846,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51864,51946,51947,51948,51949,51950,51951,51952,51953,51954,51955,51956,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51976,51977,51978,51979,51980,51981,51982,51983,51984,51985,51986,51987,51988,51989,51990,51991,51992,51993,51994,51995,51996,51997,51998,51999,52000,52001,52002,52003,52004,52005,52006,52007,52008,52009,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52033,52034,52035,52036,52117,52118,52119,52120,52121,52122,52123,52124,52125,52126,52127,52128,52129,52130,52131,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52152,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52180,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,52192,52193,52194,52195,52196,52197,52198,52199,52200,52201,52202,52203,52204,52205,52206,52207,52208,52288,52289,52290,52291,52292,52293,52294,52295,52296,52297,52298,52299,52300,52301,52302,52303,52304,52305,52306,52307,52308,52309,52310,52311,52312,52313,52314,52315,52316,52317,52318,52319,52320,52321,52322,52323,52324,52325,52326,52327,52328,52329,52330,52331,52332,52333,52334,52335,52336,52337,52338,52339,52340,52341,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,52372,52373,52374,52375,52376,52377,52378,52379,52380,52460,52461,52462,52463,52464,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,52478,52479,52480,52481,52482,52483,52484,52485,52486,52487,52488,52489,52490,52491,52492,52493,52494,52495,52496,52497,52498,52499,52500,52501,52502,52503,52504,52505,52506,52507,52508,52509,52510,52511,52512,52513,52514,52515,52516,52517,52518,52519,52520,52521,52522,52523,52524,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52537,52538,52539,52540,52541,52542,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52632,52633,52634,52635,52636,52637,52638,52639,52640,52641,52642,52643,52644,52645,52646,52647,52648,52649,52650,52651,52652,52653,52654,52655,52656,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52676,52677,52678,52679,52680,52681,52682,52683,52684,52685,52686,52687,52688,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,52706,52707,52708,52709,52710,52711,52712,52713,52714,52715,52716,52717,52718,52719,52720,52721,52722,52723,52724,52804,52805,52806,52807,52808,52809,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52824,52825,52826,52827,52828,52829,52830,52831,52832,52833,52834,52835,52836,52837,52838,52839,52840,52841,52842,52843,52844,52845,52846,52847,52848,52849,52850,52851,52852,52853,52854,52855,52856,52857,52858,52859,52860,52861,52862,52863,52864,52865,52866,52867,52868,52869,52870,52871,52872,52873,52874,52875,52876,52877,52878,52879,52880,52881,52882,52883,52884,52885,52886,52887,52888,52889,52890,52891,52892,52893,52894,52895,52896,52976,52977,52978,52979,52980,52981,52982,52983,52984,52985,52986,52987,52988,52989,52990,52991,52992,52993,52994,52995,52996,52997,52998,52999,53000,53001,53002,53003,53004,53005,53006,53007,53008,53009,53010,53011,53012,53013,53014,53015,53016,53017,53018,53019,53020,53021,53022,53023,53024,53025,53026,53027,53028,53029,53030,53031,53032,53033,53034,53035,53036,53037,53038,53039,53040,53041,53042,53043,53044,53045,53046,53047,53048,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,53061,53062,53063,53064,53065,53066,53067,53068,53148,53149,53150,53151,53152,53153,53154,53155,53156,53157,53158,53159,53160,53161,53162,53163,53164,53165,53166,53167,53168,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53188,53189,53190,53191,53192,53193,53194,53195,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53216,53217,53218,53219,53220,53221,53222,53223,53224,53225,53226,53227,53228,53229,53230,53231,53232,53233,53234,53235,53236,53237,53238,53239,53240,53320,53321,53322,53323,53324,53325,53326,53327,53328,53329,53330,53331,53332,53333,53334,53335,53336,53337,53338,53339,53340,53341,53342,53343,53344,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53356,53357,53358,53359,53360,53361,53362,53363,53364,53365,53366,53367,53368,53369,53370,53371,53372,53373,53374,53375,53376,53377,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53412,53492,53493,53494,53495,53496,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,53509,53510,53511,53512,53513,53514,53515,53516,53517,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53552,53553,53554,53555,53556,53557,53558,53559,53560,53561,53562,53563,53564,53565,53566,53567,53568,53569,53570,53571,53572,53573,53574,53575,53576,53577,53578,53579,53580,53581,53582,53583,53584,31429,31431,31432,31433,31599,31600,31601,31602,31604,31605,31606,31607,31771,31772,31773,31777,31778,31779,31943,31951,32115,32123,32287,32295,32459,32460,32466,32467,32632,32633,32637,32638,32805,32806,32808,32809,33662,33663,33664,33665,33666,33667,33668,33669,33670,33671,33691,33692,33693,33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33833,33834,33835,33836,33837,33838,33840,33841,33842,33843,33844,33862,33863,33864,33865,33867,33868,33869,33871,33872,33873,33875,33876,34002,34003,34004,34005,34006,34015,34016,34017,34018,34019,34031,34032,34033,34034,34035,34048,34174,34175,34176,34177,34188,34189,34190,34191,34203,34204,34205,34206,34220,34346,34363,34375,34392,34518,34519,34521,34522,34530,34531,34532,34534,34535,34547,34548,34559,34560,34561,34562,34563,34564,34694,34695,34696,34697,34701,34702,34720,34721,34730,34731,34869,34870,34872,34873,34893,34894,34895,34897,34898,34899,34901,34902,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35756,35757,35758,35759,35760,35761,35762,35763,35764,35895,35896,35897,35898,35900,35901,35902,35904,35905,35906,35908,35909,35910,35928,35929,35931,35932,35933,35935,35936,36066,36067,36068,36081,36082,36083,36100,36108,36238,36239,36254,36255,36272,36280,36410,36427,36444,36452,36582,36583,36584,36585,36586,36594,36595,36596,36597,36598,36599,36616,36617,36623,36624,36758,36759,36760,36761,36765,36766,36789,36790,36794,36795,36933,36934,36936,36937,36962,36963,36965,36966,31072,31073,31074,31075,31076,31077,31078,31079,31080,31081,31082,31083,31084,31085,31086,31087,31088,31089,31090,31091,31092,31093,31094,31095,31096,31097,31098,31099,31100,31101,31102,31129,31244,31245,31246,31247,31248,31249,31250,31251,31252,31253,31254,31255,31256,31257,31258,31259,31260,31261,31262,31263,31264,31265,31266,31267,31268,31269,31270,31271,31272,31273,31274,31301,31416,31417,31418,31419,31420,31421,31422,31423,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31435,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31446,31473,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31598,31599,31600,31605,31606,31607,31608,31609,31610,31611,31612,31613,31614,31615,31616,31617,31618,31645,31760,31761,31762,31763,31764,31765,31766,31767,31768,31769,31770,31780,31781,31782,31783,31784,31785,31786,31787,31788,31789,31790,31817,31932,31933,31934,31935,31936,31937,31938,31939,31940,31941,31942,31952,31953,31954,31955,31956,31957,31958,31959,31960,31961,31962,31989,32104,32105,32106,32107,32108,32109,32110,32111,32112,32113,32114,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32161,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32333,32448,32449,32450,32451,32452,32453,32454,32455,32456,32457,32458,32459,32467,32468,32469,32470,32471,32472,32473,32474,32475,32476,32477,32478,32505,32620,32621,32622,32623,32624,32625,32626,32627,32628,32629,32630,32631,32632,32638,32639,32640,32641,32642,32643,32644,32645,32646,32647,32648,32649,32650,32677,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32809,32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32849,32964,32965,32966,32967,32968,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978,32979,32980,32981,32982,32983,32984,32985,32986,32987,32988,32989,32990,32991,32992,32993,32994,33021,33136,33137,33138,33139,33140,33141,33142,33143,33144,33145,33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33156,33157,33158,33159,33160,33161,33162,33163,33164,33165,33166,33193,33308,33309,33310,33311,33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324,33325,33326,33327,33328,33329,33330,33331,33332,33333,33334,33335,33336,33337,33338,33339,33340,33341,33342,33343,33344,33345,33346,33347,33348,33349,33350,33351,33352,33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365,33480,33481,33482,33483,33484,33485,33486,33487,33488,33489,33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502,33503,33504,33505,33506,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516,33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33527,33528,33529,33530,33531,33532,33533,33534,33535,33536,33537,33652,33653,33654,33655,33656,33657,33658,33659,33660,33661,33662,33663,33664,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679,33680,33681,33682,33683,33684,33685,33686,33687,33688,33689,33690,33691,33692,33693,33698,33699,33700,33701,33702,33703,33704,33705,33706,33707,33708,33709,33824,33825,33826,33827,33828,33829,33830,33831,33832,33833,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853,33854,33855,33856,33857,33858,33859,33860,33861,33862,33876,33877,33878,33879,33880,33881,33996,33997,33998,33999,34000,34001,34002,34003,34004,34017,34018,34019,34020,34021,34022,34023,34024,34025,34026,34027,34028,34029,34030,34031,34032,34033,34049,34050,34051,34052,34053,34168,34169,34170,34171,34172,34173,34174,34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34203,34221,34222,34223,34224,34225,34340,34341,34342,34343,34344,34345,34364,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34393,34394,34395,34396,34397,34512,34513,34514,34515,34516,34517,34518,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34564,34565,34566,34567,34568,34569,34684,34685,34686,34687,34688,34689,34690,34691,34692,34693,34694,34702,34703,34704,34705,34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717,34718,34719,34720,34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34866,34867,34868,34869,34873,34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885,34886,34887,34888,34889,34890,34891,34892,34893,34902,34903,34904,34905,34906,34907,34908,34909,34910,34911,34912,34913,35028,35029,35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041,35042,35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053,35054,35055,35056,35057,35058,35059,35060,35061,35062,35063,35064,35065,35066,35067,35068,35069,35070,35071,35072,35073,35074,35075,35076,35077,35078,35079,35080,35081,35082,35083,35084,35085,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35591,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755,35756,35757,35762,35763,35764,35765,35766,35767,35768,35769,35770,35771,35772,35773,35888,35889,35890,35891,35892,35893,35894,35895,35896,35909,35910,35911,35912,35913,35914,35915,35916,35917,35918,35919,35920,35921,35922,35923,35924,35925,35926,35927,35937,35938,35939,35940,35941,35942,35943,35944,35945,36060,36061,36062,36063,36064,36065,36066,36067,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36109,36110,36111,36112,36113,36114,36115,36116,36117,36232,36233,36234,36235,36236,36237,36238,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36281,36282,36283,36284,36285,36286,36287,36288,36289,36404,36405,36406,36407,36408,36409,36428,36429,36430,36431,36432,36433,36434,36435,36436,36437,36438,36439,36440,36441,36442,36443,36453,36454,36455,36456,36457,36458,36459,36460,36461,36576,36577,36578,36579,36580,36581,36582,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36748,36749,36750,36751,36752,36753,36754,36755,36756,36757,36758,36766,36767,36768,36769,36770,36771,36772,36773,36774,36775,36776,36777,36778,36779,36780,36781,36782,36783,36784,36785,36786,36787,36788,36789,36795,36796,36797,36798,36799,36800,36801,36802,36803,36804,36805,36920,36921,36922,36923,36924,36925,36926,36927,36928,36929,36930,36931,36932,36933,36937,36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36948,36949,36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36961,36962,36966,36967,36968,36969,36970,36971,36972,36973,36974,36975,36976,36977,37092,37093,37094,37095,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105,37106,37107,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117,37118,37119,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37145,37146,37147,37148,37149,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,25698,25706,25356,25360,758,760,930,932,1102,1104,1274,1276,1446,1448,1618,1620,4513,4516,4685,4688,4857,4860,5029,5032,5092,5094,5201,5204,5264,5266,5373,5376,5436,5438,5545,5548,5608,5610,5780,5782,5952,5954,6124,6126,6296,6298,6468,6470,6549,6551,6640,6642,6721,6723,6812,6814,6893,6895,6984,6986,7065,7067,7156,7158,7237,7239,7328,7330,7409,7411,7581,7583,7672,7674,7844,7846,8016,8018,8188,8190,8360,8362,8532,8534,8676,8679,8704,8706,8814,8817,8848,8851,8876,8878,8986,8989,9020,9023,9048,9050,9132,9135,9158,9161,9192,9195,9304,9307,9330,9333,9355,9358,9364,9367,9476,9479,9502,9505,9527,9530,9536,9539,9648,9651,9674,9677,9699,9702,9708,9711,9820,9823,9846,9849,9871,9874,9992,9995,10043,10046,10215,10218,32234,32237,32406,32409,32578,32581,32750,32753,32856,32859,32893,32899,32922,32925,33028,33031,33065,33071,33094,33097,33200,33203,33237,33243,33266,33269,33372,33375,33409,33415,33438,33441,33610,33613,33782,33785,44670,44672,44677,44679,44842,44844,44849,44851,45021,45023,45193,45195,45358,45360,45365,45367,45530,45532,45537,45539,45702,45704,45709,45711,45874,45876,45881,45883,46046,46048,46053,46055,46218,46220,46225,46227,46390,46392,46397,46399,46562,46564,46569,46571,46734,46736,46741,46743,24461,24462,24633,24634,24800,24801,24972,24973,25161,25162,25297,25298,25333,25334,25366,25367,25469,25470,25475,25477,25538,25539,25647,25649,25667,25668,25839,25840,26007,26008,26160,26161,26179,26180,26204,26205,26322,26323,26332,26333,26376,26377,26494,26495,26517,26518,26537,26538,26554,26555,26566,26567,26689,26690,26700,26701,26709,26710,26726,26727,26738,26739,26872,26873,27356,27357,27528,27529,27535,27536,27707,27708,27710,27711,27738,27739,27752,27753,27772,27773,27882,27883,27888,27889,27900,27901,27910,27911,27924,27925,27944,27945,28060,28061,28072,28073,28275,28276,28385,28386,28430,28431,28447,28448,28451,28452,28557,28558,28602,28603,28623,28624,28756,28757,28928,28929,29146,29147,29252,29253,29285,29286,29318,29319,29424,29425,29457,29458,29603,29604,29622,29623,29775,29776,29794,29795,30000,30001,30108,30109,30126,30127,30172,30173,30280,30281,30298,30299,30456,30457,30484,30485,30495,30496,30523,30524,30628,30629,30656,30657,30667,30668,30681,30682,30695,30696,30853,30854,30992,30993,31164,31165,31325,31326,31363,31364,31497,31498,31528,31529,31535,31536,31700,31701,31724,31725,31887,31888,31896,31897,32059,32060,12565,12566,12738,12739,12910,12911,12912,12917,13083,13089,13261,13484,13656,13828,19271,23260,23265,23432,23437,23603,23604,23609,23610,23771,23772,23773,23774,23775,23776,23781,23782,23783,23784,23785,23942,23943,23944,23945,23946,23947,23954,23955,23956,23957,23958,24113,24114,24115,24129,24130,24131,24132,24133,24283,24284,24285,24286,24302,24303,24304,24305,24306,24307,24308,24309,24310,24311,24312,24313,24314,24452,24453,24454,24455,24456,24457,24477,24478,24479,24480,24481,24482,24483,24484,24485,24486,24487,24619,24620,24621,24622,24623,24624,24625,24626,24627,24658,24659,24776,24777,24778,24779,24784,24785,24786,24787,24788,24789,24790,24791,24792,24793,24794,24795,24796,24831,24832,24838,24839,24840,24841,24842,24843,24844,24845,24846,24847,24848,24849,24850,24851,24945,24946,24947,24948,24949,24950,24951,24952,24953,24954,24955,24956,24957,24958,24959,24961,24962,24963,25003,25004,25005,25009,25010,25011,25012,25013,25015,25016,25017,25018,25019,25020,25021,25022,25023,25024,25116,25117,25118,25119,25120,25123,25124,25125,25126,25127,25128,25175,25176,25177,25178,25180,25181,25182,25195,25196,25288,25289,25349,25350,25352,25353,25368,25460,25540,25632,25711,25712,25804,25883,25975,25976,26055,26147,26227,26228,26319,26399,26400,26491,26572,26662,26663,26744,26834,26835,26916,27005,27006,27088,27177,27178,27259,27260,27349,27431,27521,27522,27603,27694,27775,27776,27866,27947,27948,28037,28038,28120,28209,28210,28292,28381,28464,28553,28636,28725,28808,28897,28898,28980,29070,29071,29151,29152,29243,29244,29322,29323,29416,29494,29588,29666,29760,29837,29838,29932,30009,30103,30104,30181,30274,30275,30276,30353,30354,30446,30447,30525,30526,30618,30698,30790,30870,30962,31042,31043,31134,31135,31214,31215,31307,31344,31353,31387,31479,31484,31516,31525,31559,31650,31651,31656,31661,31662,31663,31664,31665,31666,31677,31678,31679,31680,31681,31682,31683,31684,31687,31688,31697,31698,31731,31732,31822,31823,31828,31829,31832,31833,31834,31835,31836,31837,31838,31839,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31859,31860,31869,31870,31871,31895,31903,31904,31994,32000,32001,32002,32003,32004,32005,32010,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32028,32029,32030,32031,32042,32043,32044,32045,32046,32047,32048,32049,32050,32051,32052,32053,32054,32067,32076,32077,32166,32173,32174,32175,32176,32183,32184,32185,32186,32187,32188,32189,32190,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32238,32239,32248,32249,32337,32338,32398,32399,32400,32401,32402,32403,32404,32405,32406,32409,32410,32411,32421,32508,32509,32510,32573,32574,32575,32576,32577,32578,32581,32582,32593,32594,32680,32681,32765,32766,32767,32768,32769,32770,32771,32772,32938,32939,32940,32941,32942,32943,32944,24792,24964,25128,25135,25136,25299,25300,25301,25307,25471,25472,25473,25474,25475,25477,25478,25479,25644,25645,25646,25647,25649,25650,26742,26743,26744,26910,26911,26912,26913,26914,27080,27081,27082,27083,27084,27085,27252,27424,27596,27597,27768,27769,27770,27941,27942,28113,28114,28115,28116,28286,28287,28288,28289,28290,28291,28461,28462,28463,24656,24657,24828,24829,25147,25148,25319,25320,25994,25995,26166,26167,27755,27756,27927,27928,28425,28426,28597,28598,29275,29276,29447,29448,30467,30468,30639,30640,8927,23371,23372,23373,23518,23548,23549,3594,3596,24721,24723,24749,24751,49346,49348,51067,51069,51554,51556,2905,2906,2907,2908,2909,3077,3081,3249,3253,3421,3425,3593,3594,3596,3597,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23341,23351,23369,23379,23513,23523,23541,23551,23685,23695,23713,23723,23857,23867,23885,23895,24029,24039,24057,24067,24201,24211,24229,24239,24373,24383,24401,24411,24545,24555,24573,24583,24717,24718,24719,24720,24724,24725,24726,24727,24745,24746,24747,24748,24752,24753,24754,24755,47966,47967,47968,47969,47970,47971,47972,47973,47974,47975,47976,48138,48148,48310,48320,48482,48492,48654,48664,48826,48836,48998,49008,49170,49180,49342,49343,49344,49345,49349,49350,49351,49352,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50174,50184,50346,50356,50378,50379,50380,50381,50382,50518,50528,50550,50554,50690,50700,50722,50726,50862,50872,50894,50898,51034,51044,51066,51070,51206,51216,51378,51388,51550,51551,51552,51553,51557,51558,51559,51560,22816,22817,22818,22819,22820,22821,22822,22823,22824,22825,22826,22827,22828,22829,22830,22831,22832,22833,22834,22835,22836,22837,22838,22839,22840,22841,22842,22843,22844,22845,22846,22847,22848,22849,22850,22851,22852,22853,22854,22855,22856,22857,22858,22859,22860,22861,22862,22863,22864,22865,22866,22867,22868,22869,22870,22871,22872,22873,22988,22989,22990,22991,22992,22993,22994,22995,22996,22997,22998,22999,23000,23001,23002,23003,23004,23005,23006,23007,23008,23009,23010,23011,23012,23013,23014,23015,23016,23017,23018,23019,23020,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23033,23034,23035,23036,23037,23038,23039,23040,23041,23042,23043,23044,23045,23160,23161,23162,23163,23164,23165,23166,23167,23168,23180,23181,23182,23183,23184,23185,23186,23187,23188,23189,23190,23191,23192,23193,23194,23195,23196,23208,23209,23210,23211,23212,23213,23214,23215,23216,23217,23332,23333,23334,23335,23336,23337,23338,23339,23340,23352,23353,23354,23355,23356,23357,23358,23359,23360,23361,23362,23363,23364,23365,23366,23367,23368,23380,23381,23382,23383,23384,23385,23386,23387,23388,23389,23504,23505,23506,23507,23508,23509,23510,23511,23512,23524,23525,23526,23527,23528,23529,23530,23531,23532,23533,23534,23535,23536,23537,23538,23539,23540,23552,23553,23554,23555,23556,23557,23558,23559,23560,23561,23676,23677,23678,23679,23680,23681,23682,23683,23684,23696,23697,23698,23699,23700,23701,23702,23703,23704,23705,23706,23707,23708,23709,23710,23711,23712,23724,23725,23726,23727,23728,23729,23730,23731,23732,23733,23848,23849,23850,23851,23852,23853,23854,23855,23856,23868,23869,23870,23871,23872,23873,23874,23875,23876,23877,23878,23879,23880,23881,23882,23883,23884,23896,23897,23898,23899,23900,23901,23902,23903,23904,23905,24020,24021,24022,24023,24024,24025,24026,24027,24028,24040,24041,24042,24043,24044,24045,24046,24047,24048,24049,24050,24051,24052,24053,24054,24055,24056,24068,24069,24070,24071,24072,24073,24074,24075,24076,24077,24192,24193,24194,24195,24196,24197,24198,24199,24200,24212,24213,24214,24215,24216,24217,24218,24219,24220,24221,24222,24223,24224,24225,24226,24227,24228,24240,24241,24242,24243,24244,24245,24246,24247,24248,24249,24364,24365,24366,24367,24368,24369,24370,24371,24372,24384,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24400,24412,24413,24414,24415,24416,24417,24418,24419,24420,24421,24536,24537,24538,24539,24540,24541,24542,24543,24544,24556,24557,24558,24559,24560,24561,24562,24563,24564,24565,24566,24567,24568,24569,24570,24571,24572,24584,24585,24586,24587,24588,24589,24590,24591,24592,24593,24708,24709,24710,24711,24712,24713,24714,24715,24716,24728,24729,24730,24731,24732,24733,24734,24735,24736,24737,24738,24739,24740,24741,24742,24743,24744,24756,24757,24758,24759,24760,24761,24762,24763,24764,24765,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24895,24896,24897,24898,24899,24900,24901,24902,24903,24904,24905,24906,24907,24908,24909,24910,24911,24912,24913,24914,24915,24916,24917,24918,24919,24920,24921,24922,24923,24924,24925,24926,24927,24928,24929,24930,24931,24932,24933,24934,24935,24936,24937,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25062,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25077,25078,25079,25080,25081,25082,25083,25084,25085,25086,25087,25088,25089,25090,25091,25092,25093,25094,25095,25096,25097,25098,25099,25100,25101,25102,25103,25104,25105,25106,25107,25108,25109,47612,47613,47614,47615,47616,47617,47618,47619,47620,47621,47622,47623,47624,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47637,47638,47639,47640,47641,47784,47785,47786,47787,47788,47789,47790,47791,47792,47793,47794,47795,47796,47797,47798,47799,47800,47801,47802,47803,47804,47805,47806,47807,47808,47809,47810,47811,47812,47813,47956,47957,47958,47959,47960,47961,47962,47963,47964,47965,47977,47978,47979,47980,47981,47982,47983,47984,47985,48128,48129,48130,48131,48132,48133,48134,48135,48136,48137,48149,48150,48151,48152,48153,48154,48155,48156,48157,48300,48301,48302,48303,48304,48305,48306,48307,48308,48309,48321,48322,48323,48324,48325,48326,48327,48328,48329,48472,48473,48474,48475,48476,48477,48478,48479,48480,48481,48493,48494,48495,48496,48497,48498,48499,48500,48501,48644,48645,48646,48647,48648,48649,48650,48651,48652,48653,48665,48666,48667,48668,48669,48670,48671,48672,48673,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48837,48838,48839,48840,48841,48842,48843,48844,48845,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,49009,49010,49011,49012,49013,49014,49015,49016,49017,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49181,49182,49183,49184,49185,49186,49187,49188,49189,49332,49333,49334,49335,49336,49337,49338,49339,49340,49341,49353,49354,49355,49356,49357,49358,49359,49360,49361,49504,49505,49506,49507,49508,49509,49510,49511,49512,49513,49514,49515,49516,49517,49518,49519,49520,49521,49522,49523,49524,49525,49526,49527,49528,49529,49530,49531,49532,49533,49648,49649,49650,49651,49652,49653,49654,49655,49656,49657,49658,49659,49660,49661,49662,49663,49664,49665,49666,49667,49668,49669,49670,49671,49672,49673,49674,49675,49676,49677,49678,49679,49680,49681,49682,49683,49684,49685,49686,49687,49688,49689,49690,49691,49692,49693,49694,49695,49696,49697,49698,49699,49700,49701,49702,49703,49704,49705,49820,49821,49822,49823,49824,49825,49826,49827,49828,49829,49830,49831,49832,49833,49834,49835,49836,49837,49838,49839,49840,49841,49842,49843,49844,49845,49846,49847,49848,49849,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49992,49993,49994,49995,49996,49997,49998,49999,50000,50001,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50024,50025,50026,50027,50028,50029,50030,50031,50032,50033,50034,50035,50036,50037,50038,50039,50040,50041,50042,50043,50044,50045,50046,50047,50048,50049,50164,50165,50166,50167,50168,50169,50170,50171,50172,50173,50185,50186,50187,50188,50189,50190,50191,50192,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,50203,50204,50205,50206,50207,50208,50209,50210,50211,50212,50213,50214,50215,50216,50217,50218,50219,50220,50221,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50357,50358,50359,50360,50361,50362,50363,50364,50365,50366,50367,50368,50369,50370,50371,50372,50373,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50508,50509,50510,50511,50512,50513,50514,50515,50516,50517,50529,50530,50531,50532,50533,50534,50535,50536,50537,50538,50539,50540,50541,50542,50543,50544,50545,50546,50547,50548,50549,50550,50554,50555,50556,50557,50558,50559,50560,50561,50562,50563,50564,50565,50680,50681,50682,50683,50684,50685,50686,50687,50688,50689,50701,50702,50703,50704,50705,50706,50707,50708,50709,50710,50711,50712,50713,50714,50715,50716,50717,50718,50719,50720,50721,50722,50726,50727,50728,50729,50730,50731,50732,50733,50734,50735,50736,50737,50852,50853,50854,50855,50856,50857,50858,50859,50860,50861,50873,50874,50875,50876,50877,50878,50879,50880,50881,50882,50883,50884,50885,50886,50887,50888,50889,50890,50891,50892,50893,50894,50898,50899,50900,50901,50902,50903,50904,50905,50906,50907,50908,50909,51024,51025,51026,51027,51028,51029,51030,51031,51032,51033,51045,51046,51047,51048,51049,51050,51051,51052,51053,51054,51055,51056,51057,51058,51059,51060,51061,51062,51063,51064,51065,51066,51067,51071,51072,51073,51074,51075,51076,51077,51078,51079,51080,51081,51196,51197,51198,51199,51200,51201,51202,51203,51204,51205,51217,51218,51219,51220,51221,51222,51223,51224,51225,51226,51227,51228,51229,51230,51231,51232,51233,51234,51235,51236,51237,51238,51239,51240,51241,51242,51243,51244,51245,51246,51247,51248,51249,51250,51251,51252,51253,51368,51369,51370,51371,51372,51373,51374,51375,51376,51377,51389,51390,51391,51392,51393,51394,51395,51396,51397,51398,51399,51400,51401,51402,51403,51404,51405,51406,51407,51408,51409,51410,51411,51412,51413,51414,51415,51416,51417,51418,51419,51420,51421,51422,51423,51424,51425,51540,51541,51542,51543,51544,51545,51546,51547,51548,51549,51561,51562,51563,51564,51565,51566,51567,51568,51569,51570,51571,51572,51573,51574,51575,51576,51577,51578,51579,51580,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51592,51593,51594,51595,51596,51597,51712,51713,51714,51715,51716,51717,51718,51719,51720,51721,51722,51723,51724,51725,51726,51727,51728,51729,51730,51731,51732,51733,51734,51735,51736,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,51750,51751,51752,51753,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51900,51901,51902,51903,51904,51905,51906,51907,51908,51909,51910,51911,51912,51913,51914,51915,51916,51917,51918,51919,51920,51921,51922,51923,51924,51925,51926,51927,51928,51929,51930,51931,51932,51933,51934,51935,51936,51937,51938,51939,51940,51941,4785,4786,4788,4789,4790,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4957,4958,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,5129,5134,5135,5136,5137,5138,5139,5148,5149,5150,5301,5321,5322,5323,5473,5494,5495,5496,5497,5498,5499,5500,5645,5667,5668,5669,5670,5671,5672,5817,5818,5819,5840,5844,5991,5992,5993,5996,6012,6016,6165,6166,6172,6173,6174,6175,6184,6188,6338,6339,6340,6341,6342,6343,6344,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6359,6360,14773,14774,14775,14776,14777,14944,14945,14946,14948,14949,14950,15083,15084,15085,15086,15087,15088,15089,15090,15097,15098,15099,15100,15101,15116,15117,15121,15122,15252,15253,15254,15255,15256,15257,15258,15259,15260,15261,15262,15263,15268,15269,15270,15272,15273,15274,15288,15294,15423,15424,15425,15426,15427,15434,15435,15440,15441,15445,15446,15460,15466,15595,15596,15607,15608,15611,15612,15618,15632,15638,15767,15772,15773,15774,15775,15776,15779,15780,15781,15782,15783,15784,15790,15804,15810,15939,15943,15944,15948,15949,15952,15953,15954,15955,15961,15962,15976,15982,16111,16115,16121,16122,16132,16133,16148,16154,16283,16284,16286,16287,16294,16295,16296,16297,16298,16299,16300,16301,16302,16303,16304,16320,16326,16492,16498,16664,16665,16666,16668,16669,16670,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19214,19215,19216,19217,19218,19219,19220,19221,19222,19223,19224,19225,19237,19247,19248,19384,19385,19386,19387,19396,19397,19398,19409,19420,19556,19557,19558,19569,19570,19581,19582,19584,19585,19586,19592,19593,19728,19742,19758,19759,19764,19765,19766,19900,19914,19931,19932,19937,19938,19939,20072,20086,20104,20110,20111,20112,20244,20258,20276,20283,20284,20416,20417,20418,20426,20427,20428,20429,20430,20448,20449,20450,20456,20590,20591,20592,20593,20597,20598,20622,20623,20627,20628,20765,20766,20768,20769,20795,20796,20798,20799,27473,27474,27476,27477,27502,27504,27643,27644,27645,27646,27648,27649,27650,27651,27674,27676,27815,27816,27817,27821,27822,27823,27845,27846,27848,27849,27987,27995,28012,28013,28014,28015,28016,28017,28018,28020,28021,28022,28023,28024,28025,28026,28159,28167,28184,28185,28186,28187,28188,28189,28193,28194,28195,28196,28197,28198,28331,28332,28338,28339,28356,28370,28504,28505,28509,28510,28528,28529,28530,28531,28532,28533,28537,28538,28539,28540,28541,28542,28677,28678,28680,28681,28705,28706,28708,28709,28878,28880,29050,29051,29052,31458,31459,31461,31462,31628,31629,31630,31631,31633,31634,31635,31636,31800,31801,31802,31806,31807,31808,31972,31980,32144,32152,32316,32324,32488,32489,32495,32496,32661,32662,32666,32667,32834,32835,32837,32838,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37986,37987,37988,37989,37990,37991,37992,37993,37994,37995,37996,37997,37998,37999,38000,38001,38136,38137,38146,38147,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38158,38159,38172,38173,38174,38308,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38345,38346,38347,38480,38486,38487,38488,38518,38519,38652,38653,38657,38658,38660,38661,38674,38675,38676,38677,38678,38679,38683,38684,38685,38686,38691,38825,38826,38829,38833,38834,38835,38845,38846,38851,38852,38853,38854,38855,38858,38859,38863,38998,39001,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39031,39035,39170,39173,39202,39203,39206,39207,39342,39345,39373,39374,39375,39377,39378,39513,39514,39517,39544,39545,39546,39549,39685,39686,39689,39711,39712,39713,39714,39715,39716,39717,39720,39721,39857,39861,39862,39882,39883,39884,39885,39886,39887,39888,39891,39892,40029,40033,40034,40035,40054,40055,40062,40063,40201,40206,40207,40208,40225,40226,40233,40234,40373,40374,40379,40380,40397,40398,40405,40546,40552,40569,40577,40718,40724,40741,40742,40749,40750,40889,40890,40896,40914,40921,40922,41061,41062,41067,41068,41086,41087,41088,41094,41233,41238,41239,41260,41261,41265,41266,41405,41406,41408,41409,41410,41433,41434,41436,41437,43809,43810,43811,43812,43813,43814,43815,43816,43817,43818,43819,43820,43981,43982,43983,43984,43985,43986,43987,43988,43989,43990,43991,43992,44005,44006,44008,44009,44010,44011,44012,44013,44014,44015,44153,44164,44177,44178,44180,44181,44182,44183,44184,44185,44186,44187,44188,44325,44336,44349,44359,44360,44361,44497,44508,44521,44532,44533,44534,44669,44680,44693,44694,44695,44696,44697,44698,44705,44706,44707,44841,44852,44870,44871,44878,44879,44880,45013,45024,45043,45044,45051,45052,45185,45196,45216,45217,45218,45224,45357,45368,45390,45391,45395,45396,45529,45540,45563,45564,45566,45567,45701,45712,45873,45884,46045,46056,46217,46228,46389,46400,46561,46572,46733,46744,46905,46916,47077,47088,47249,47260,47421,47422,47423,47425,47426,47427,47428,47430,47431,47432,52441,52442,52443,52444,52445,52612,52613,52614,52615,52616,52617,52618,52783,52784,52785,52789,52790,52791,52955,52956,52962,52963,53127,53135,53299,53300,53306,53307,53472,53473,53477,53478,53645,53646,53648,53649,4790,4962,4969,4976,5133,5134,5141,5148,5304,5305,5306,5307,5308,5309,5310,5311,5313,5314,5319,5320,5476,5477,5478,5479,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5648,5650,5656,5658,5659,5660,5661,5662,5663,5668,5820,5822,5823,5827,5828,5833,5834,5835,5836,5837,5992,5994,5995,5996,5997,5998,5999,6000,6004,6005,6009,6010,6167,6168,6169,6170,6171,6176,6182,6348,6354,6356,19220,19392,19393,19397,19565,19566,19567,19568,19569,19741,19913,19914,27817,27987,27988,27989,28159,38494,38843,38844,44497,44508,44669,44670,44679,44680,44841,44842,44844,44845,44846,44847,44848,44849,44851,44852,45014,45015,45016,45017,45018,45019,45020,45021,45023,46562,46564,46569,46571,46733,46734,46736,46737,46740,46741,46743,46744,46905,46909,46910,46911,46912,46916,47082,47083,47254,47255,47426,47427,1429,1467,1762,1911,2849,2950,3131,3347,3832,4838,5053,5214,5339,5413,6883,6975,7117,7336,7986,8118,8311,8614,8834,10372,10740,11565,11597,11706,11929,12465,12574,13099,14357,15200,15902,23992,23993,33553,33554,33725,33726,33742,33743,33767,33768,33914,33915,33939,33940,34287,34288,34459,34460,35294,35295,35466,35467,35777,35778,35949,35950,36344,36345,36516,36517,37353,37354,37525,37526,37916,37917,38088,38089,38550,38551,38619,38620,38722,38723,38746,38747,38791,38792,38918,38919,39047,39048,39219,39220,39269,39270,39441,39442,40615,40616,40787,40788,40821,40822,40937,40938,40993,40994,41027,41028,41109,41110,41199,41200,42534,42535,42706,42707,42848,42849,43020,43021,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4612,4613,4614,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4784,4785,4786,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4956,4957,4962,4963,4964,4965,4966,4967,4968,4969,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,5128,5134,5135,5136,5137,5138,5139,5140,5141,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5300,5305,5306,5307,5308,5309,5310,5311,5312,5313,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5472,5476,5477,5478,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5644,5648,5649,5650,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5672,5673,5816,5817,5820,5821,5822,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5845,5988,5989,5990,5991,5992,5993,5994,5995,5998,5999,6000,6001,6002,6003,6004,6010,6011,6012,6017,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6182,6183,6184,6189,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6354,6355,6356,6360,6361,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,14560,14561,14562,14563,14564,14565,14566,14567,14568,14569,14570,14571,14572,14573,14574,14575,14576,14577,14578,14579,14580,14581,14582,14583,14584,14585,14586,14587,14588,14589,14590,14591,14592,14593,14594,14595,14596,14597,14598,14599,14600,14601,14602,14603,14604,14605,14606,14607,14608,14609,14610,14611,14612,14613,14614,14615,14616,14617,14732,14733,14734,14735,14736,14737,14738,14739,14740,14741,14742,14743,14744,14745,14746,14747,14748,14749,14750,14751,14752,14753,14754,14755,14756,14757,14758,14759,14760,14761,14762,14763,14764,14765,14766,14767,14768,14769,14770,14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14786,14787,14788,14789,14904,14905,14906,14907,14908,14909,14910,14911,14912,14913,14914,14915,14916,14917,14918,14919,14920,14921,14922,14923,14924,14925,14926,14927,14928,14929,14930,14931,14932,14933,14934,14935,14936,14937,14938,14939,14940,14941,14942,14943,14944,14950,14951,14952,14953,14954,14955,14956,14957,14958,14959,14960,14961,15076,15077,15078,15079,15080,15081,15082,15083,15084,15085,15086,15087,15090,15091,15092,15093,15094,15095,15096,15097,15098,15099,15100,15101,15102,15103,15104,15105,15106,15107,15108,15109,15110,15111,15112,15113,15114,15115,15123,15124,15125,15126,15127,15128,15129,15130,15131,15132,15133,15248,15249,15250,15251,15252,15263,15264,15265,15266,15267,15268,15273,15274,15275,15276,15277,15278,15279,15280,15281,15282,15283,15284,15285,15286,15287,15295,15296,15297,15298,15299,15300,15301,15302,15303,15304,15305,15420,15421,15422,15423,15436,15437,15438,15439,15440,15447,15448,15449,15450,15451,15452,15453,15454,15455,15456,15457,15458,15459,15467,15468,15469,15470,15471,15472,15473,15474,15475,15476,15477,15592,15593,15594,15608,15609,15610,15619,15620,15621,15622,15623,15624,15625,15626,15627,15628,15629,15630,15631,15639,15640,15641,15642,15643,15644,15645,15646,15647,15648,15649,15764,15765,15766,15791,15792,15793,15794,15795,15796,15797,15798,15799,15800,15801,15802,15803,15811,15812,15813,15814,15815,15816,15817,15818,15819,15820,15821,15936,15937,15938,15944,15945,15946,15947,15948,15962,15963,15964,15965,15966,15967,15968,15969,15970,15971,15972,15973,15974,15975,15983,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,16108,16109,16110,16116,16117,16118,16119,16120,16121,16133,16134,16135,16136,16137,16138,16139,16140,16141,16142,16143,16144,16145,16146,16147,16155,16156,16157,16158,16159,16160,16161,16162,16163,16164,16165,16280,16281,16282,16283,16287,16288,16289,16290,16291,16292,16293,16304,16305,16306,16307,16308,16309,16310,16311,16312,16313,16314,16315,16316,16317,16318,16319,16327,16328,16329,16330,16331,16332,16333,16334,16335,16336,16337,16452,16453,16454,16455,16456,16457,16458,16459,16460,16461,16462,16463,16464,16465,16466,16467,16468,16469,16470,16471,16472,16473,16474,16475,16476,16477,16478,16479,16480,16481,16482,16483,16484,16485,16486,16487,16488,16489,16490,16491,16499,16500,16501,16502,16503,16504,16505,16506,16507,16508,16509,16624,16625,16626,16627,16628,16629,16630,16631,16632,16633,16634,16635,16636,16637,16638,16639,16640,16641,16642,16643,16644,16645,16646,16647,16648,16649,16650,16651,16652,16653,16654,16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16670,16671,16672,16673,16674,16675,16676,16677,16678,16679,16680,16681,16796,16797,16798,16799,16800,16801,16802,16803,16804,16805,16806,16807,16808,16809,16810,16811,16812,16813,16814,16815,16816,16817,16818,16819,16820,16821,16822,16823,16824,16825,16826,16827,16828,16829,16830,16831,16832,16833,16834,16835,16836,16837,16838,16839,16840,16841,16842,16843,16844,16845,16846,16847,16848,16849,16850,16851,16852,16853,18686,18687,18688,18689,18690,18691,18692,18693,18694,18695,18696,18697,18698,18699,18700,18701,18702,18703,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19075,19076,19077,19078,19079,19080,19081,19082,19083,19084,19085,19086,19087,19088,19089,19202,19203,19204,19205,19206,19207,19208,19209,19210,19211,19212,19213,19214,19215,19225,19226,19227,19228,19229,19230,19231,19232,19233,19234,19235,19236,19249,19250,19251,19252,19253,19254,19255,19256,19257,19258,19259,19260,19261,19374,19375,19376,19377,19378,19379,19380,19381,19382,19383,19384,19398,19399,19400,19401,19402,19403,19404,19405,19406,19407,19408,19421,19422,19423,19424,19425,19426,19427,19428,19429,19430,19431,19432,19433,19546,19547,19548,19549,19550,19551,19552,19553,19554,19555,19571,19572,19573,19574,19575,19576,19577,19578,19579,19580,19581,19593,19594,19595,19596,19597,19598,19599,19600,19601,19602,19603,19604,19605,19718,19719,19720,19721,19722,19723,19724,19725,19726,19727,19743,19744,19745,19746,19747,19748,19749,19750,19751,19752,19753,19754,19755,19756,19757,19758,19766,19767,19768,19769,19770,19771,19772,19773,19774,19775,19776,19777,19890,19891,19892,19893,19894,19895,19896,19897,19898,19899,19915,19916,19917,19918,19919,19920,19921,19922,19923,19924,19925,19926,19927,19928,19929,19930,19931,19938,19939,19940,19941,19942,19943,19944,19945,19946,19947,19948,19949,20062,20063,20064,20065,20066,20067,20068,20069,20070,20071,20087,20088,20089,20090,20091,20092,20093,20094,20095,20096,20097,20098,20099,20100,20101,20102,20103,20112,20113,20114,20115,20116,20117,20118,20119,20120,20121,20234,20235,20236,20237,20238,20239,20240,20241,20242,20243,20259,20260,20261,20262,20263,20264,20265,20266,20267,20268,20269,20270,20271,20272,20273,20274,20275,20284,20285,20286,20287,20288,20289,20290,20291,20292,20293,20406,20407,20408,20409,20410,20411,20412,20413,20414,20415,20416,20430,20431,20432,20433,20434,20435,20436,20437,20438,20439,20440,20441,20442,20443,20444,20445,20446,20447,20448,20456,20457,20458,20459,20460,20461,20462,20463,20464,20465,20578,20579,20580,20581,20582,20583,20584,20585,20586,20587,20588,20589,20590,20598,20599,20600,20601,20602,20603,20604,20605,20606,20607,20608,20609,20610,20611,20612,20613,20614,20615,20616,20617,20618,20619,20620,20621,20622,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20750,20751,20752,20753,20754,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20769,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20799,20800,20801,20802,20803,20804,20805,20806,20807,20808,20809,20922,20923,20924,20925,20926,20927,20928,20929,20930,20931,20932,20933,20934,20935,20936,20937,20938,20939,20940,20941,20942,20943,20944,20945,20946,20947,20948,20949,20950,20951,20952,20953,20954,20955,20956,20957,20958,20959,20960,20961,20962,20963,20964,20965,20966,20967,20968,20969,20970,20971,20972,20973,20974,20975,20976,20977,20978,20979,20980,20981,26944,26945,26946,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26964,26965,26966,26967,26968,26969,26970,26971,26972,26973,26974,26975,26976,26977,26978,26979,26980,26981,26982,26983,26984,26985,26986,26987,26988,26989,26990,26991,26992,26993,26994,26995,26996,26997,26998,26999,27000,27001,27116,27117,27118,27119,27120,27121,27122,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27133,27134,27135,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27146,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27159,27160,27161,27162,27163,27164,27165,27166,27167,27168,27169,27170,27171,27172,27173,27288,27289,27290,27291,27292,27293,27294,27295,27296,27297,27298,27299,27300,27301,27302,27304,27305,27306,27307,27308,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27460,27461,27462,27463,27464,27465,27466,27467,27468,27469,27470,27471,27472,27473,27474,27476,27477,27478,27479,27480,27481,27482,27483,27484,27485,27486,27487,27488,27489,27490,27491,27492,27493,27494,27495,27496,27497,27498,27499,27500,27501,27502,27504,27505,27506,27507,27508,27509,27510,27511,27512,27513,27514,27515,27516,27517,27632,27633,27634,27635,27636,27637,27638,27639,27640,27641,27642,27643,27644,27645,27650,27651,27652,27653,27654,27655,27656,27657,27658,27659,27660,27661,27662,27663,27664,27665,27666,27667,27668,27669,27670,27671,27672,27673,27677,27678,27679,27680,27681,27682,27683,27684,27685,27686,27687,27688,27689,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,27815,27823,27824,27825,27826,27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,27839,27840,27841,27842,27843,27844,27845,27849,27850,27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27976,27977,27978,27979,27980,27981,27982,27983,27984,27985,27986,27996,27997,27998,27999,28000,28001,28002,28003,28004,28005,28006,28007,28008,28009,28010,28011,28012,28013,28014,28015,28016,28017,28026,28027,28028,28029,28030,28031,28032,28033,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28198,28199,28200,28201,28202,28203,28204,28205,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,28355,28371,28372,28373,28374,28375,28376,28377,28492,28493,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28504,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28542,28543,28544,28545,28546,28547,28548,28549,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,28703,28704,28705,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29052,29053,29054,29055,29056,29057,29058,29059,29060,29061,29062,29063,29064,29065,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29190,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29213,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229,29230,29231,29232,29233,29234,29235,29236,29237,29352,29353,29354,29355,29356,29357,29358,29359,29360,29361,29362,29363,29364,29365,29366,29367,29368,29369,29370,29371,29372,29373,29374,29375,29376,29377,29378,29379,29380,29381,29382,29383,29384,29385,29386,29387,29388,29389,29390,29391,29392,29393,29394,29395,29396,29397,29398,29399,29400,29401,29402,29403,29404,29405,29406,29407,29408,29409,29524,29525,29526,29527,29528,29529,29530,29531,29532,29533,29534,29535,29536,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29548,29549,29550,29551,29552,29553,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29566,29567,29568,29569,29570,29571,29572,29573,29574,29575,29576,29577,29578,29579,29580,29581,29724,29725,29726,29727,29728,29729,29730,29731,29732,29733,29734,29735,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29746,29747,29748,29749,29750,29751,29752,29753,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29906,29907,29908,29909,29910,29911,29912,29913,29914,29915,29916,29917,29918,29919,29920,29921,29922,29923,29924,29925,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30412,30413,30414,30415,30416,30417,30418,30419,30420,30421,30422,30423,30424,30425,30426,30427,30428,30429,30430,30431,30432,30433,30434,30435,30436,30437,30438,30439,30440,30441,30584,30585,30586,30587,30588,30589,30590,30591,30592,30593,30594,30595,30596,30597,30598,30599,30600,30601,30602,30603,30604,30605,30606,30607,30608,30609,30610,30611,30612,30613,30756,30757,30758,30759,30760,30761,30762,30763,30764,30765,30766,30767,30768,30769,30770,30771,30772,30773,30774,30775,30776,30777,30778,30779,30780,30781,30782,30783,30784,30785,30928,30929,30930,30931,30932,30933,30934,30935,30936,30937,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30952,30953,30954,30955,30956,30957,31103,31104,31105,31106,31107,31108,31109,31110,31111,31112,31113,31114,31115,31116,31117,31118,31119,31120,31121,31122,31123,31124,31125,31126,31127,31128,31275,31276,31277,31278,31279,31280,31281,31282,31283,31284,31285,31286,31287,31289,31290,31291,31292,31293,31294,31295,31296,31297,31298,31299,31300,31447,31448,31449,31450,31451,31452,31453,31454,31455,31456,31457,31458,31459,31461,31462,31463,31464,31465,31466,31467,31468,31469,31470,31471,31472,31619,31620,31621,31622,31623,31624,31625,31626,31627,31636,31637,31638,31639,31640,31641,31642,31643,31644,31791,31792,31793,31794,31795,31796,31797,31798,31799,31808,31809,31810,31811,31812,31813,31814,31815,31816,31963,31964,31965,31966,31967,31968,31969,31970,31971,31981,31982,31983,31984,31985,31986,31987,31988,32135,32136,32137,32138,32139,32140,32141,32142,32143,32153,32154,32155,32156,32157,32158,32159,32160,32307,32308,32309,32310,32311,32312,32313,32314,32315,32325,32326,32327,32328,32329,32330,32331,32332,32479,32480,32481,32482,32483,32484,32485,32486,32487,32497,32498,32499,32500,32501,32502,32503,32504,32651,32652,32653,32654,32655,32656,32657,32658,32659,32660,32667,32668,32669,32670,32671,32672,32673,32674,32675,32676,32823,32824,32825,32826,32827,32828,32829,32830,32831,32832,32833,32834,32839,32840,32841,32842,32843,32844,32845,32846,32847,32848,32995,32996,32997,32998,32999,33000,33001,33002,33003,33004,33005,33006,33007,33008,33009,33010,33011,33012,33013,33014,33015,33016,33017,33018,33019,33020,33167,33168,33169,33170,33171,33172,33173,33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186,33187,33188,33189,33190,33191,33192,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37828,37829,37830,37831,37832,37833,37834,37835,37836,37837,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,38001,38002,38003,38004,38005,38006,38007,38008,38009,38124,38125,38126,38127,38128,38129,38130,38131,38132,38133,38134,38135,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38174,38175,38176,38177,38178,38179,38180,38181,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38346,38347,38348,38349,38350,38351,38352,38353,38468,38469,38470,38471,38472,38473,38474,38475,38476,38477,38478,38479,38519,38520,38521,38522,38523,38524,38525,38640,38641,38642,38643,38644,38645,38646,38647,38648,38649,38650,38651,38652,38658,38659,38660,38691,38692,38693,38694,38695,38696,38697,38812,38813,38814,38815,38816,38817,38818,38819,38820,38821,38822,38823,38824,38825,38830,38831,38832,38833,38846,38847,38848,38849,38850,38851,38855,38856,38857,38858,38864,38865,38866,38867,38868,38869,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,39002,39003,39004,39005,39006,39007,39008,39009,39017,39018,39019,39020,39021,39022,39023,39024,39025,39026,39027,39028,39029,39030,39036,39037,39038,39039,39040,39041,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39174,39175,39176,39177,39178,39179,39180,39181,39182,39183,39184,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39207,39208,39209,39210,39211,39212,39213,39328,39329,39330,39331,39332,39333,39334,39335,39336,39337,39338,39339,39340,39341,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39378,39379,39380,39381,39382,39383,39384,39385,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39532,39533,39534,39535,39536,39537,39538,39539,39540,39541,39542,39543,39544,39545,39550,39551,39552,39553,39554,39555,39556,39557,39672,39673,39674,39675,39676,39677,39678,39679,39680,39681,39682,39683,39684,39690,39691,39692,39693,39694,39695,39696,39697,39698,39699,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39711,39712,39721,39722,39723,39724,39725,39726,39727,39728,39729,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39892,39893,39894,39895,39896,39897,39898,39899,39900,39901,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40063,40064,40065,40066,40067,40068,40069,40070,40071,40072,40073,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40532,40533,40534,40535,40536,40537,40538,40539,40540,40541,40542,40543,40544,40545,40546,40553,40554,40555,40556,40557,40558,40559,40560,40561,40562,40563,40564,40565,40566,40567,40568,40578,40579,40580,40581,40582,40583,40584,40585,40586,40587,40588,40589,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40715,40716,40717,40725,40726,40727,40728,40729,40730,40731,40732,40733,40734,40735,40736,40737,40738,40739,40740,40741,40750,40751,40752,40753,40754,40755,40756,40757,40758,40759,40760,40761,40876,40877,40878,40879,40880,40881,40882,40883,40884,40885,40886,40887,40888,40889,40897,40898,40899,40900,40901,40902,40903,40904,40905,40906,40907,40908,40909,40910,40911,40912,40913,40923,40924,40925,40926,40927,40928,40929,40930,40931,40932,40933,41048,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41060,41068,41069,41070,41071,41072,41073,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41086,41095,41096,41097,41098,41099,41100,41101,41102,41103,41104,41105,41220,41221,41222,41223,41224,41225,41226,41227,41228,41229,41230,41231,41232,41239,41240,41241,41242,41243,41244,41245,41246,41247,41248,41249,41250,41251,41252,41253,41254,41255,41256,41257,41258,41259,41260,41266,41267,41268,41269,41270,41271,41272,41273,41274,41275,41276,41277,41392,41393,41394,41395,41396,41397,41398,41399,41400,41401,41402,41403,41404,41405,41410,41411,41412,41413,41414,41415,41416,41417,41418,41419,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41432,41433,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41448,41449,41564,41565,41566,41567,41568,41569,41570,41571,41572,41573,41574,41575,41576,41577,41578,41579,41580,41581,41582,41583,41584,41585,41586,41587,41588,41589,41590,41591,41592,41593,41594,41595,41596,41597,41598,41599,41600,41601,41602,41603,41604,41605,41606,41607,41608,41609,41610,41611,41612,41613,41614,41615,41616,41617,41618,41619,41620,41621,41736,41737,41738,41739,41740,41741,41742,41743,41744,41745,41746,41747,41748,41749,41750,41751,41752,41753,41754,41755,41756,41757,41758,41759,41760,41761,41762,41763,41764,41765,41766,41767,41768,41769,41770,41771,41772,41773,41774,41775,41776,41777,41778,41779,41780,41781,41782,41783,41784,41785,41786,41787,41788,41789,41790,41791,41792,41793,43456,43457,43458,43459,43460,43461,43462,43463,43464,43465,43466,43467,43468,43469,43470,43471,43472,43473,43474,43475,43476,43477,43478,43479,43480,43481,43482,43483,43484,43485,43486,43487,43488,43489,43490,43491,43492,43493,43494,43495,43496,43497,43498,43499,43500,43501,43502,43503,43504,43505,43506,43507,43508,43509,43510,43511,43512,43513,43628,43629,43630,43631,43632,43633,43634,43635,43636,43637,43638,43639,43640,43641,43642,43643,43644,43645,43646,43647,43648,43649,43650,43651,43652,43653,43654,43655,43656,43657,43658,43659,43660,43661,43662,43663,43664,43665,43666,43667,43668,43669,43670,43671,43672,43673,43674,43675,43676,43677,43678,43679,43680,43681,43682,43683,43684,43685,43800,43801,43802,43803,43804,43805,43806,43807,43808,43809,43810,43811,43812,43813,43814,43815,43816,43817,43818,43819,43820,43821,43822,43823,43824,43825,43826,43827,43828,43829,43830,43831,43832,43833,43834,43836,43837,43838,43839,43840,43841,43842,43843,43844,43845,43846,43847,43848,43849,43850,43851,43852,43853,43854,43855,43856,43857,43972,43973,43974,43975,43976,43977,43978,43979,43980,43993,43994,43995,43996,43997,43998,43999,44000,44001,44002,44003,44004,44005,44015,44016,44017,44018,44019,44020,44021,44022,44023,44024,44025,44026,44027,44028,44029,44144,44145,44146,44147,44148,44149,44150,44151,44152,44165,44166,44167,44168,44169,44170,44171,44172,44173,44174,44175,44176,44188,44189,44190,44191,44192,44193,44194,44195,44196,44197,44198,44199,44200,44201,44316,44317,44318,44319,44320,44321,44322,44323,44324,44337,44338,44339,44340,44341,44342,44343,44344,44345,44346,44347,44348,44349,44361,44362,44363,44364,44365,44366,44367,44368,44369,44370,44371,44372,44373,44488,44489,44490,44491,44492,44493,44494,44495,44496,44509,44510,44511,44512,44513,44514,44515,44516,44517,44518,44519,44520,44534,44535,44536,44537,44538,44539,44540,44541,44542,44543,44544,44545,44660,44661,44662,44663,44664,44665,44666,44667,44668,44681,44682,44683,44684,44685,44686,44687,44688,44689,44690,44691,44692,44693,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44832,44833,44834,44835,44836,44837,44838,44839,44840,44841,44842,44844,44845,44848,44849,44851,44852,44853,44854,44855,44856,44857,44858,44859,44860,44861,44862,44863,44864,44865,44866,44867,44868,44869,44880,44881,44882,44883,44884,44885,44886,44887,44888,44889,45004,45005,45006,45007,45008,45009,45010,45011,45012,45013,45014,45015,45016,45017,45018,45019,45020,45021,45023,45024,45025,45026,45027,45028,45029,45030,45031,45032,45033,45034,45035,45036,45037,45038,45039,45040,45041,45042,45043,45052,45053,45054,45055,45056,45057,45058,45059,45060,45061,45176,45177,45178,45179,45180,45181,45182,45183,45184,45185,45186,45187,45188,45189,45190,45191,45192,45193,45195,45196,45197,45198,45199,45200,45201,45202,45203,45204,45205,45206,45207,45208,45209,45210,45211,45212,45213,45214,45215,45216,45224,45225,45226,45227,45228,45229,45230,45231,45232,45233,45348,45349,45350,45351,45352,45353,45354,45355,45356,45357,45358,45360,45361,45362,45363,45364,45365,45367,45368,45369,45370,45371,45372,45373,45374,45375,45376,45377,45378,45379,45380,45381,45382,45383,45384,45385,45386,45387,45388,45389,45390,45396,45397,45398,45399,45400,45401,45402,45403,45404,45405,45520,45521,45522,45523,45524,45525,45526,45527,45528,45529,45530,45532,45533,45534,45535,45536,45537,45539,45540,45541,45542,45543,45544,45545,45546,45547,45548,45549,45550,45551,45552,45553,45554,45555,45556,45557,45558,45559,45560,45561,45562,45563,45567,45568,45569,45570,45571,45572,45573,45574,45575,45576,45577,45692,45693,45694,45695,45696,45697,45698,45699,45700,45701,45702,45704,45705,45706,45707,45708,45709,45711,45712,45713,45714,45715,45716,45717,45718,45719,45720,45721,45722,45723,45724,45725,45726,45727,45728,45729,45730,45731,45732,45733,45734,45735,45736,45737,45738,45739,45740,45741,45742,45743,45744,45745,45746,45747,45748,45749,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45876,45877,45878,45879,45880,45881,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,46036,46037,46038,46039,46040,46041,46042,46043,46044,46045,46046,46048,46049,46050,46051,46052,46053,46055,46056,46057,46058,46059,46060,46061,46062,46063,46064,46065,46208,46209,46210,46211,46212,46213,46214,46215,46216,46217,46218,46220,46221,46222,46223,46224,46225,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46237,46380,46381,46382,46383,46384,46385,46386,46387,46388,46389,46390,46392,46393,46394,46395,46396,46397,46399,46400,46401,46402,46403,46404,46405,46406,46407,46408,46409,46552,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46564,46565,46566,46567,46568,46569,46571,46572,46573,46574,46575,46576,46577,46578,46579,46580,46581,46724,46725,46726,46727,46728,46729,46730,46731,46732,46737,46738,46739,46740,46745,46746,46747,46748,46749,46750,46751,46752,46753,46896,46897,46898,46899,46900,46901,46902,46903,46904,46910,46911,46917,46918,46919,46920,46921,46922,46923,46924,46925,47068,47069,47070,47071,47072,47073,47074,47075,47076,47077,47082,47083,47089,47090,47091,47092,47093,47094,47095,47096,47097,47240,47241,47242,47243,47244,47245,47246,47247,47248,47254,47255,47261,47262,47263,47264,47265,47266,47267,47268,47269,47412,47413,47414,47415,47416,47417,47418,47419,47420,47421,47426,47427,47432,47433,47434,47435,47436,47437,47438,47439,47440,47441,47584,47585,47586,47587,47588,47589,47590,47591,47592,47593,47594,47595,47596,47597,47598,47599,47600,47601,47602,47603,47604,47605,47606,47607,47608,47609,47610,47611,47612,47613,47756,47757,47758,47759,47760,47761,47762,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47784,47785,52084,52085,52086,52087,52088,52089,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,52105,52106,52107,52108,52109,52110,52111,52112,52113,52256,52257,52258,52259,52260,52261,52262,52263,52264,52265,52266,52267,52268,52269,52270,52271,52272,52273,52274,52275,52276,52277,52278,52279,52280,52281,52282,52283,52284,52285,52428,52429,52430,52431,52432,52433,52434,52435,52436,52437,52438,52439,52440,52441,52442,52443,52444,52445,52446,52447,52448,52449,52450,52451,52452,52453,52454,52455,52456,52457,52600,52601,52602,52603,52604,52605,52606,52607,52608,52609,52610,52611,52612,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52628,52629,52772,52773,52774,52775,52776,52777,52778,52779,52780,52781,52782,52783,52784,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52944,52945,52946,52947,52948,52949,52950,52951,52952,52953,52954,52964,52965,52966,52967,52968,52969,52970,52971,52972,52973,53116,53117,53118,53119,53120,53121,53122,53123,53124,53125,53126,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53288,53289,53290,53291,53292,53293,53294,53295,53296,53297,53298,53299,53307,53308,53309,53310,53311,53312,53313,53314,53315,53316,53317,53460,53461,53462,53463,53464,53465,53466,53467,53468,53469,53470,53471,53472,53478,53479,53480,53481,53482,53483,53484,53485,53486,53487,53488,53489,53632,53633,53634,53635,53636,53637,53638,53639,53640,53641,53642,53643,53644,53645,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53804,53805,53806,53807,53808,53809,53810,53811,53812,53813,53814,53815,53816,53817,53818,53819,53820,53821,53822,53823,53824,53825,53826,53827,53828,53829,53830,53831,53832,53833,53976,53977,53978,53979,53980,53981,53982,53983,53984,53985,53986,53987,53988,53989,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54000,54001,54002,54003,54004,54005,2408,2580,2581,2753,2754,2926,3098,3270,3441,3442,3613,3614,3785,3957,4129,4301,4473,4645,4817,4988,4989,5160,5161,5332,5504,5676,5848,6020,6192,6364,6536,6708,6880,6881,7053,7225,7397,7569,7570,7742,7914,8085,8086,8256,8257,8258,8428,8429,13793,13794,14115,14116,14965,14966,15998,15999,16552,16553,17259,17260,18265,18266,18303,18304,16007,16177,16181,16404,16423,17418,17423,42527,42695,42696,42697,42698,42699,42867,42868,65,66,67,75,76,77,238,239,240,246,247,248,411,412,413,414,415,416,417,418,419,584,585,586,588,589,590,929,933,1101,1105,1439,1440,1441,1442,1452,1453,1454,1455,1610,1611,1614,1615,1623,1624,1627,1628,1782,1787,1795,1800,1954,1972,2126,2144,2298,2316,2470,2488,2642,2660,2814,2831,2832,8397,8398,8399,8422,8423,8424,8568,8569,8570,8595,8596,8597,8740,8741,8768,8769,8912,8941,9084,9113,9256,9285,9428,9457,9600,9628,9629,9772,9773,9800,9945,9946,9972,9976,9977,9978,9979,10117,10118,10144,10151,10152,10289,10290,10316,10324,10325,10461,10488,10497,10633,10659,10660,10669,10805,10831,10840,10841,10977,11003,11004,11011,11012,11013,11149,11175,11176,11180,11181,11182,11183,11184,11321,11348,11352,11353,11354,11355,11493,11520,11665,11692,11739,11837,11864,11911,12009,12036,12082,12083,12181,12208,12237,12238,12239,12240,12241,12242,12243,12244,12249,12250,12251,12252,12253,12254,12255,12353,12354,12379,12380,12384,12385,12386,12387,12388,12389,12390,12391,12392,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12526,12527,12550,12551,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12579,12580,12581,12588,12589,12590,12591,12592,12593,12699,12722,12736,12737,12738,12739,12741,12742,12743,12744,12750,12751,12752,12910,12911,12912,12913,12914,12915,12916,12917,12921,12922,12923,13083,13084,13085,13088,13089,13090,13091,13092,13093,13094,13261,13262,13264,13265,14492,14493,14494,14495,14496,14497,14498,14663,14664,14670,14671,14834,14835,14843,14844,15006,15016,15178,15188,15350,15360,15522,15523,15531,15532,15694,15695,15696,15702,15703,15704,15867,15868,15869,15870,15872,15873,15874,15875,16040,16041,16042,16044,16045,16046,104,105,106,107,108,109,193,194,195,196,197,198,213,214,215,216,217,218,219,220,224,229,230,231,232,233,249,250,251,252,253,254,255,256,260,271,272,273,274,275,276,277,278,279,280,281,282,283,284,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,440,441,442,443,444,445,446,447,448,453,454,455,456,519,520,521,522,523,524,525,526,529,530,531,532,533,534,535,536,537,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,564,565,566,567,568,569,570,571,572,573,577,578,579,580,581,582,583,591,592,593,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,628,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,719,720,721,722,723,724,754,755,756,762,763,764,781,782,783,784,788,789,790,791,792,793,794,795,800,801,860,861,862,863,870,871,872,873,877,878,879,880,881,882,883,884,885,886,899,900,901,902,903,904,905,906,910,911,912,913,914,915,916,917,918,919,920,921,922,927,928,929,930,932,933,934,935,946,947,948,949,950,951,952,953,958,959,960,967,968,972,973,1032,1033,1034,1036,1037,1038,1039,1040,1041,1042,1047,1048,1049,1058,1059,1060,1065,1066,1067,1068,1069,1070,1071,1078,1079,1080,1081,1082,1094,1095,1096,1097,1098,1100,1101,1102,1104,1105,1106,1108,1109,1110,1111,1114,1115,1116,1117,1118,1125,1126,1127,1128,1129,1130,1140,1145,1207,1208,1214,1215,1216,1217,1218,1219,1226,1227,1228,1229,1232,1233,1234,1235,1236,1237,1270,1271,1279,1280,1283,1284,1285,1286,1311,1312,1316,1317,1378,1379,1397,1398,1401,1402,1443,1444,1445,1446,1448,1449,1450,1451,1483,1484,1488,1550,1569,1574,1655,1660,1722,1741,1742,1745,1746,1826,1827,1832,1893,1894,1913,1914,1915,1916,1917,1918,1959,1960,1961,1962,1964,1965,1966,1967,1998,1999,2003,2004,2065,2086,2087,2088,2089,2135,2170,2175,2236,2237,2341,2342,2347,2513,2514,2519,2520,2643,2659,2685,2691,2692,2759,2760,2761,2762,2763,2802,2803,2804,2805,2815,2816,2817,2818,2828,2829,2830,2831,2857,2864,2930,2931,2932,2934,2935,2936,2964,2973,2974,2977,2978,2987,2988,2989,2990,3000,3001,3002,3003,3029,3036,3102,3103,3107,3108,3128,3136,3145,3150,3162,3163,3171,3172,3196,3197,3198,3199,3201,3202,3208,3274,3280,3300,3307,3308,3317,3318,3321,3322,3334,3335,3336,3342,3343,3344,3367,3368,3371,3372,3374,3379,3380,3446,3452,3472,3473,3476,3477,3478,3479,3480,3489,3490,3491,3492,3493,3494,3507,3508,3509,3510,3511,3512,3513,3514,3515,3539,3544,3546,3551,3618,3619,3623,3624,3644,3645,3646,3647,3648,3649,3650,3651,3662,3663,3664,3665,3680,3681,3682,3684,3685,3686,3711,3712,3715,3716,3718,3723,3791,3792,3793,3794,3795,3817,3818,3819,3820,3883,3884,3885,3886,3887,3888,3890,3891,3895,3896,4056,4057,4058,4059,4063,4064,4067,4068,4236,4237,4240,4409,4412,4581,4584,4681,4682,4683,4684,4685,4688,4689,4690,4704,4713,4753,4756,4850,4851,4852,4853,4854,4855,4856,4857,4860,4861,4862,4863,4876,4885,4924,4925,4928,5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5034,5035,5036,5048,5049,5056,5057,5076,5077,5078,5080,5081,5095,5096,5097,5100,5171,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5207,5208,5209,5220,5221,5222,5227,5228,5229,5247,5248,5251,5253,5254,5264,5266,5267,5268,5271,5272,5335,5343,5353,5354,5355,5356,5357,5372,5373,5376,5377,5380,5381,5382,5393,5394,5395,5396,5397,5398,5399,5400,5419,5426,5435,5436,5438,5439,5443,5507,5514,5515,5522,5523,5524,5525,5526,5543,5544,5549,5550,5553,5554,5566,5567,5568,5569,5570,5571,5591,5592,5597,5598,5607,5608,5615,5679,5680,5685,5686,5687,5693,5694,5695,5696,5697,5707,5708,5709,5710,5711,5712,5713,5714,5715,5722,5723,5726,5763,5764,5765,5766,5767,5768,5769,5770,5779,5787,5788,5851,5852,5853,5854,5855,5856,5857,5858,5865,5866,5872,5873,5874,5875,5876,5877,5878,5879,5895,5898,5919,5926,5927,5928,5929,5930,5936,5937,5938,5939,5940,5941,5950,5951,5959,5960,6024,6025,6026,6027,6028,6029,6037,6043,6044,6067,6070,6091,6095,6096,6097,6098,6099,6100,6101,6102,6103,6122,6123,6132,6209,6214,6215,6239,6242,6263,6264,6266,6267,6268,6269,6270,6274,6275,6276,6277,6278,6279,6285,6294,6303,6304,6380,6381,6386,6411,6414,6415,6435,6436,6437,6438,6439,6447,6448,6449,6450,6451,6452,6457,6465,6466,6475,6551,6552,6553,6558,6583,6584,6586,6587,6588,6608,6609,6610,6623,6624,6625,6628,6629,6637,6638,6647,6716,6717,6718,6719,6720,6721,6723,6724,6730,6756,6757,6759,6760,6784,6785,6786,6787,6788,6796,6797,6798,6799,6800,6801,6809,6819,6888,6889,6890,6891,6892,6893,6895,6901,6902,6929,6932,6938,6956,6957,6959,6960,6961,6969,6970,6971,6972,6980,6981,6990,6991,7060,7073,7101,7104,7110,7120,7128,7132,7133,7152,7153,7156,7158,7162,7231,7232,7245,7273,7276,7282,7283,7292,7300,7301,7305,7324,7327,7328,7330,7331,7334,7403,7404,7408,7409,7411,7416,7417,7454,7455,7456,7463,7464,7473,7477,7496,7499,7503,7506,7507,7575,7579,7580,7583,7584,7585,7586,7587,7588,7627,7628,7629,7630,7631,7634,7635,7636,7645,7649,7668,7671,7672,7674,7675,7678,7679,7747,7750,7751,7789,7792,7800,7801,7802,7803,7804,7805,7806,7807,7817,7818,7820,7821,7840,7841,7843,7844,7846,7847,7851,7919,7922,7961,7964,7975,7976,7977,7978,7991,8013,8016,8018,8023,8133,8136,8185,8195,8263,8266,8305,8308,8356,8357,8367,8400,8401,8409,8410,8411,8412,8419,8420,8421,8435,8438,8476,8477,8480,8481,8523,8524,8525,8526,8527,8528,8529,8538,8539,8571,8572,8573,8576,8577,8578,8579,8580,8581,8584,8585,8586,8587,8588,8589,8592,8593,8594,8606,8607,8610,8647,8648,8649,8652,8653,8654,8694,8695,8696,8697,8698,8699,8700,8710,8742,8743,8744,8747,8748,8761,8762,8765,8766,8767,8772,8773,8774,8775,8776,8777,8778,8779,8782,8783,8818,8819,8820,8825,8826,8827,8847,8848,8851,8852,8861,8862,8863,8864,8865,8866,8867,8874,8875,8876,8878,8879,8882,8914,8915,8918,8919,8934,8935,8938,8939,8944,8945,8946,8947,8948,8949,8950,8954,8955,8956,8969,8970,8971,8972,8973,8974,8975,8976,8980,8985,8986,8989,8990,8991,8998,8999,9000,9001,9002,9018,9019,9020,9023,9024,9025,9026,9027,9028,9029,9032,9033,9034,9035,9037,9038,9045,9046,9051,9052,9054,9055,9086,9090,9107,9111,9127,9128,9129,9130,9131,9136,9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9161,9162,9171,9172,9173,9174,9175,9189,9190,9191,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9217,9224,9226,9227,9258,9262,9279,9283,9288,9289,9290,9291,9292,9293,9300,9301,9302,9303,9304,9307,9308,9309,9310,9311,9312,9313,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9335,9336,9337,9338,9339,9340,9341,9342,9343,9346,9347,9348,9360,9361,9362,9373,9374,9375,9376,9389,9390,9395,9396,9399,9430,9434,9451,9455,9465,9466,9475,9476,9479,9480,9505,9506,9507,9515,9516,9519,9520,9521,9522,9523,9524,9525,9526,9527,9530,9531,9532,9533,9536,9539,9540,9541,9542,9543,9544,9561,9562,9563,9564,9565,9566,9567,9568,9571,9602,9606,9623,9626,9627,9632,9633,9634,9635,9636,9637,9638,9639,9640,9663,9664,9665,9666,9667,9668,9669,9670,9674,9677,9688,9689,9692,9693,9694,9695,9696,9697,9698,9699,9702,9703,9704,9706,9707,9708,9716,9717,9734,9735,9736,9737,9738,9739,9742,9743,9774,9775,9778,9779,9794,9795,9798,9809,9810,9812,9813,9814,9815,9816,9817,9818,9819,9820,9823,9824,9829,9830,9831,9832,9833,9834,9835,9842,9843,9844,9845,9846,9861,9862,9877,9878,9889,9912,9913,9914,9947,9948,9950,9951,9952,9965,9966,9967,9970,9982,9983,9996,9997,9998,9999,10000,10001,10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10046,10047,10048,10049,10061,10073,10074,10075,10076,10077,10078,10082,10083,10084,10120,10123,10124,10137,10138,10142,10155,10156,10233,10242,10243,10244,10245,10250,10251,10252,10253,10254,10291,10292,10296,10309,10314,10328,10329,10405,10406,10412,10413,10414,10463,10464,10467,10468,10481,10486,10501,10578,10579,10582,10583,10584,10635,10638,10639,10653,10654,10657,10658,10673,10751,10752,10753,10754,10807,10810,10826,10829,10845,10979,10982,10998,11001,11017,11093,11094,11095,11096,11151,11154,11170,11173,11174,11188,11189,11265,11266,11268,11269,11323,11326,11327,11342,11345,11346,11359,11360,11361,11436,11437,11441,11442,11443,11495,11498,11499,11514,11515,11518,11528,11529,11530,11531,11532,11608,11615,11616,11667,11671,11687,11690,11699,11700,11701,11702,11703,11780,11839,11842,11843,11859,11862,11868,11869,11870,11871,11872,11952,12011,12014,12031,12034,12040,12041,12042,12043,12124,12183,12186,12203,12206,12296,12355,12356,12357,12358,12364,12365,12366,12368,12369,12370,12375,12376,12377,12378,12414,12415,12468,12531,12532,12533,12534,12535,12536,12539,12542,12543,12544,12545,12546,12587,12588,12640,12700,12701,12702,12703,12718,12719,12720,12721,12728,12743,12760,12761,12780,12781,12782,12783,12784,12785,12811,12812,12900,12914,12915,12933,12951,12952,12957,12958,12983,13072,13085,13086,13105,13123,13130,13131,13132,13139,13145,13155,13244,13256,13257,13276,13277,13295,13296,13304,13305,13311,13317,13327,13416,13417,13427,13428,13447,13448,13449,13467,13468,13469,13477,13478,13483,13484,13488,13489,13499,13589,13599,13619,13620,13640,13641,13642,13643,13650,13655,13656,13658,13659,13660,13661,13671,13761,13770,13771,13791,13804,13805,13806,13807,13813,13814,13815,13816,13817,13821,13822,13828,13829,13831,13832,13843,13844,13933,13934,13941,13942,13963,13975,13976,13979,13980,13987,13988,13989,13990,13991,13992,13993,13994,14015,14016,14106,14113,14134,14135,14146,14147,14152,14153,14154,14161,14162,14163,14164,14165,14188,14278,14285,14286,14305,14306,14307,14317,14318,14326,14327,14360,14450,14457,14458,14459,14460,14461,14462,14463,14468,14469,14470,14471,14472,14473,14474,14475,14476,14477,14478,14488,14489,14499,14500,14532,14622,14623,14630,14631,14632,14633,14634,14635,14636,14637,14638,14639,14640,14641,14642,14643,14644,14645,14646,14647,14648,14649,14660,14672,14673,14703,14704,14795,14807,14808,14809,14811,14812,14832,14845,14846,14875,14967,15004,15018,15046,15047,15139,15176,15190,15217,15218,15311,15348,15362,15389,15483,15484,15519,15520,15534,15561,15656,15657,15689,15690,15691,15706,15733,15829,15860,15861,15877,15878,15886,15887,15888,15889,15905,16001,16031,16032,16049,16050,16057,16058,16061,16062,16076,16077,16172,16173,16203,16220,16221,16229,16234,16235,16248,16344,16345,16375,16391,16392,16393,16401,16407,16420,16516,16547,16548,16558,16559,16560,16561,16562,16563,16564,16571,16572,16573,16579,16592,16688,16719,16720,16721,16729,16730,16731,16732,16734,16735,16742,16743,16751,16764,16765,16860,16892,16893,16894,16895,16896,16900,16901,16902,16913,16914,16923,16928,16936,16937,16938,17032,17038,17065,17066,17067,17068,17069,17070,17071,17072,17073,17084,17085,17094,17095,17100,17109,17110,17111,17112,17113,17204,17210,17240,17241,17242,17243,17244,17255,17256,17265,17266,17267,17272,17273,17282,17283,17284,17285,17286,17376,17377,17382,17383,17427,17434,17435,17436,17437,17438,17444,17445,17447,17448,17449,17450,17451,17452,17453,17457,17458,17459,17460,17461,17549,17550,17554,17555,17556,17559,17560,17561,17562,17563,17564,17565,17566,17567,17568,17599,17600,17605,17606,17607,17608,17609,17617,17618,17620,17621,17622,17624,17625,17626,17627,17628,17630,17631,17632,17633,17634,17635,17636,17722,17727,17728,17729,17730,17731,17732,17733,17734,17735,17736,17737,17738,17739,17740,17741,17771,17772,17773,17774,17775,17776,17777,17778,17797,17798,17799,17800,17805,17806,17807,17808,17894,17900,17901,17902,17903,17912,17913,17914,17944,17945,17946,17947,17948,17949,17972,18066,18067,18085,18086,18087,18099,18144,18239,18240,18258,18259,18260,18271,18316,18412,18413,18431,18432,18433,18442,18443,18487,18488,18585,18604,18605,18606,18611,18612,18613,18614,18615,18659,18757,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18831,18929,18950,18951,18952,18953,18954,18955,19003,19100,19101,19175,19270,19271,19272,19273,19347,19442,19443,19444,19519,19614,19691,19785,19786,19836,19863,19957,19958,20008,20034,20035,20129,20180,20181,20205,20206,20301,20352,20353,20354,20376,20377,20472,20473,20525,20526,20540,20548,20644,20645,20698,20712,20720,20816,20870,20883,20884,20892,20893,20988,21042,21043,21054,21055,21056,21064,21065,21066,21160,21214,21215,21216,21225,21226,21227,21237,21238,21239,21332,21387,21388,21389,21390,21391,21392,21393,21394,21395,21396,21397,21398,21410,21411,21504,21560,21561,21562,21563,21564,21566,21567,21568,21569,21583,21676,21755,21848,21849,21927,21928,22021,22099,22100,22193,22272,22365,22369,22444,22536,22537,22541,22553,22616,22708,22709,22713,22714,22725,22787,22788,22880,22885,22886,22887,22896,22897,22958,22959,23052,23058,23059,23060,23061,23062,23063,23064,23065,23066,23067,23068,23069,23130,23224,23231,23232,23233,23234,23235,23237,23238,23239,23240,23302,23396,23474,23568,23646,23740,23818,23912,23913,23990,24085,24162,24163,24257,24334,24335,24336,24429,24507,24508,24509,24510,24511,24512,24513,24514,24515,24516,24600,24601,24680,24681,24682,24683,24684,24685,24686,24687,24688,24771,24772,24773,24942,24943,24944,25112,25113,25114,25115,25284,25285,25286,42728,42900,43072,43073,43244,43245,43246,43255,43417,43418,43419,43420,43421,43422,43423,43424,43425,43426,43427,43590,43591,43592,43593,43594,43595,43596,43597,43598,43599,44043,44215,44219,44220,44221,44222,44223,44224,44225,44226,44387,44388,44390,44391,44392,44393,44394,44395,44396,44397,44398,44399,44400,44559,44560,44561,44562,44563,44570,44571,44572,44573,44574,44724,44725,44732,44733,44734,44744,44745,44746,44799,44895,44896,44897,44961,44962,44963,44964,44965,44966,44971,45066,45067,45068,45090,45091,45092,45093,45126,45132,45133,45134,45135,45136,45137,45138,45139,45142,45143,45238,45239,45260,45261,45262,45265,45266,45267,45298,45303,45304,45305,45310,45311,45312,45313,45314,45315,45410,45431,45432,45439,45440,45470,45471,45474,45475,45476,45483,45484,45485,45486,45582,45603,45612,45642,45643,45644,45645,45646,45647,45754,45775,45783,45784,45815,45816,45817,45818,45926,45947,45948,45954,45955,45956,46098,46119,46120,46125,46126,46127,46270,46292,46297,46298,46312,46442,46464,46465,46468,46469,46484,46614,46615,46636,46637,46638,46639,46640,46641,46645,46655,46656,46787,46809,46810,46811,46812,46817,46824,46825,46826,46827,46828,46959,46989,46990,46993,46994,46995,46996,46997,46998,46999,47130,47131,47161,47162,47163,47164,47165,47166,47167,47168,47302,47303,47334,47335,47336,47337,47474,47646,47659,47818,47823,47831,47990,47995,48002,48003,48162,48167,48168,48171,48172,48173,48174,48175,48236,48334,48339,48340,48341,48342,48343,48344,48345,48346,48408,48506,48512,48513,48514,48515,48569,48579,48580,48678,48741,48748,48749,48750,48751,48752,48850,48872,48873,48874,48875,48913,48914,48917,48918,48919,48920,48921,48922,48923,49022,49023,49042,49043,49044,49047,49048,49049,49074,49075,49076,49085,49086,49087,49088,49089,49090,49091,49092,49195,49213,49214,49221,49222,49244,49245,49246,49248,49249,49250,49258,49259,49260,49261,49367,49385,49394,49395,49415,49416,49422,49423,49539,49557,49567,49587,49595,49711,49712,49729,49730,49738,49739,49759,49766,49767,49884,49901,49902,49909,49910,49911,49931,49932,49935,49936,49937,49938,49939,50056,50074,50081,50082,50103,50104,50105,50106,50107,50108,50109,50110,50228,50246,50253,50276,50277,50278,50279,50400,50418,50425,50571,50572,50590,50591,50596,50597,50742,50743,50744,50762,50763,50764,50765,50766,50767,50768,50769,50823,50913,50914,50915,50935,50936,50937,50939,50940,50995,50996,50998,50999,51000,51001,51002,51003,51004,51085,51086,51167,51168,51170,51171,51172,51173,51174,51175,51176,51257,51429,51601,51772,51773,51944,51945,52116,9023,9024,9119,9295,9470,9471,9486,9487,9494,9521,9522,9523,9524,9527,9530,9646,9653,9707,9864,51,52,53,54,86,87,88,89,90,223,225,259,261,262,278,279,366,367,368,369,386,387,388,389,390,391,401,402,403,404,405,422,423,425,445,446,447,448,449,450,451,452,533,534,535,536,537,538,539,540,541,545,546,553,556,557,558,559,560,561,562,563,564,565,567,568,569,570,571,574,575,576,577,578,579,580,581,592,593,594,595,596,597,598,602,603,605,606,607,608,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,691,692,693,694,695,696,697,702,704,705,706,707,708,709,710,711,712,713,714,717,718,719,724,725,726,727,728,729,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,795,796,797,798,799,800,862,863,864,865,866,867,868,869,870,871,872,873,874,876,877,878,879,880,881,882,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,925,926,927,928,929,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,952,953,954,955,956,957,958,959,968,969,970,971,972,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1059,1060,1061,1063,1064,1065,1066,1067,1068,1081,1098,1099,1101,1102,1104,1105,1106,1107,1108,1114,1115,1116,1126,1127,1128,1140,1141,1142,1143,1144,1145,1204,1205,1206,1207,1215,1216,1271,1272,1273,1274,1276,1277,1278,1279,1312,1313,1314,1315,1316,1376,1377,1378,1444,1445,1446,1448,1449,1450,1484,1485,1486,1487,1488,1548,1549,1550,1656,1657,1658,1659,1660,1720,1721,1722,1828,1829,1830,1831,1892,1893,2000,2001,2002,2003,2064,2065,2172,2173,2174,2175,2236,2343,2344,2345,2346,2347,2515,2516,2517,2518,2687,2688,2689,2690,2858,2859,2860,2861,2862,3029,3030,3031,3032,3033,3034,3202,3203,3204,3205,3206,3374,3375,3376,3377,3378,3547,3548,3549,3550,3551,3720,3721,3722,3723,3893,3894,3895,4064,4065,4066,4067,4068,4238,4239,4240,4410,4411,4412,4582,4583,4584,4754,4755,4756,4854,4855,4856,4926,4927,4928,5022,5023,5024,5025,5026,5027,5028,5029,5032,5033,5034,5097,5098,5099,5100,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5204,5205,5206,5207,5269,5270,5271,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5372,5373,5376,5377,5378,5379,5380,5438,5439,5440,5441,5442,5443,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5550,5551,5552,5553,5554,5608,5610,5611,5612,5613,5614,5615,5695,5699,5700,5701,5702,5703,5704,5705,5706,5707,5724,5725,5726,5780,5782,5783,5784,5785,5786,5787,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876,5877,5878,5896,5897,5898,5952,5954,5955,5956,5957,5958,5959,6038,6039,6040,6041,6042,6043,6068,6069,6070,6124,6126,6127,6128,6129,6210,6211,6212,6213,6214,6240,6241,6242,6298,6299,6300,6301,6382,6383,6384,6385,6405,6406,6412,6413,6414,6468,6470,6471,6472,6473,6554,6555,6556,6557,6576,6577,6578,6579,6585,6586,6639,6640,6642,6643,6644,6645,6723,6724,6725,6726,6727,6728,6729,6730,6749,6750,6751,6752,6757,6758,6759,6811,6812,6814,6815,6816,6817,6890,6891,6892,6893,6895,6896,6897,6898,6899,6900,6901,6923,6929,6930,6931,6932,6982,6983,6984,6986,6987,6988,6989,6990,7060,7061,7062,7063,7064,7065,7067,7068,7069,7070,7071,7072,7101,7102,7103,7104,7153,7154,7155,7160,7161,7162,7232,7233,7234,7235,7236,7237,7239,7240,7241,7242,7243,7244,7245,7273,7274,7275,7276,7324,7325,7326,7332,7333,7334,7403,7404,7405,7406,7407,7408,7409,7411,7412,7413,7414,7415,7416,7496,7497,7498,7504,7505,7506,7575,7576,7577,7578,7579,7584,7585,7586,7587,7669,7670,7671,7676,7677,7678,7747,7748,7749,7750,7776,7777,7778,7789,7790,7791,7792,7842,7843,7847,7848,7849,7850,7919,7920,7921,7922,7948,7949,7950,7961,7962,7963,7964,8014,8015,8016,8018,8019,8020,8021,8022,8119,8120,8121,8122,8133,8134,8135,8136,8186,8187,8188,8190,8191,8192,8193,8263,8264,8265,8266,8291,8292,8293,8294,8305,8306,8307,8308,8358,8359,8360,8362,8363,8364,8365,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8435,8436,8437,8438,8462,8463,8464,8465,8466,8477,8478,8479,8480,8530,8531,8532,8534,8535,8536,8537,8573,8574,8575,8576,8577,8578,8579,8580,8585,8586,8587,8588,8589,8590,8591,8592,8607,8608,8609,8610,8634,8635,8636,8637,8638,8649,8650,8651,8652,8698,8699,8700,8701,8702,8703,8704,8706,8707,8708,8709,8744,8745,8746,8747,8762,8763,8764,8765,8779,8780,8781,8782,8806,8807,8808,8809,8810,8821,8822,8823,8824,8825,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8880,8881,8882,8914,8915,8916,8917,8918,8935,8936,8937,8938,8944,8945,8946,8947,8948,8949,8951,8952,8953,8954,8955,8977,8978,8979,8981,8982,8983,8992,8993,8994,8995,8996,8997,8998,9020,9038,9039,9040,9041,9042,9043,9044,9052,9053,9054,9086,9087,9088,9089,9090,9107,9108,9109,9110,9111,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9143,9144,9145,9146,9147,9148,9150,9151,9152,9153,9157,9158,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9191,9192,9195,9196,9198,9199,9211,9212,9213,9214,9225,9226,9258,9259,9260,9261,9262,9279,9280,9281,9282,9283,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9325,9326,9327,9328,9329,9330,9333,9334,9335,9336,9342,9343,9344,9345,9362,9363,9364,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9383,9384,9385,9386,9397,9398,9399,9430,9431,9432,9433,9434,9451,9452,9453,9454,9455,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9479,9480,9481,9482,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9505,9516,9517,9518,9533,9534,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9554,9555,9556,9557,9558,9559,9560,9569,9570,9571,9602,9603,9604,9605,9606,9623,9624,9625,9626,9640,9641,9642,9643,9644,9645,9646,9647,9648,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9689,9690,9691,9692,9693,9703,9704,9705,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9740,9741,9742,9775,9776,9777,9778,9795,9796,9797,9798,9817,9818,9819,9820,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9844,9845,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9874,9875,9876,9877,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9948,9949,9950,9951,9967,9968,9969,9970,10035,10036,10037,10038,10039,10040,10041,10042,10043,10046,10047,10061,10063,10064,10065,10066,10067,10068,10069,10070,10076,10077,10078,10079,10080,10081,10082,10083,10120,10121,10122,10123,10138,10139,10140,10141,10142,10233,10235,10236,10237,10238,10239,10240,10241,10242,10251,10252,10292,10293,10294,10295,10296,10309,10310,10311,10312,10313,10314,10408,10409,10410,10413,10463,10464,10465,10466,10467,10481,10482,10483,10484,10485,10486,10581,10582,10635,10636,10637,10638,10654,10655,10656,10657,10807,10808,10809,10810,10826,10827,10828,10829,10979,10980,10981,10982,10998,10999,11000,11001,11151,11152,11153,11154,11170,11171,11172,11173,11323,11324,11325,11326,11342,11343,11344,11345,11495,11496,11497,11498,11515,11516,11517,11518,11667,11668,11669,11670,11671,11687,11688,11689,11690,11839,11840,11841,11842,11859,11860,11861,11862,12011,12012,12013,12014,12031,12032,12033,12034,12183,12184,12185,12186,12203,12204,12205,12206,12356,12357,12376,12377,15617,15788,15789,15790,15959,15960,15961,16131,16132,16303,10697,10700,10869,10872,11194,11195,11196,11197,11198,11367,11368,11369,11540,12796,12797,12798,12799,12800,12969,12970,12971,13142,16014,16017,16186,16189,19164,19167,19336,19339,12903,12904,13075,13076,14292,14293,14294,14295,15183,20695,20696,20867,20868,23297,23298,23299,23464,23465,23469,23470,23471,23636,23637,23641,23643,33917,34591,35342,38043,38044,38091,38092,38263,38264,38580,39915,39916,40087,40088,40638,42832,42833,42910,19105,19106,20323,20324,20692,20693,20878,20879,21507,21508,21531,21532,22028,22029,22411,22412,22774,22775,23760,23761,19109,19110,19111,19281,19282,19283,19453,19455,19623,19630,19639,19640,19641,19808,19811,19812,19813,19966,19970,20147,20159,20483,20499,20530,20531,20532,20653,20664,20702,20703,20704,20820,20821,20822,20992,20993,20994,21347,21353,21527,21528,21529,21688,21699,21700,21701,22422,22423,22424,22425,22717,22718,22719,22720,22721,22722,23750,23756,23965,23966,23967,23968,24091,18286,19675,20340,11231,11232,11233,11403,11404,11405,17717,17718,17719,17889,17890,17891,17971,18092,18962,18963,18964,19134,19135,19136,33390,33391,33392,33562,33563,33564,36367,36368,36369,36539,36540,36541,36684,36685,36686,36856,36857,36858,38019,38020,38021,38191,38192,38193,40284,40285,40286,40456,40457,40458,42885,42886,42887,43057,43058,43059,33231,33232,33233,33234,33235,33236,33403,33404,33405,33406,33407,33408,33575,33576,33577,33578,33579,33580,33747,33748,33749,33750,33751,33752,33919,33920,33921,33922,33923,33924,34091,34092,34093,34094,34095,34096,34120,34121,34240,34241,34242,34243,34244,34245,34292,34293,34412,34413,34414,34415,34416,34417,34454,34584,34585,34586,34587,34588,34589,34620,34621,34622,34623,34624,34625,34626,34652,34749,34750,34756,34757,34758,34759,34760,34761,34792,34793,34794,34795,34796,34797,34798,34805,34806,34818,34819,34820,34821,34822,34823,34824,34921,34922,34928,34929,34930,34931,34932,34933,34964,34965,34966,34967,34968,34969,34970,34977,34978,34990,34991,34992,34993,34994,34995,34996,35100,35101,35102,35103,35104,35105,35118,35136,35137,35138,35139,35140,35141,35142,35162,35163,35164,35165,35166,35167,35168,35284,35285,35286,35287,35288,35289,35290,35308,35309,35310,35312,35313,35314,35334,35335,35336,35337,35338,35339,35340,35456,35457,35458,35459,35460,35461,35462,35506,35507,35508,35510,35511,35512,35628,35629,35630,35631,35632,35633,35634,35800,35801,35802,35803,35804,35805,35806,35954,35955,35972,35973,35974,35976,35977,35978,36126,36127,36833,36834,36992,36993,36994,36995,36996,36997,37005,37006,37164,37165,37166,37167,37168,37169,37336,37337,37338,37339,37340,37341,37358,37359,37360,37361,37362,37363,37508,37509,37510,37511,37512,37513,37530,37531,37532,37533,37534,37535,37546,37547,37680,37681,37682,37683,37684,37685,37702,37703,37704,37705,37706,37707,37718,37719,37852,37853,37854,37855,37856,37857,37874,37875,37876,37877,37878,37879,38046,38047,38048,38049,38050,38051,38187,38188,38218,38219,38220,38221,38222,38223,38359,38360,38730,38896,38897,38898,38899,38900,38901,38902,39068,39069,39070,39071,39072,39073,39074,39240,39241,39242,39243,39244,39245,39246,39412,39413,39414,39415,39416,39417,39418,39584,39585,39586,39587,39588,39589,39590,39780,39781,39782,39783,39784,39785,39952,39953,39954,39955,39956,39957,39965,39966,39967,39968,39969,39970,40124,40125,40126,40127,40128,40129,40137,40138,40139,40140,40141,40142,40296,40297,40298,40299,40300,40301,40309,40310,40311,40312,40313,40314,40438,40439,40468,40469,40470,40471,40472,40473,40481,40482,40483,40484,40485,40486,40610,40611,40640,40641,40642,40643,40644,40645,40653,40654,40655,40656,40657,40658,40825,40826,40827,40828,40829,40830,41321,41487,41488,41489,41490,41491,41492,41493,41628,41629,41630,41631,41632,41633,41659,41660,41661,41662,41663,41664,41665,41800,41801,41802,41803,41804,41805,41831,41832,41833,41834,41835,41836,41837,41972,41973,41974,41975,41976,41977,42003,42004,42005,42006,42007,42008,42009,42049,42144,42145,42146,42147,42148,42149,42175,42176,42177,42179,42180,42181,42215,42216,42217,42218,42219,42220,42221,42316,42317,42318,42319,42320,42321,42387,42388,42389,42390,42391,42392,42393,42488,42489,42490,42491,42492,42493,42559,42560,42561,42562,42563,42564,42565,42731,42732,42733,42734,42735,42736,42737,42903,42904,42905,42906,42907,42908,42909,43576,43577,43877,43878,43879,43880,43904,43905,43906,43907,43912,43913,43914,43915,37384,37385,37386,37387,37388,37389,37556,37557,37558,37559,37560,37561,37728,37729,37730,37731,37732,37733,37900,37901,37902,37903,37904,37905,38072,38073,38074,38075,38076,38077,41461,41462,41633,41634,41877,41878,42049,42050,32852,32853,32854,32855,32856,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880,32881,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908,32909,32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936,32937,32938,32939,32940,32941,32942,32943,32944,33024,33025,33026,33027,33028,33031,33032,33033,33034,33035,33036,33037,33038,33039,33040,33041,33042,33043,33044,33045,33046,33047,33048,33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33071,33072,33073,33074,33075,33076,33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089,33090,33091,33092,33093,33094,33097,33098,33099,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109,33110,33111,33112,33113,33114,33115,33116,33196,33197,33198,33199,33200,33203,33204,33205,33206,33207,33208,33209,33210,33211,33212,33213,33214,33215,33216,33217,33218,33219,33220,33221,33222,33223,33225,33226,33227,33228,33229,33230,33237,33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255,33256,33258,33259,33260,33261,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33275,33276,33277,33278,33279,33280,33281,33282,33283,33284,33285,33286,33287,33288,33368,33369,33370,33371,33372,33375,33376,33377,33378,33379,33380,33381,33382,33383,33384,33385,33386,33387,33388,33389,33390,33391,33392,33393,33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33405,33406,33407,33408,33409,33415,33416,33417,33418,33419,33420,33421,33422,33423,33424,33425,33426,33427,33428,33429,33430,33431,33432,33433,33434,33435,33436,33437,33438,33441,33442,33443,33444,33445,33446,33447,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33966,33967,33968,33969,33970,33971,33972,33973,33974,33975,33976,34137,34138,34309,34481,34653,34654,34825,34826,34827,34998,34999,35000,35171,35172,35344,35515,35516,35687,35859,35860,36031,36032,36033,36204,36205,36206,36377,36378,36379,36550,36551,36552,36723,36724,36896,37067,37068,37239,37411,37583,37584,37755,37756,37757,37928,37929,38101,38272,38273,38443,38444,38615,38786,38787,38955,38956,38957,38958,39126,39127,39298,39468,39469,39470,39639,39640,39811,39983,39984,40155,40156,40157,40158,40159,40160,40328,40329,40331,40332,40333,40504,40505,40677,40849,41021,41022,41193,41194,41195,41366,41367,41368,41539,41540,41541,41542,41712,41713,41714,41715,41716,41886,41887,41888,42060,42568,42740,42912,43084,43256,43428,33540,33541,33598,33599,33600,33601,33602,33603,33610,33613,33622,33623,33624,33625,33626,33627,33628,33629,33630,33631,33632,33713,33714,33769,33770,33775,33776,33777,33778,33779,33780,33781,33782,33785,33786,33787,33793,33794,33886,33941,33959,33960,33961,33962,33963,33964,33965,34058,34113,34230,34284,34285,34401,34402,34456,34573,34574,34628,34745,34800,34917,34918,34919,34972,34973,35091,35092,35093,35094,35095,35145,35267,35268,35317,35440,35489,35612,35613,35661,35673,35676,35785,35833,35834,35839,35840,35841,35842,35845,35848,35957,36005,36006,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36017,36020,36021,36129,36178,36179,36180,36181,36182,36183,36186,36187,36188,36189,36192,36193,36194,36195,36196,36197,36199,36200,36201,36202,36300,36301,36365,36366,36367,36368,36369,36371,36373,36374,36375,36376,36471,36472,36473,36546,36547,36548,36640,36641,36642,36643,36644,36720,36811,36812,36813,36814,36815,36891,36892,36983,36984,37062,37063,37155,37234,37326,37327,37406,37498,37499,37578,37579,37670,37750,37751,37752,37842,37923,37924,38013,38014,38096,38185,38186,38268,38357,38439,38440,38529,38610,38611,38701,38782,38873,38953,38954,39045,39119,39120,39121,39122,39123,39124,39125,39216,39217,39290,39291,39388,39389,39462,39560,39634,39806,39978,40150,40322,40494,40495,40592,40593,40597,40598,40599,40666,40667,40668,40669,40670,40671,40765,40766,40767,40768,40769,40771,40772,40839,40840,40842,40843,40844,40944,40970,40971,40972,40973,40974,40975,40976,40977,40978,41015,41016,41017,41116,41141,41142,41150,41151,41188,41189,41190,41191,41192,41288,41313,41323,41361,41362,41363,41364,41459,41460,41485,41495,41536,41630,41631,41632,41657,41667,41708,41799,41800,41801,41802,41803,41829,41839,41880,41970,41971,41972,41973,41974,42001,42011,42052,42142,42143,42173,42183,42224,42314,42345,42355,42396,42486,42517,42518,42526,42527,42658,42689,42690,42691,42692,42693,42695,42696,42697,42698,42699,42830,42831,42862,42863,42864,42865,42867,42868,42869,42870,43003,43084,43175,43236,43256,43347,43408,43428,43519,43579,43580,43600,43691,43692,43750,43751,43752,43772,43864,43865,43891,43899,43919,43920,43921,43922,43923,43944,44037,44038,44063,44071,44080,44082,44083,44088,44089,44090,44091,44092,44093,44094,44116,44210,44234,44235,44243,44244,44247,44248,44249,44250,44251,44252,44254,44255,44256,44257,44258,44259,44260,44261,44262,44263,44288,44382,44405,44406,44407,44415,44416,44417,44418,44419,44420,44421,44422,44423,44424,44427,44428,44429,44430,44431,44432,44459,44460,44553,44554,44575,44576,44577,44578,44588,44589,44590,44591,44631,44725,44726,44747,44748,44749,44803,44897,44975,44976,45147,45148,45320,45492,45664,45836,46008,46179,46180,46350,46351,46522,46694,46866,47038,47209,47210,47380,47381,47552,47724,47896,48068,48240,48412,48584,48756,48928,48929,49100,49101,49102,49273,49274,49446,49618,49789,49790,49961,50133,50305,50477,50649,50650,50821,50822,50823,50994,50995,50996,50997,51167,51168,51169,37328,37329,38609,38610,38779,38780,38949,38950,39390,39563,39564,40252,40253,41818,41819,41989,41992,42027,42028,42029,42160,42165,42199,42201,42371,42373,42543,42544,42545,42703,42704,42875,42876,37327,37499,37670,37671,37842,37843,38014,38322,38323,38324,38325,38326,38494,38495,38496,38497,38498,38781,38782,38838,38839,38840,38841,38842,38843,38844,38951,38952,38953,39010,39011,39012,39013,39014,39015,39016,39121,39122,39123,39124,39389,39560,39561,39562,39732,39733,39734,39735,39736,39904,39905,39906,39907,40076,40077,40078,40079,40248,40249,40250,40251,40420,40421,40422,40423,40424,40425,40592,40593,40594,40595,40596,40597,40766,40767,40768,41990,41991,42161,42162,42163,42164,42200,42332,42333,42334,42335,42336,42337,42372,42504,42505,42506,42507,42508,42509,42677,42678,42679,42680,42850,42851,51601,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680,51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,23423,37500,37672,37844,44908,44909,45080,45081,45129,45650,45651,45822,45823,46622,46672,46820,47035,47149,47522,48061,48405,48406,48574,48575,48743,48744,49037,49231,49941,50473,50474,51104,51128,51429,51601,51773,51944,51945,52116],\"doors\":[{\"x\":80,\"y\":211,\"p\":0,\"tcx\":148,\"tcy\":306,\"to\":\"u\",\"tx\":155,\"ty\":311},{\"x\":127,\"y\":120,\"p\":0,\"to\":\"d\",\"tx\":65,\"ty\":125},{\"x\":20,\"y\":145,\"p\":0,\"tcx\":151,\"tcy\":115,\"to\":\"u\",\"tx\":157,\"ty\":120},{\"x\":16,\"y\":135,\"p\":0,\"to\":\"u\",\"tx\":147,\"ty\":113},{\"x\":157,\"y\":120,\"p\":0,\"to\":\"d\",\"tx\":20,\"ty\":145},{\"x\":147,\"y\":113,\"p\":0,\"to\":\"d\",\"tx\":16,\"ty\":135},{\"x\":51,\"y\":205,\"p\":0,\"tcx\":147,\"tcy\":138,\"to\":\"u\",\"tx\":154,\"ty\":143},{\"x\":154,\"y\":143,\"p\":0,\"to\":\"d\",\"tx\":51,\"ty\":205},{\"x\":77,\"y\":237,\"p\":1,\"tcx\":72,\"tcy\":231,\"to\":\"d\",\"tx\":82,\"ty\":234},{\"x\":82,\"y\":234,\"p\":1,\"tcx\":65,\"tcy\":235,\"to\":\"d\",\"tx\":77,\"ty\":237},{\"x\":154,\"y\":208,\"p\":0,\"to\":\"d\",\"tx\":154,\"ty\":196},{\"x\":158,\"y\":208,\"p\":0,\"tcx\":120,\"tcy\":210,\"to\":\"u\",\"tx\":127,\"ty\":214},{\"x\":156,\"y\":202,\"p\":0,\"to\":\"d\",\"tx\":158,\"ty\":208},{\"x\":152,\"y\":202,\"p\":0,\"tcx\":120,\"tcy\":205,\"to\":\"d\",\"tx\":123,\"ty\":208},{\"x\":154,\"y\":196,\"p\":0,\"to\":\"u\",\"tx\":133,\"ty\":200},{\"x\":158,\"y\":196,\"p\":0,\"to\":\"d\",\"tx\":131,\"ty\":208},{\"x\":162,\"y\":196,\"p\":0,\"to\":\"u\",\"tx\":127,\"ty\":214},{\"x\":127,\"y\":214,\"p\":0,\"to\":\"d\",\"tx\":154,\"ty\":208},{\"x\":127,\"y\":208,\"p\":0,\"to\":\"u\",\"tx\":156,\"ty\":202},{\"x\":131,\"y\":208,\"p\":0,\"to\":\"u\",\"tx\":120,\"ty\":200},{\"x\":123,\"y\":208,\"p\":0,\"to\":\"u\",\"tx\":127,\"ty\":202},{\"x\":127,\"y\":202,\"p\":0,\"to\":\"d\",\"tx\":127,\"ty\":208},{\"x\":133,\"y\":200,\"p\":0,\"to\":\"d\",\"tx\":158,\"ty\":196},{\"x\":127,\"y\":196,\"p\":0,\"to\":\"d\",\"tx\":154,\"ty\":208},{\"x\":120,\"y\":200,\"p\":0,\"to\":\"d\",\"tx\":127,\"ty\":183},{\"x\":127,\"y\":190,\"p\":0,\"to\":\"d\",\"tx\":74,\"ty\":145},{\"x\":127,\"y\":183,\"p\":0,\"to\":\"u\",\"tx\":120,\"ty\":200},{\"x\":156,\"y\":214,\"p\":0,\"to\":\"d\",\"tx\":74,\"ty\":145},{\"x\":74,\"y\":145,\"p\":0,\"tcx\":149,\"tcy\":211,\"to\":\"u\",\"tx\":156,\"ty\":214},{\"x\":65,\"y\":125,\"p\":0,\"tcx\":120,\"tcy\":115,\"to\":\"u\",\"tx\":127,\"ty\":120},{\"x\":155,\"y\":71,\"p\":0,\"to\":\"d\",\"tx\":71,\"ty\":3},{\"x\":155,\"y\":96,\"p\":0,\"to\":\"d\",\"tx\":71,\"ty\":21},{\"x\":155,\"y\":86,\"p\":0,\"to\":\"u\",\"tx\":71,\"ty\":11},{\"x\":155,\"y\":240,\"p\":0,\"to\":\"d\",\"tx\":18,\"ty\":86},{\"x\":127,\"y\":240,\"p\":0,\"to\":\"d\",\"tx\":19,\"ty\":77},{\"x\":18,\"y\":86,\"p\":0,\"tcx\":149,\"tcy\":236,\"to\":\"u\",\"tx\":155,\"ty\":240},{\"x\":19,\"y\":77,\"p\":0,\"tcx\":123,\"tcy\":236,\"to\":\"u\",\"tx\":127,\"ty\":240},{\"x\":126,\"y\":143,\"p\":0,\"to\":\"d\",\"tx\":77,\"ty\":206},{\"x\":77,\"y\":206,\"p\":0,\"tcx\":119,\"tcy\":138,\"to\":\"u\",\"tx\":126,\"ty\":143},{\"x\":92,\"y\":52,\"p\":0,\"to\":\"u\",\"tx\":79,\"ty\":45},{\"x\":79,\"y\":45,\"p\":0,\"tcx\":89,\"tcy\":50,\"to\":\"d\",\"tx\":92,\"ty\":52},{\"x\":78,\"y\":40,\"p\":0,\"tcx\":112,\"tcy\":91,\"to\":\"u\",\"tx\":117,\"ty\":94},{\"x\":91,\"y\":29,\"p\":0,\"tcx\":125,\"tcy\":86,\"to\":\"d\",\"tx\":135,\"ty\":88},{\"x\":135,\"y\":88,\"p\":0,\"to\":\"u\",\"tx\":91,\"ty\":29},{\"x\":117,\"y\":94,\"p\":0,\"tcx\":72,\"tcy\":40,\"to\":\"d\",\"tx\":78,\"ty\":40},{\"x\":6,\"y\":10,\"p\":0,\"tcx\":149,\"tcy\":180,\"to\":\"d\",\"tx\":156,\"ty\":183},{\"x\":156,\"y\":181,\"p\":0,\"to\":\"u\",\"tx\":6,\"ty\":9},{\"x\":156,\"y\":190,\"p\":0,\"to\":\"d\",\"tx\":9,\"ty\":17},{\"x\":9,\"y\":17,\"p\":0,\"tcx\":149,\"tcy\":185,\"to\":\"u\",\"tx\":156,\"ty\":190},{\"x\":155,\"y\":158,\"p\":0,\"to\":\"u\",\"tx\":104,\"ty\":6},{\"x\":104,\"y\":7,\"p\":0,\"tcx\":148,\"tcy\":157,\"to\":\"d\",\"tx\":155,\"ty\":161},{\"x\":127,\"y\":166,\"p\":0,\"to\":\"d\",\"tx\":26,\"ty\":296},{\"x\":127,\"y\":158,\"p\":0,\"to\":\"u\",\"tx\":25,\"ty\":291},{\"x\":26,\"y\":296,\"p\":0,\"tcx\":120,\"tcy\":162,\"to\":\"u\",\"tx\":127,\"ty\":166},{\"x\":25,\"y\":292,\"p\":0,\"tcx\":120,\"tcy\":157,\"to\":\"d\",\"tx\":127,\"ty\":161},{\"x\":49,\"y\":97,\"p\":0,\"tcx\":151,\"tcy\":259,\"to\":\"u\",\"tx\":157,\"ty\":264},{\"x\":38,\"y\":94,\"p\":0,\"to\":\"d\",\"tx\":147,\"ty\":257},{\"x\":157,\"y\":264,\"p\":0,\"to\":\"d\",\"tx\":49,\"ty\":97},{\"x\":147,\"y\":254,\"p\":0,\"tcx\":28,\"tcy\":90,\"to\":\"u\",\"tx\":38,\"ty\":93},{\"x\":124,\"y\":275,\"p\":0,\"to\":\"d\",\"tx\":75,\"ty\":102},{\"x\":129,\"y\":275,\"p\":0,\"to\":\"d\",\"tx\":79,\"ty\":102},{\"x\":79,\"y\":102,\"p\":0,\"tcx\":120,\"tcy\":270,\"to\":\"u\",\"tx\":129,\"ty\":275},{\"x\":75,\"y\":102,\"p\":0,\"tcx\":120,\"tcy\":270,\"to\":\"u\",\"tx\":124,\"ty\":275},{\"x\":71,\"y\":3,\"p\":0,\"tcx\":148,\"tcy\":65,\"to\":\"u\",\"tx\":155,\"ty\":71},{\"x\":71,\"y\":21,\"p\":0,\"to\":\"u\",\"tx\":155,\"ty\":96},{\"x\":127,\"y\":299,\"p\":0,\"to\":\"d\",\"tx\":38,\"ty\":245},{\"x\":38,\"y\":245,\"p\":0,\"tcx\":120,\"tcy\":294,\"to\":\"u\",\"tx\":127,\"ty\":299},{\"x\":71,\"y\":11,\"p\":0,\"to\":\"d\",\"tx\":155,\"ty\":86},{\"x\":78,\"y\":137,\"p\":0,\"tcx\":149,\"tcy\":291,\"to\":\"u\",\"tx\":156,\"ty\":296},{\"x\":156,\"y\":296,\"p\":0,\"to\":\"d\",\"tx\":78,\"ty\":137},{\"x\":27,\"y\":209,\"p\":0,\"tcx\":148,\"tcy\":281,\"to\":\"u\",\"tx\":155,\"ty\":286},{\"x\":155,\"y\":286,\"p\":0,\"to\":\"d\",\"tx\":27,\"ty\":209},{\"x\":155,\"y\":311,\"p\":0,\"to\":\"d\",\"tx\":80,\"ty\":211},{\"x\":155,\"y\":20,\"p\":0,\"to\":\"d\",\"tx\":18,\"ty\":113},{\"x\":18,\"y\":113,\"p\":0,\"tcx\":148,\"tcy\":15,\"to\":\"u\",\"tx\":155,\"ty\":20},{\"x\":70,\"y\":80,\"p\":0,\"tcx\":155,\"tcy\":31,\"to\":\"u\",\"tx\":166,\"ty\":36},{\"x\":166,\"y\":36,\"p\":0,\"to\":\"d\",\"tx\":70,\"ty\":80},{\"x\":143,\"y\":26,\"p\":0,\"tcx\":49,\"tcy\":75,\"to\":\"d\",\"tx\":54,\"ty\":76},{\"x\":53,\"y\":76,\"p\":0,\"tcx\":140,\"tcy\":27,\"to\":\"d\",\"tx\":143,\"ty\":29},{\"x\":166,\"y\":33,\"p\":1,\"to\":\"l\",\"tx\":160,\"ty\":35},{\"x\":158,\"y\":35,\"p\":1,\"tcx\":142,\"tcy\":28,\"to\":\"l\",\"tx\":150,\"ty\":32},{\"x\":148,\"y\":32,\"p\":1,\"tcx\":148,\"tcy\":26,\"to\":\"l\",\"tx\":158,\"ty\":29},{\"x\":155,\"y\":29,\"p\":1,\"tcx\":140,\"tcy\":26,\"to\":\"l\",\"tx\":142,\"ty\":31},{\"x\":142,\"y\":32,\"p\":1,\"tcx\":155,\"tcy\":31,\"to\":\"d\",\"tx\":166,\"ty\":34}],\"checkpoints\":[{\"id\":1,\"x\":14,\"y\":210,\"w\":9,\"h\":2},{\"id\":2,\"x\":40,\"y\":208,\"w\":6,\"h\":5},{\"id\":3,\"x\":40,\"y\":221,\"w\":5,\"h\":4},{\"id\":4,\"x\":13,\"y\":223,\"w\":4,\"h\":3},{\"id\":5,\"x\":68,\"y\":220,\"w\":5,\"h\":5},{\"id\":6,\"x\":40,\"y\":232,\"w\":5,\"h\":5},{\"id\":7,\"x\":14,\"y\":233,\"w\":4,\"h\":3},{\"id\":8,\"x\":41,\"y\":184,\"w\":8,\"h\":4},{\"id\":9,\"x\":4,\"y\":184,\"w\":4,\"h\":3},{\"id\":10,\"x\":70,\"y\":184,\"w\":4,\"h\":3},{\"id\":11,\"x\":41,\"y\":133,\"w\":4,\"h\":3},{\"id\":12,\"x\":156,\"y\":118,\"w\":3,\"h\":2},{\"id\":13,\"x\":68,\"y\":100,\"w\":4,\"h\":2},{\"id\":14,\"x\":32,\"y\":81,\"w\":10,\"h\":2},{\"id\":15,\"x\":15,\"y\":50,\"w\":6,\"h\":3},{\"id\":16,\"x\":42,\"y\":49,\"w\":4,\"h\":2},{\"id\":17,\"x\":67,\"y\":52,\"w\":4,\"h\":2},{\"id\":18,\"x\":76,\"y\":48,\"w\":4,\"h\":2},{\"id\":19,\"x\":7,\"y\":257,\"w\":4,\"h\":3},{\"id\":20,\"x\":33,\"y\":255,\"w\":5,\"h\":2},{\"id\":21,\"x\":48,\"y\":253,\"w\":3,\"h\":2},{\"id\":22,\"x\":65,\"y\":250,\"w\":7,\"h\":2},{\"id\":23,\"x\":65,\"y\":143,\"w\":5,\"h\":2},{\"id\":24,\"x\":55,\"y\":92,\"w\":6,\"h\":2}],\"data\":[1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,[1379,1326],[1378,1327],[1379,1328],[1378,1346],[1379,1347],[1378,1346],[1379,1347],[1358,1323],1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,[1359,1324],[1358,1325],[1359,1326],[1358,1327],[1359,1328],[1378,1344],[1379,1345],[1378,1344],[1379,1345],[1378,1344],[1379,1345],[1378,1323],[1379,1324],[1356,1325],[1181,1338],1181,1181,[1181,1316],[1358,1326],[1359,1327],[1358,1328],[1359,1346],[1358,1347],[1359,1346],[1358,1323],[1359,1324],[1358,1325],1359,[1358,1383],[1359,1342],[1358,1322],[1359,1323],1358,1359,1358,[1359,1324],[1358,1325],[1359,1326,1328],[1358,1327,1348],[1359,1368],[1358,1328,1388],[1359,1346],[1358,1347],[1359,1346],[1358,1347],[1359,1344],[1358,1345],[1359,1323],[1376,1324],[1181,1318,1325],1181,1181,1181,[1181,1317],1377,1359,1358,1359,1358,1359,[1358,1326],[1359,1327],[1358,1328],[1359,1344],[1358,1345],[1359,1344],[1358,1345],[1359,1348],1364,1365,1366,1367,[419,1343],[420,1344],[419,1345],[420,1323],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,[1358,1326],[1359,1327],[1358,1328],[1359,1344],[1358,1345],[1359,1344],[1358,1347],[1359,1348],1366,1367,1366,1367,[1378,1343],[1379,1346],[1378,1347],[1379,1346],[1378,1347],[1379,1323],[1378,1324],[1379,1325],[1378,1326],[1379,1327],[1378,1328],[1379,1344],[1378,1345],[1379,1346],[1378,1347],[1379,1348],1364,1365,1364,1365,1364,1365,[1358,1343],[1359,1344],[1376,1345],[1181,1318,1346,1436],1291,[1181,1316,1344,1438],[1377,1345],[1378,1346],[1379,1347],[1378,1348],[1379,1304],[1378,1366],[1379,1367],[1378,1343],[1379,1344],[1378,1345],[1379,1346],[1378,1347],[1379,1323,1362],[1378,1324,1342],[1379,1325,1322],[1378,1326,1346],[1379,1327,1724],[1378,1725],[1379,1726],[1378,1347],[1379,1329],[1378,1368],[1379,1328,1388],[1359,1348],[1379,1366],[1378,1367],[1379,1366],[1378,1367],[1379,1364],[1378,1365],[1379,1343],[1378,1344],[1376,1345],[1181,1318,1346,1436],[1379,1291],[1181,1317,1344,1438],[1181,1377,1345],[1378,1346],[1379,1347],[1378,1323],[1379,1326],[1378,1327],[1379,1328],[1378,1346],[1379,1347],[1378,1348],[1379,1364],[1378,1365],[1379,1364],[1378,1365],[1379,1368],[1358,1384],[1181,1380,1385],[1181,1386],[1357,1387],[420,1363],[440,1364],[439,1365],[419,1322],[420,1323],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1378,1379,1378,[1379,1328],[1378,1347],[1379,1347],[1378,1344],[1379,1345],[1378,1346],[1379,1347],[1378,1323],[1379,1326],[1378,1327],[1379,1328],[1378,1346],[1379,1347],[1378,1348],[1379,1364],[1378,1365],[1379,1364],[1378,1367],[1379,1368],[1181,1380,1386],[1181,1387],[1181,1386],[1181,1357,1387],1363,1366,1367,1366,1367,[1358,1343],[1359,1346],[1358,1347],[1359,1346],[1358,1347],[1359,1348],1364,1365,[1358,1366],1367,1368,[1181,1384],[1181,1385],[1181,1384],[1181,1385],[1181,1384],[1181,1385],[1378,1363],[1379,1364],1365,1366,1311,1364,1365,1366,1367,[1181,1368],[1181,1385],[1181,1386],[1181,1387],[1181,1363],1364,1365,1366,1367,[1379,1322],[1358,1323,1362],[1359,1342],[1358,1747],[1359,1744,1727],[1358,1745,1728],[1359,1746,1729],1747,1368,[1379,1328,1388],[1359,1348],[1359,1368],[1181,1386],[1181,1357,1387],[1356,1386],[1181,1387],[1357,1384],[1358,1385],1363,1364,1365,1366,1311,1364,1365,1366,1367,[1358,1343],[1359,1346],[1358,1347],[1359,1348],1366,1367,[1379,1368],[1380,1384],[1181,1385],[1181,1396,1384],[1181,1397,1385],[1181,1398,1388],[1181,1399],[1181,1400],1421,[1181,1336],[1357,1383],[1379,1384],[1379,1385],[439,1342],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1358,1359,[1358,1328],[1359,1329],1367,1367,1364,1365,1366,1367,[1358,1343],[1359,1346],[1358,1347],[1359,1348],1366,1367,1368,[1181,1384],[1181,1385],[1181,1384],[1181,1387],[1181,1399,1388],[1181,1400],1181,1421,[1181,1336],[1357,1383],[1378,1386],[1378,1387],[1181,1356,1386],[1181,1387],[1378,1363],[1379,1366],[1378,1367],[1379,1366],[1378,1367],[1379,1368],[1181,1384],[1357,1385],[1356,1386],[1181,1387],[1181,1388],[1181,1295],[1181,1300],1181,1401,1181,1181,[1181,1383],[1181,1357,1384],[1356,1385],[1181,1386],[1181,1331],[1181,1384],[1181,1385],[1181,1357,1386],[1297,1387],[1298,1388],[1181,1299],[1181,1300],1181,[1181,1383],[1181,1384],[1181,1385],[1181,1386],[1181,1387],[1378,1342],[1379,1322],[1378,1323,1362],[1379,1767],[1378,1764],[1379,1765],[1379,1766],[1379,1767],[1359,1328,1388],[1359,1348],[1181,1368],[1181,1388],1411,[1181,1337],[1181,1338],1401,[1181,1337],1357,[1378,1383],[1356,1384],[1181,1385],[1181,1386],[1280,1331],[1181,1384],[1181,1385],[1181,1386],[1181,1387],[1378,1363],[1379,1366],[1378,1367],[1379,1368],[1181,1386],[1181,1387],[1181,1399,1388],[1181,1400],1181,[1181,1295],[1181,1296],[1181,1297],[1181,1298],[1181,1299],[1181,1319],1411,[1181,1395],[1181,1399],[1181,1357],[1181,1358,1321],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1378,1346],[1379,1347],[1378,1348],[1181,1379,1349],[1181,1387],[1181,1387],[1181,1384],[1181,1385],[1181,1386],[1181,1387],[1378,1363],[1379,1366],[1378,1367],[1379,1368],[1181,1386],[1295,1387],[1181,1300,1388],1181,1181,1401,1421,1181,1181,[1181,1317],[1181,1319],1181,[1181,1337],1357,1356,[1181,1339],1401,[1181,1383],[1357,1386],[1358,1387],[1378,1386],[1379,1387],[1181,1378,1388],[1181,1319],[1181,1395],[1181,1339],1428,[1181,1316],1377,1376,[1181,1318],1428,[1181,1317],[1181,1300],1411,[1181,1395],[1181,1338],1181,1257,1181,1428,[1181,1395],[1181,1396],[1181,1397],[1181,1398],[1181,1338],1428,1181,1411,[1181,1295],[1181,1300],1401,[1181,1362],[1181,1342],[1379,1343],[1379,1345,1231],[1379,1346,7],[1379,9],[1379,1346,63,10],[1379,1347,1231],[1338,1348],[1181,1295,1368],[1181,1388],1181,1428,1181,1181,1181,1181,[1181,1395],[1181,1399],[1181,1338],1401,1428,1257,1181,[1181,1295],[1181,1299],[1181,1300],[1181,1395,1383],[1181,1386],[1181,1387],[1181,1400,1388],1428,1411,1181,[1181,1223],[1181,1224],[1315,1224],[1358,1224],[1359,1224],[1715,1358,1224],[1716,1359,1227],[1181,1376,1249],[1181,1319],1181,1181,[1181,1375],[1181,1358,1321],[420,1322],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1366,1367,[1181,1368],[1181,1369],1181,1181,1428,1181,1181,1411,[1181,1383],[1181,1386],[1181,1387],[1181,1388],[1181,1316],1377,[1181,1376],[1181,1318,1223],[1181,1224],[1181,1317,1224],[1181,1300,1227],[1181,1227],[1181,1227],[1377,1227],[1376,1227],[1181,1227],[1181,1228],[1181,1395],[1181,1400],1181,[1181,1317],[1181,1300],[1181,1395],[1181,1399],[1181,1398],[1181,1399],[1181,1357],[1181,1376],[1181,1300],[1181,1223],[1181,1224],[1377,1227],[1358,1227],[1359,1227],[1376,1227],[1181,1299,1227],[1181,1377,1228],[1181,1376],[1181,1319],1181,[1181,1223],[1181,1224],[1181,1224,1678],[1181,1224,1679],[1181,1224,1680],[1181,1224],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1316,1228],[1181,1377],1376,[1181,1318],1401,[1181,1317,1362],[440,1181,1300,1363],[1181,1365,1251],[1366,7],[1398,9],[1399,1366,83,10],[1358,1367,1251],[1181,1379,1368],[1181,1380,1388],1181,[1181,1317],[1181,1296],[1181,1297],[1181,1298],[1181,1299],[1181,1300],1411,1181,[1181,1316],[1181,1296,1223],[1181,1297,1224],[1181,1224],[1181,1224],[1377,1224,1678],[1358,1224,1679],[1181,1376,1227,1680],[1181,1318,1228],1181,1181,1181,[1181,1317],[1181,1318,1223],[1181,1224],[440,1243],[439,1244],[440,1754,1244],[439,1755,1244],[440,1756,1244],[1735,1244],[1736,1247],[439,1716,1269],[1181,1320,1270],1181,1401,[1181,1395],[1181,1396,1341],[440,1342],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1181,1386],[1181,1387],[1181,1388],[1181,1389],[1181,1223],[1181,1224],[1181,1224],[1181,1224],[1181,1224],[1181,1227],[1181,1228],1421,1181,[1181,1316],1377,[1358,1223],[1359,1224],[420,1243],[419,1244],[420,1244],[420,1247],[419,1247],[420,1247],[419,1247],[420,1247],[419,1247],[420,1248],[1181,1227],[1181,1228],[1181,1295],1377,[1181,1376],[1181,1319],[1181,1223],[1181,1224],[1181,1227],[1181,1336,1227],[1399,1227],[1400,1227],[420,1243],[419,1244],[420,1247],[419,1247],[420,1247],[419,1247],[420,1247],[419,1248],[1358,1227],[1376,1227],[1181,1227],[419,1243],[420,1244],[420,1244,1698],[419,1244,1699],[420,1244,1700],[419,1244],[420,1247],[419,1247],[420,1247],[419,1247],[420,1247],[420,1247],[420,1248],[1358,1227],[1359,1227],[1376,1227],[1181,1299,1228],[1181,1377,1229],[1356,1383],[1181,1396,1385,1271],[1181,1379,1386,7],[1379,9],[1181,1379,1386,83,10],[1181,1378,1387,1271],[1181,1399,1388],[1181,1400],[1181,1317,1223],[1379,1224],[1379,1227],[1379,1228],1379,1359,[1181,1376,1223],[1181,1227],[1181,1227],[1715,1377,1227],[420,1716,1243],[1735,1244],[1736,1244],[1716,1244],[1713,1244,1698],[1714,1244,1699],[1715,1247,1700],[1716,1248],[420,1713,1181,1227],[1714,1181,1227],[1713,1181,1227],[419,1717,1377,1227],[420,1243],[419,1244],[420,1263],[419,1264],420,[419,1833],[420,1834],[419,1693],1735,[1736,1309],[1181,1310],1181,[1181,1295],[1181,1300],1421,[420,1181,1301],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1428,1181,1421,[1181,1242],[439,1243],[440,1244],[439,1244],[440,1244],[439,1244],[440,1247],[419,1248],[1181,1227],[1181,1227],[1377,1227],[1358,1227],[440,1243],[439,1244],[440,1263],[439,1264],440,440,439,[440,1223],[439,1224],[440,1227],[439,1249],[440,1268],[440,1247],[439,1248],[1377,1227],[1378,1227],[1379,1227],[1376,1227],[440,1243],[440,1244],[440,1247],[439,1247],[440,1247],[439,1247],[440,1263],439,[440,1678],[419,1679],[420,1680],439,440,[439,1268],[440,1247],[439,1247],[440,1247],[439,1263],440,[440,1718],[439,1719],[440,1720],439,440,439,440,439,1827,[440,1267],[440,1268],[439,1247],[440,1247],[439,1247],[440,1248],[1181,1356,1249],[1181,1338],1428,[1181,1317,7],9,[1181,1358,83,10],[1181,1376],[1181,1319],[1181,1223],[440,1243],[439,1244],[440,1247],[440,1248],[1379,1227],[1715,1379,1227],[439,1716,1243],[1715,1247],[1716,1247],[1735,1247],[1736,1263],1736,1735,1736,[1733,1718],[1734,1719],[1735,1267,1720],[1736,1268],[1733,1247],[1734,1247],[1733,1247],[439,1737,1247],[440,1263],[419,1264],440,439,419,[420,1853],[440,1854],[439,1855],[440,1732,1328],[1715,1329],[1181,1330],1428,[1181,1395],[1181,1400],[1181,1261],[440,1262],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1181,1181,[1181,1261],[419,1262],[420,1263],[419,1264],420,419,420,[419,1267],[439,1268],[440,1247],[420,1247],[419,1247],[420,1247],[419,1263],[420,1264],419,[420,1678],[419,1679],[420,1680],[419,1261],[420,1358,1262],[419,1359,1244],[420,1358,1247],[419,1359,1269],[420,1270],[420,1267],[419,1268],[420,1247],[419,1247],[420,1247],[420,1247],[419,1263],420,419,420,419,420,419,420,[419,1698],[439,1699],[440,1700],420,419,420,419,420,419,420,419,[420,1738],[419,1739],[420,1740],419,420,419,420,420,419,[420,1674],[1848,1653,1267],[420,1654,1223],[419,1224],[420,1227],[419,1268,1249],[420,1269],[1181,1378,1227],[1181,1379,1227],[1181,1379,1227,7],[1379,9],[1181,1379,1224,83,10],[1181,1379,1227],[1181,1379,1227],[420,1243],[419,1263,1223],[420,1224],[419,1227],[420,1268,1228],[1736,1247],[1735,1247],[1736,1263],1735,1736,1716,1716,1716,1715,1716,[1713,1738],[1714,1739],[1715,1740],1716,1713,1713,1714,[420,1757],419,439,420,419,1827,419,420,[419,1673],[1715,1309],[1716,1349],[1181,1300,1350],1181,1181,1181,[419,1181,1281],[420,1282],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1181,1181,[1181,1281],[420,1282],419,[420,1833],[440,1834],[439,1835],420,419,420,419,420,419,419,420,419,420,[419,1698],[420,1699],[419,1700],[420,1301],[419,1358,1302],[420,1359,1303],[419,1378],[419,1379,1289],[420,1290],419,420,419,419,420,419,420,419,420,419,420,419,420,419,[420,1718],[1828,1719],[420,1720],419,420,419,420,419,420,419,420,[419,1758],[420,1759],[419,1760],420,419,419,420,419,420,[419,1672],[420,1736,1261],[419,1262],[420,1244],[419,1267,1247],[420,1268,1269],[419,1715,1268,1228],[420,1716,1247],[419,1716,1247],[420,1737,1247,7],[419,9],[420,1672,1244,103,10],[419,1715,1247],[420,1716,1247],[419,1263,1261],[420,1262],[419,1244],[420,1247],[419,1248],[1736,1270],1735,1736,1736,1735,1736,1736,1736,1735,1736,[1733,1758],[1734,1759],[1735,1760],1736,1733,1733,[420,1737],419,420,419,[440,1652],[439,1653],[419,1654],[420,1655],[440,1656],[1715,1308],[1716,1309],[419,1359,1310],[1181,1320],1411,1181,1421,[420,1181,1301],[419,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1401,1181,[1181,1301],[440,1302],419,[439,1853],[440,1854],[420,1855],440,439,419,420,440,439,439,419,420,440,[439,1718],[419,1719],[420,1720],[440,1321],[439,1378,1322],[419,1379,1344],[420,1378,1345],[439,1379,1329],[440,1330],439,419,420,439,440,439,440,439,440,439,419,420,440,439,[419,1738],[420,1739],[440,1740],439,440,439,419,420,440,439,419,420,440,439,419,420,439,440,439,440,[439,1712],[440,1301],[439,1302],[1847,1303],420,[440,1289],[439,1735,1290],1715,1716,[440,1717,1084],439,[440,1712,1086],1715,1716,[420,1301],[440,1302],[439,1303],[419,1288],[420,1289],[1715,1290],1735,[419,1736],[420,1753],[439,1754],[440,1755],[420,1756],[439,1716],1715,1716,1713,1714,1715,1716,1713,1714,[440,1737],439,419,[420,1674],1715,1716,1715,1715,1716,[1735,1328],[1736,1329],[439,1379,1330],[1181,1340],1181,1181,[1181,1295],[419,1296,1301],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1181,1222],[1181,1261],[420,1262],[419,1263],420,419,420,419,420,419,1827,419,420,419,420,419,420,419,[420,1738],[419,1739],[420,1740],[419,1341],[420,1342],[419,1364],[420,1365],[419,1368],[420,1388],420,1848,420,419,420,[420,1652],[419,1653],[420,1654],[419,1655],[420,1656],[419,1657],420,419,420,[419,1758],[439,1759],[440,1760],420,419,420,419,420,419,420,419,420,419,420,419,420,419,420,420,419,[420,1732],[419,1281],[420,1282],419,420,[419,1268],[420,1248],[419,1716,1224],[439,1736,1224],[440,1696,1104],[420,1105],[419,1693,1106],[420,1735,1227],[419,1715,1224],[420,1243],[419,1263],420,1828,[420,1289],[1735,1290],1736,[419,1695],420,419,420,420,[419,1693],1735,1736,1733,1734,1735,1713,1714,[420,1734],[419,1696],420,[419,1652],1716,1735,1736,1715,1716,[1736,1288],[1716,1289],[419,1359,1349],[1359,1350],[1181,1360],1181,1401,[1181,1315,1261],[419,1262],[420,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1181,[1181,1281],[419,1282],420,419,420,440,439,440,439,419,420,440,439,419,420,419,420,[419,1758],[420,1759],[419,1760],420,[419,1362],[420,1384],[419,1385],[419,1388],420,419,420,[419,1652],[419,1653],[420,1656],1716,1716,1713,1714,1715,[420,1716],[419,1676],420,419,420,419,420,419,420,419,420,419,420,419,420,419,420,419,420,419,419,420,419,420,[419,1693],[420,1736,1301],[419,1302],[420,1674],[419,1653],[420,1657],[419,1268],[420,1244],[419,1752,1244],[420,1734,1124],[419,1735,1125],[420,1736,1126],[419,1695,1247],[420,1244],[419,1263],420,419,420,[419,1289],[420,1736,1290],[419,1757],420,419,419,420,419,419,[420,1752],[419,1756],[420,1756],1714,1715,1733,[420,1734],[419,1696],420,[419,1674],1735,1736,1735,1736,1735,1736,[1735,1308],[420,1736,1309],[420,1379,1310],1379,[1181,1380],1181,1181,[419,1181,1281],[420,1282],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1181,1227],[440,1243],[439,1263],440,439,419,420,[440,1652],[420,1653],[419,1654],[439,1655],[440,1656],[419,1657],420,439,419,420,440,439,419,420,440,439,419,420,439,440,439,[419,1674],1734,1733,1735,1736,1736,1733,1734,1735,1715,[420,1716],[440,1655],[439,1656],[419,1657],420,440,439,440,439,419,420,440,439,419,420,440,439,419,420,439,440,439,440,439,[440,1732,1281],[439,1282],[419,1672],1736,[440,1737],439,419,420,[440,1752],[439,1753],[440,1757],439,419,420,[440,1673],[439,1657],419,[420,1289],[440,1696,1290],439,419,420,439,440,420,419,420,419,420,[419,1694],[420,1754],[419,1755],[439,1696],440,[420,1678],[419,1715,1679],[1716,1680],1716,1716,1715,1716,1715,[1716,1328],[419,1329],[420,1359,1330],[1181,1356],[1181,1338],1181,1401,[420,1181,1301],[419,1302],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,28,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1247,1228],[420,1263,1229],[419,1229],420,[419,1652],[420,1653],[419,1656],1716,1716,1713,1714,1715,1716,[440,1676],419,420,419,420,419,1827,419,420,419,420,419,[419,1678],[420,1655,1679],[419,1656,1680],[420,1713],1714,1715,1735,1736,1716,1713,1714,1715,1716,1713,1714,1713,[420,1677],419,420,419,420,419,420,419,420,419,420,419,420,419,420,419,419,420,419,420,419,[420,1752,1281],[419,1323,1282],[420,1712],1716,[420,1736],[419,1676],420,419,420,419,420,419,420,[419,1674],1716,[1716,1326],[420,1676,1327],[419,1328,1289],[420,1290],419,420,419,419,420,440,439,440,439,440,439,440,439,440,439,[440,1673,1698],[439,1735,1699],[1736,1700],1736,1716,1735,1736,1735,[1736,1289],[439,1359,1349],[1379,1350],[1181,1380],1181,1428,[1181,1295],[440,1377,1321],[439,1322],[440,1323],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1248],[440,1249],439,[440,1674],1734,1733,1735,[1736,1328],[1736,1724],[1733,1725],[1734,1726],[1735,1323],1715,[420,1716],[439,1655],[419,1656],[420,1657],440,439,419,420,440,439,419,420,[439,1698],[440,1714,1699],[1714,1700],1733,1734,1735,1715,1716,1736,[1733,1678],[1734,1679],[1735,1680],1736,1733,1734,1733,[419,1697],420,440,439,440,439,419,420,440,[439,1674],[419,1653],[420,1654],[440,1655],[439,1656],[419,1657],420,439,440,439,440,439,[440,1321],[439,1343],[419,1732,1346],[1716,1347],[1736,1323],1736,[419,1676],615,440,439,440,439,[419,1674],1733,[1736,1328],[1736,1346],[1736,1347],[420,1653,1348],[440,1330],439,419,420,439,440,420,419,420,419,420,420,420,419,420,[419,1674],[420,1715,1718],[419,1695,1719],[420,1694,1720],1735,1736,1735,1736,1715,[1716,1289],[1379,1290],1356,[1181,1339],1181,1181,[1181,1315],[1359,1341],[419,1359,1342],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1448],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1268],[420,1269],[419,1656,1270],1713,1714,1715,[1735,1328],[1736,1329],[419,1716,1304],[439,1713,1745],[440,1714,1746],[1715,1322],[1716,1323],1713,1714,1713,[440,1677],420,419,439,440,419,420,439,440,[419,1718],[420,1734,1719],[1734,1720],1713,1714,1715,1735,1736,1716,[1713,1698],[420,1714,1699],[1715,1700],1716,1713,1714,1713,[439,1717],440,420,419,420,419,439,440,[420,1674],[1715,1223],[1715,1224],[1716,1227],[1716,1249],1716,[439,1677],440,419,420,419,420,419,[420,1341],[420,1753,1363],[439,1693,1366],[1736,1367],[1756,1343],[1735,1323],[439,1737],1847,420,675,676,[419,945],[439,1732],[1715,1328],[1716,1348],[1755,1366],[1756,1367,1678],[440,1757,1368,1349,1679],[419,1350,1680],420,439,440,419,420,440,439,440,439,440,440,440,[439,1652],[440,1653],1715,[440,1695,1738],[439,1739],[440,1740],[419,1732],1716,1715,1716,1735,[1736,1289],[1399,1290],[1181,1400],1181,1181,1181,[1181,1335],1379,[439,1379,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],[4,1466],[4,1467],[4,1468],[4,1468],[4,1469],[4,1470],4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1288],[440,1289],[1714,1290],1733,1734,[1735,1328],[1715,1348],[1716,1349],[439,1764],[419,1765],[420,1766],1342,[1736,1343],[1733,1323],1734,1733,[420,1697],440,439,440,439,439,440,439,440,[439,1738],[440,1756,1739],[440,1734,1740],1734,1734,1735,1736,1735,1736,[1733,1718],[1734,1719],[1735,1720],1736,1733,1734,[1733,1245],[419,1737],420,440,439,440,439,419,[420,1673],[440,1715,1261],[1716,1358,1262],[1735,1359,1244],[1736,1358,1247],[1715,1359,1269],[1716,1270],[439,1697],440,439,440,439,440,439,440,[440,1383],[419,1386],[420,1693,1387],[440,1736,1363],[1715,1302],1716,[420,1675,961],440,695,696,[439,1674,965],1715,[1735,1309],[1736,1368],[439,1386],[440,1387,1698],[439,1388,1699],[439,1700],440,439,440,439,440,420,419,420,420,419,420,419,[420,1694],1715,1735,[419,1675,1758],[420,1759],[419,1673,1760],1735,1736,1735,1736,1715,[1716,1289],[1181,1290],1411,1181,1401,1181,[1181,1355],1359,[419,1359,1301],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],[4,1486],1487,1487,1488,[4,1489],[4,1490],4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1308],[420,1309],[1734,1310],1713,1714,[1715,1289],[440,1349],[420,1350],1827,439,1828,[420,1362],[419,1716,1363],[1713,1302],1714,1713,[440,1717],420,419,419,[420,1674],[419,1653],[420,1654],[419,1655],[420,1656],[419,1657,1758],[420,1759],[420,1693,1760],1734,1714,1715,1716,[1715,1246],1716,[1713,1738],[1714,1739],[1715,1740],[1716,1326],[1713,1327],[1713,1328],[419,1714,1265],[439,1757],440,420,419,420,419,[439,1673],1715,[1716,1301],[1736,1358,1302],[1735,1359,1303],[1736,1378],[1715,1379,1289],[1716,1290],[419,1717],420,419,420,419,420,419,420,419,439,440,[420,1321],[1735,1322],[1715,1323],[1716,981],[420,1653],[419,1654],[420,1656],[1715,985],[1716,1328],[1736,1329],[420,1330],419,[419,1718],[420,1719],[419,1720],[420,1652],[419,1653],[420,1654],[419,1655],[420,1656],[419,1653],[419,1676],420,419,420,419,420,419,[420,1672],1715,1716,[419,1653],1715,1715,[1715,1223],[419,1716,1224],[1715,1227],[1735,1249],[1736,1268],[419,1269],[1181,1270],1181,1181,1181,[1181,1375],1379,[420,1379,1301],[419,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],[4,1506],1487,1488,1488,[4,1509],[4,1510],4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1308],[440,1309],[1734,1310],1734,1734,[1735,1289],[439,1290],440,1847,440,1848,440,[439,1736,1301],[1733,1302],1734,1733,[439,1737],440,439,[439,1674],1715,1716,1715,1716,1715,1716,[440,1676],440,[439,1752],[440,1753],1735,1736,[1735,1266],[1736,1323],[1733,1324,1758],[1734,1325,1759],[1735,1328,1760],[1736,1346],[1733,1347],[1733,1348],[439,1737,1285],440,439,440,439,440,439,[440,1672,1678],[1715,1679],[1716,1321,1680],[1715,1378,1322],[1715,1379,1344],[1716,1378,1345],[1735,1379,1329],[1736,1330],[439,1737],440,439,440,439,440,439,440,439,440,439,[440,1341],[439,1342],[1735,1322],[1736,1345],[440,1715,1724],[439,1715,1725],[440,1716,1726],[1735,1347],[1736,1348],1349,[440,1350],439,[439,1738],[440,1739],[439,1740],[440,1732],1733,1733,1735,1736,1736,1733,[1827,1657],439,440,439,440,439,[419,1692],1735,1736,1735,1735,[1735,1261],[1735,1358,1262],[1736,1359,1244],[1735,1358,1247],[439,1736,1359,1269],[419,1270],[420,1309],[440,1181,1310],1181,1428,1181,[1181,1395],[1357,1261],[419,1262],[420,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],[4,1506],[1507,1606],[1508,1607],[1508,1608],[4,1509],[4,1510],4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1328],[420,1329],[420,1693,1330],1734,1714,[1715,1289],[419,1290],420,419,420,419,[420,1222],[419,1301],[1713,1302],1713,1714,[419,1757],420,[419,1673],1715,1716,1715,1716,1715,1716,1736,[420,1757],420,419,420,[419,1693],1716,[1715,1286],[1716,1343],[1713,1344],[1714,1345],[1715,1329],[1716,1366],[1713,1367],[1714,1368],[419,1737,1305],420,419,420,419,420,419,[420,1692,1698],[1735,1699],[1736,1341,1700],[1735,1342],[1735,1364],[1736,1365],[1716,1368],[1736,1388],[419,1737],420,419,420,419,420,420,420,419,420,419,420,[419,1362],[420,1342],[419,1364],[420,1735,1744],[419,1735,1745],[420,1736,1746],[419,1304],[420,1368],[419,1369],420,419,[420,1758],[420,1759],[419,1674,1760],[420,1733],1733,1735,1736,1736,1733,1734,1735,[420,1675],419,420,419,420,[419,1712],1715,1716,1715,1716,[419,1301],[1378,1302],[1379,1303],[419,1358],[420,1359,1289],[419,1290],[420,1309],[419,1376,1310],[1181,1300],1181,1421,1181,[420,1181,1281],[419,1282],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1525],[4,1526],[4,1527,1626],[1488,1627],[4,1528,1628],[4,1529],[4,1530],4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1309],[440,1349],[440,1350],[440,1752],[439,1753],[440,1735,1268],[439,1736,1248],[440,1249],439,1848,[419,1221],[420,1242],[1713,1243],[1733,1263],1733,[440,1737],439,440,[439,1672],1735,1715,1716,1736,1735,1736,[439,1696],440,440,439,440,439,[440,1693],[1735,1306],[1736,1363],[1733,1364],[1734,1365],[1735,1349],[1713,1386],[1714,1387],[1734,1388],[439,1696],440,419,420,439,440,439,[440,1712,1718],[1713,1719],[1714,1720],[1715,1362],[1716,1384],[1735,1385],[1736,1388],[440,1756],[439,1757],440,439,440,439,440,[440,1652],[440,1653],[439,1654],[440,1655],[439,1656],[440,1657],439,[440,1362],[419,1384],[420,1764],[439,1765],[440,1766],[439,1386],[440,1388],439,1828,439,440,[440,1674],[439,1733],[440,1715],1715,1735,1736,1716,1713,1714,1715,[419,1735],[420,1676],419,420,419,[420,1732],1735,1736,1735,1736,[419,1321],[1378,1322],[419,1379,1344],[420,1378,1345],[419,1379,1329],[420,1330],[419,1289],[420,1359,1290],1376,[1181,1319],1181,1181,[419,1181,1301],[420,1302],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547,1646],[4,1647],[4,1548,1648],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,4,4,0,0,[420,1309],[419,1310],420,419,420,[419,1693],[420,1716,1268],[419,1715,1269],[420,1224],[419,1224],[439,1224],[1713,1262],[1716,1263],1713,1714,[419,1737],420,419,[420,1692],1715,1735,1736,[420,1755],[419,1756],[420,1757],419,420,420,419,420,419,420,[420,1752],[419,1756,1383],[420,1756,1384],[419,1714,1385],[1715,1369],1733,1734,[419,1696],420,419,439,440,420,419,420,[419,1732,1738],[1733,1739],[1734,1740],1735,1736,[420,1756],[419,1695],420,419,420,419,420,[420,1673],[419,1656],1716,1716,1713,1714,1715,1716,[420,1676],419,439,440,420,419,420,[419,1674],[420,1653],[419,1654],[420,1655],[419,1656],1733,1715,1736,1736,1735,1736,1735,1736,1735,1736,1715,1716,[419,1717],1848,419,[420,1752],[419,1753],[420,1754],[419,1755],[420,1756],[419,1757,1341],[420,1342],[419,1364],[420,1365],[419,1368],[420,1388],[419,1268],[420,1269],[1359,1228],1376,[1181,1319],1181,[419,1181,1321],[420,1322],[419,1323],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1309],[420,1310],419,420,419,420,[419,1693],[420,1735,1268],[419,1736,1244],[420,1733,1244],[419,1734,1244],[1735,1263],1713,1714,1734,[420,1696],419,420,[419,1712],1735,1736,[420,1696],419,420,419,419,420,419,420,419,419,420,419,420,419,[420,1694],[419,1754],[420,1755],[419,1696],420,419,420,419,420,419,420,419,[420,1752,1758],[419,1753,1759],[420,1754,1760],[419,1755],[420,1696],419,420,419,420,419,419,420,[419,1672],1735,1736,1736,1733,1734,1735,1715,[419,1716],[420,1655],[419,1656],[420,1657],419,420,[419,1673],1733,1735,1736,1736,1733,1733,1736,1735,1736,1735,1736,1735,1736,1736,1735,1736,1736,[439,1737],440,439,419,420,440,439,419,420,[440,1362],[439,1384],[440,1385],[439,1388],419,420,[440,1732,1268],[1715,1248],[1181,1359,1249],[1181,1376],[1181,1300],[1181,1341],[419,1181,1342],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1655,1309],[440,1656,1310],[439,1676],440,439,419,420,[440,1752],[439,1756],[419,1756],[420,1714],1715,1733,1734,[439,1696],419,420,440,[439,1732],1735,[420,1695],440,439,419,420,439,440,439,419,420,439,440,439,440,439,1848,439,419,420,440,439,419,420,440,439,440,439,419,420,440,439,419,420,440,439,419,420,439,440,[439,1692],1735,1736,1716,1713,1714,1715,1716,1713,1714,1713,[440,1677],439,[440,1673],1733,1735,1736,1736,1733,1734,1736,1735,1736,1715,1736,1735,1736,1735,1736,1735,1736,[420,1756],[419,1757],420,420,439,440,420,419,439,440,420,419,420,419,439,[440,1673],1715,[1735,1268],[1736,1269],[1359,1270],[1181,1320],1181,[439,1181,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1309],[1715,1310],[419,1716],[420,1676],420,439,440,420,419,439,[440,1694],[420,1754],[419,1755],[420,1696],419,439,1848,[420,1674],1716,[439,1737],440,[419,1678],[420,1679],[439,1680],440,419,420,420,439,440,419,420,419,420,419,420,420,439,440,[420,1652],[419,1653],[439,1676],440,420,419,[420,1673],[419,1656],[439,1657],440,420,419,439,440,419,420,439,440,419,420,[419,1712],1715,1716,1736,1733,1734,1735,1736,1733,1734,1733,[420,1697],419,[420,1672],1715,1735,1736,1716,1713,1714,1715,1716,1713,1736,1735,1736,1735,1736,1735,[440,1736],[439,1695],440,439,440,440,[419,1652],[420,1653],[440,1676],439,419,420,440,439,440,439,[419,1652],1715,1735,1715,[1716,1289],[1379,1290],[1181,1340],1428,[439,1181,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,28,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1309],[1735,1310],[439,1736],[440,1696],440,419,420,440,439,419,420,440,439,440,439,[419,1652],[420,1653],1716,1736,[440,1737],439,[439,1698],[440,1699],[439,1700],440,439,440,440,439,440,439,440,439,440,439,[440,1326],[440,1327],[419,1328],[420,1674,1344],[1736,1345],[1736,1344],[1736,1345,7],[420,1676,8],[440,9],[439,1673,1344,10],[1736,1345],[1716,1323],[419,1737],420,440,439,440,439,439,440,439,440,439,440,[439,1732],1735,1736,1716,1713,[1714,1678],[1715,1679],[1716,1680],1713,1714,1713,[440,1717],439,[440,1692],1736,1735,1736,1735,1736,1735,1736,1735,1736,1735,1736,[439,1753],[440,1754],[420,1755],[419,1756],[420,1757],419,420,419,420,419,[439,1732],1715,1716,[419,1655],[439,1656],[440,1657],420,419,420,419,[439,1693],1735,1736,1735,[1736,1289],[1359,1290],[1181,1360],1181,[419,1181,1301],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,[4,1328],[4,1346],[28,1829],[4,1346],[4,1347],[4,1323],[4,1324],4,[4,1324],[4,1327],[4,1328],[4,1344],[4,1345],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[419,1309],[420,1695,1310],[419,1696],420,419,439,440,420,419,439,440,420,419,420,419,[439,1694],1735,[420,1736],[419,1756],[419,1757],420,[419,1718],[420,1719],[419,1720],420,419,420,420,419,420,419,420,[419,1326],[420,1327],[419,1328],[420,1346],[419,1347],[439,1348],[440,1364],1251,1364,[1365,7],8,9,[419,1364,63,10],1365,[1736,1322],[1736,1323],[440,1676],420,419,419,420,[419,1678],[420,1679],[419,1680],420,419,420,[419,1732],[1736,1246],1735,1736,1733,[1734,1698],[1735,1699],[1736,1700],1733,1734,[1733,1245],[420,1737],419,[420,1712],1733,1735,1736,1736,1733,[419,1733],[420,1753],[419,1754],[420,1755],[419,1756],[420,1695],419,420,440,439,440,439,440,439,440,[439,1674],1715,1716,1713,1714,1713,[439,1677],440,439,440,439,440,[439,1694],1735,1736,[1716,1309],[1379,1310],[1181,1380],1181,[439,1181,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1328],[4,1329],[4,1366],1849,[4,1366],[4,1367],[4,1290,1343],[4,1344],[4,1345],[4,1344],[4,1347],[4,1348],[4,1364],[4,1365],[4,1366],[4,1367],[4,1364],[4,1365],[4,1366],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,[439,1309],[440,1310],439,440,439,440,[439,1678],[440,1679],[439,1680],440,439,[440,1652],[439,1653],[440,1657],439,440,[439,1694],[440,1695],439,439,440,[439,1738],[440,1739],[439,1326,1740],[440,1327],[439,1328],[440,1346],[440,1347],[439,1346],[440,1347],[439,1346],[440,1347],[439,1346],[440,1347],[439,1348],[440,1366],[439,1367],[440,1368],[439,1181,1384],[440,1181,1271],[439,1181,1384],[440,1357,1385,7],8,9,[439,1379,1384,83,10],[440,1378,1385],[1379,1342],[1716,1322],[1716,1323],[440,1675],439,439,440,[439,1698],[440,1699],[439,1700],440,439,440,[439,1732],[1716,1266],[1715,1323],1716,1713,[1714,1718],[1715,1719],[1716,1720],1713,[1713,1328],[1714,1265],[419,1757],439,[440,1732],1736,[440,1753],[439,1754],[440,1755],[439,1756],[439,1757],440,[439,1678],[440,1679],[439,1680],440,439,440,420,419,[420,1652],[419,1653],[420,1676,1084],[420,1085],[420,1673,1086],[419,1734],1735,1736,1733,1734,1733,[419,1697],420,419,420,419,420,[419,1326],[420,1694,1327],[1735,1328],[1736,1329],[1356,1330],[1181,1338],1411,[419,1181,1301],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[4,1290],[552,1386],[572,1869],[572,1308,1386],[572,1309,1387],[4,1310,1363],[4,1364],[4,1365],[4,1364],[4,1367],[4,1368],[4,1384],[4,1281,1385],[552,1282,1386],[552,1387],[553,1384],[552,1385],[552,1386],[553,1289,1387],[4,1290,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,0,0,[419,1329],[420,1330],420,420,[419,1673],[420,1653],[419,1654,1698],[420,1655,1699],[419,1656,1700],[420,1676],[419,1674],1715,1716,[420,1677],419,420,419,420,419,420,[420,1326],[419,1327,1758],[420,1674,1328,1759],[419,1653,1346,1760],[420,1656,1347],[419,1653,1348],[420,1366],[420,1367],[419,1366],[420,1367],[419,1366],[420,1367],[419,1366],[420,1367],[420,1181,1368],[420,1181,1379,1386],[419,1181,1356,1387],[1181,1388],1401,1181,1181,[1181,1395,7],8,9,[1181,1398,83,10],[1181,1399],[1181,1400,1362],[420,1736,1342],[1736,1322],[1716,1323],[419,1653],[420,1656],[420,1657],[419,1718],[420,1719],[419,1720],420,419,420,[419,1732],[1736,1286],[1735,1322],[1736,1323],[1733,1324],[1734,1325,1738],[1735,1326,1739],[1736,1327,1740],[1733,1328],[1733,1329],[419,1737,1285],420,419,[420,1752],[419,1757],420,419,420,419,420,420,[419,1698],[420,1652,1699],[419,1653,1700],[420,1654],[419,1655],[420,1656],[440,1657],439,[440,1672,1223],1224,[440,1104],[440,1105],[440,1732,1106],[1714,1249],1715,1716,1713,1714,1713,[419,1717],420,439,440,439,[440,1328,7],[439,9],[440,1347,10],[439,1694,1348],[1379,1349],[1181,1380,1350],1181,[1181,1295],[439,1181,1377,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[552,1290],552,552,[572,1328],[573,1329],[4,1330,1383],[4,1384],[4,1385],[4,1384],[4,1387],[4,1388],4,[4,1301],[552,1302],[552,1324],552,[552,1326],[552,1327],[553,1309],[4,1310,1362],[4,1342],[4,1322],[4,1323],4,4,4,4,4,4,0,0,[439,1349],[440,1350],440,[440,1674],1715,1716,[1715,1718],[1716,1719],[439,1715,1720],[440,1716],1715,[1716,1245],1736,[440,1717],439,440,1827,[440,1674],[439,1653],[440,1654,1326],[440,1655,1327],[439,1656,1328],[1716,1348],1366,1367,[439,1368],[440,1379,1386],[440,1356,1387],[439,1181,1386],[440,1181,1357,1387],[439,1181,1356,1386],[440,1181,1387],[439,1181,1386],[440,1181,1387],[1181,1398,1388],[1181,1399],[1181,1400],1181,[1181,1317],[1181,1300],1421,[1181,7],8,9,[1181,83,10],1421,1428,[1181,1375,1362],1342,[1736,1322],[1716,1323],1716,[440,1677],[439,1738],[440,1739],[439,1740],440,439,440,[439,1752],[1716,1306],[1715,1342],[1716,1343],[1713,1346],[1714,1347,1758],[1715,1346,1759],[1716,1347,1760],[1713,1348],[1714,1349],[419,1737,1305],420,439,440,439,440,439,440,439,[440,1652],[1827,1653],[439,1656,1718],[440,1716,1719],[1716,1720],1713,1714,1715,1716,[419,1261],[420,1358,1262],[1735,1359,1244],[1735,1358,1124],[1736,1359,1125],[1733,1358,1126],[1734,1359,1269],[1735,1270],1736,1733,1734,1733,[439,1737],440,420,419,[420,1328],[419,1348,7],[420,9],[419,1367,63,10],[420,1379,1368],[1356,1369],[1181,1339],1181,[1181,1315,1261],[419,1262],[420,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[552,1290],552,[572,1328],[573,1348],[4,1349],[4,1350],[4,1223],[4,1224],[4,1224],[4,1227],[4,1228],4,[4,1321],[552,1322],[552,1344],[553,1347],[553,1346],[553,1347],[553,1329],[4,1330,1382],[4,1362],[4,1342],[4,1322],[4,1344],[4,1345],[4,1346],[4,1345],[4,1323],4,0,0,[420,1310],419,[420,1673],[419,1715,1246],1716,1736,[1735,1738],[1736,1739],[1735,1740],1736,[1735,1328],[1736,1265],1736,[419,1757],420,419,[420,1674,1326],[1714,1327],[1715,1328],[1716,1346],[1715,1347],[1716,1348],1368,[1379,1386],[1378,1387],[1379,1388],1356,[1181,1339],1181,[1181,1395],[1181,1400],1181,1181,1181,1428,1181,1411,[1181,1316],1377,[1376,1222],[1181,1319,1223],[1181,1224,7],8,9,[1181,1227,83,10],[1181,1228],[1401,1229],[1181,1395,1230],[1181,1357,1341],1342,[1736,1322],[1716,1323],[420,1697],[419,1758],[420,1759],[419,1760],420,419,420,420,[1848,1693],[1735,1362],[1736,1363],[1733,1366],[1734,1367],[1735,1366],[1713,1367],[1714,1368],[419,1734,1369],[439,1696],440,439,440,[439,1652],[419,1653],[420,1654],[419,1655],[420,1656],1734,1733,[1735,1738],[1736,1739],[1736,1740],1733,1734,1735,1715,[419,1301],[420,1358,1302],[419,1715,1359,1303],[420,1715,1378,1303],[419,1716,1379],[420,1713,1358],[419,1714,1359,1289],[1715,1290],1716,1713,1713,1714,[419,1757],420,419,[420,1328],[419,1329],[420,1368,7],[419,9],[420,1181,1387,83,10],[1181,1399,1388],[1181,1400],1411,1181,[1181,1335,1281],[420,1282],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[552,1290],552,[572,1309],[4,1368],[4,1369],[4,1261],[572,1262],[552,1244],[572,1244],[552,1247],[572,1269],[4,1270],[4,1341],[4,1342],[4,1364],[4,1367],[4,1366],[4,1367],[4,1349],[4,1350],4,[4,1362],[4,1342],[4,1364],[4,1365],[4,1366],[4,1365],[4,1322],[4,1323],0,0,[420,1310],419,1736,[1735,1266],[1736,1323],[1733,1324],[1734,1325,1758],[1735,1326,1759],[1735,1327,1760],[1736,1328],[1733,1329],[419,1736,1285],[420,1696],419,420,[419,1673],1714,[1715,1328],[1716,1348],[1736,1366],[420,1735,1367],[419,1736,1368],[420,1379,1388],1356,[1181,1398],[1181,1399],[1181,1400],1181,1181,1181,1421,1181,[1181,1295],[1181,1296],[1181,1297],[1181,1298],[1181,1299],1377,1378,[1379,1242],1243,[1358,1244,7],[1359,8],[1358,9],[1358,1247,103,10],[1359,1248],[1181,1295,1249],[1181,1318,1250],[1181,1337],[1181,1357,1362],[1181,1342],[1736,1302],[419,1717],420,419,420,420,419,420,419,420,[419,1752,1382],[420,1756,1383],[419,1756,1386],[420,1714,1387],[1715,1386],[1733,1387],[440,1734,1388],[420,1696,1389],419,420,419,[420,1673],[419,1715],1716,1716,1715,1716,1714,1715,[1735,1758],[1736,1759],[1716,1760],1713,1714,1715,1716,[439,1716,1321],[440,1378,1322],[439,1735,1379,1344],[440,1736,1378,1345],[439,1735,1379,1346],[440,1736,1378,1347],[439,1733,1379,1329],[419,1734,1330],1735,1736,1733,[419,1737],420,440,439,[440,1309],[439,1349],[1181,1300,1388,7],[420,9],[1181,83,10],1401,1181,1181,1181,[1181,1355,1301],[419,1302],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[552,1290],552,[572,1309],[4,1310],4,[4,1281],[573,1302],[572,1264],573,[572,1308],[573,1309],[4,1310],[4,1382],[4,1383],[4,1384],[4,1387],[4,1386],[4,1387],[4,1388],4,4,[4,1382],[4,1362],[4,1281,1384],[553,1282,1385],[552,1386],[572,1385],[4,1342],[4,1302],0,0,[419,1310],420,1716,[1715,1286],[1716,1343],[1713,1344],[1714,1345],[1715,1346],[1716,1347],[1713,1348],[1714,1349],[420,1737,1305],419,420,419,[420,1732],[1714,1328],[420,1715,1329],[419,1716,1368],[420,1181,1386],[419,1357,1387],[1379,1388],1356,[1181,1338],1401,1181,1411,[1181,1316],[1181,1299],[1181,1300],1181,[1181,1223],[1377,1224],[1378,1224],[1379,1224],[1379,1224],[1358,1224],[1359,1224],[1359,1224],[1358,1262],[1359,1263],[1378,1264],1379,1359,[1378,1267],[1379,1268],[1359,1269],[1376,1270],[1181,1300],[1181,1395],[1181,1357,1301],[1716,1302],[420,1737],419,419,420,419,420,419,420,419,420,419,420,[419,1694],[420,1754],[419,1755],[420,1696],419,420,419,[439,1673],[440,1715],[439,1716],1736,1736,1735,1736,[1735,1328],[1736,1346],[1735,1346],[1736,1347],[1735,1323],1736,1735,1736,1735,[1736,1341],1342,[1715,1364],[1716,1365],[420,1715,1366],[419,1716,1367],[1713,1368],[1714,1388],1715,1716,1713,[419,1737],439,440,420,[419,1309],[420,1359,1310],[1181,1320,7],9,[1181,83,10],[1181,1295],[1181,1300],1401,1421,[1181,1375,1321],[419,1322],[420,1323],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1268],[4,1248],[552,1227],[572,1309,1228],[4,1310],4,[4,1321],[573,1343],[552,1345],[572,1346],[572,1347],[573,1329],[4,1330],4,4,4,4,[4,1223],[4,1224],[4,1224],[4,1227],[4,1228],4,4,[4,1281],[573,1282],572,573,[573,1281],[4,1282],0,0,[439,1310],440,[439,1693],[1735,1306],[1736,1363],[1733,1364],[439,1734,1365],[1735,1366],[1713,1367],[1714,1368],[1734,1369],[440,1696],439,419,420,[440,1694],[1734,1309],[419,1735,1379,1349],[1736,1181,1300,1388],1181,[1181,1395],[1181,1399],[1181,1400],[1181,1222],[1181,1223],[1181,1224],[1181,1224],[1181,1377,1224],[1181,1378,1224],[1181,1376,1224],[1181,1358,1224],[1359,1243],[1358,1244],[1359,1244],[1358,1244],[1359,1244],[1378,1244],[1379,1244],[1379,1244],[1378,1263],1358,1359,1378,1379,[1358,1287],[1378,1288],[1379,1289],[1379,1290],[1181,1320],1181,[1181,1301],[1736,1302],[419,1677],420,439,440,439,440,439,440,439,419,420,440,439,419,420,440,439,440,439,[419,1672,1246],1735,1736,1715,[1716,1328],[1715,1346],[1716,1347],[1715,1348],[1716,1304],[1715,1366],[439,1716,1367],[1715,1322],[1716,1323],1715,1716,1715,1715,[1716,1362],[1735,1384],[1736,1385],[1735,1386],[1736,1387],[1733,1388],1734,1735,1713,1714,[420,1737],419,420,[419,1328],[420,1329],[419,1379,1330],[1181,1340,7],9,[1181,83,10],[1181,1395],[1181,1400],1181,[1181,1316],[1181,1377,1341],[420,1342],[419,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,[4,1268],[4,1247],[4,1309,1248],[4,1310,1227],[4,1228],[4,1341],[4,1363],[572,1365,1304],[573,1366],[4,1367],[4,1349],[4,1350],4,4,4,[4,1261],[552,1262],[572,1244],[552,1244],[552,1247],[572,1269],[4,1270],4,[4,1301],[553,1302],552,553,[553,1301],[4,1302],0,0,[419,1310],420,1848,[439,1752],[440,1756,1383],[420,1756,1384],[419,1714,1385],[1715,1386],[1733,1387],[1734,1388],[419,1696],420,419,439,440,420,[419,1694,1289],[439,1379,1330],[1181,1320],1181,1401,1421,1181,[1181,1242],[1358,1243],[1359,1244],[1358,1244],[1359,1244],[1358,1244],[1359,1244],[1378,1244],[1379,1263],[1378,1264],1379,1378,1379,1358,1359,1358,1359,1358,1359,1358,1359,1378,1378,[1379,1289],[1359,1290],[1181,1340],1421,[1181,1301],[1716,1302],[439,1697],440,419,420,419,420,419,420,[420,1652],[439,1653],[440,1654],[420,1655],[419,1656],[439,1657],440,420,419,420,419,[439,1692,1266],[1735,1323],1736,[1735,1328],[1736,1348],[1735,1366],[1715,1367],[1716,1368],[439,1736,1385],[1735,1386],[1736,1387],[1735,1342],[1736,1343],[1735,1346],[1736,1346],[1735,1347],[1735,1323],1736,1715,1716,1715,1716,1713,1714,1715,1733,1734,[419,1696],420,419,[420,1309],[1359,1349],[1359,1350],[1181,1360,7],9,[1181,83,10],1181,1181,[1181,1295],1377,1359,[1359,1301],[419,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,[4,1268],[4,1247],[4,1248],[4,1228],[4,1383],[4,1385],[4,1386],[4,1387],[4,1369],[4,1370,1223],[4,1224],[4,1227],[4,1228],[4,1281],[572,1282],[573,1264],572,[572,1267],[573,1289],[4,1290],4,[4,1301],[553,1302],[479,1164],[553,1165],[553,1301],[4,1302],0,0,[439,1310],440,440,419,420,440,[439,1694],[419,1754],[420,1755],[440,1696],439,[440,1652],[439,1657],419,1827,[440,1308],[439,1309],[440,1379,1310],[1181,1340],1181,1181,1181,[1181,1261],[1359,1262],[1378,1263],[1379,1264],1378,1379,1378,1379,1358,1359,1358,1359,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1358,1378,[1379,1289],[1379,1290],[1181,1360],1401,[1181,1301],[1716,1302],[439,1717],440,439,440,439,[440,1652],[439,1653],[440,1656],[440,1716],[419,1716],[420,1713],[440,1714],[439,1715],[419,1716],[420,1676],440,439,440,439,[419,1712,1286],[1715,1343],[1716,1347],[1735,1348],[1715,1368],[1716,1386],[1735,1387],[1736,1388],[439,1753],[440,1754],[439,1755],[440,1715,1362],[1716,1363],[1715,1304],[440,1716,1366],[1716,1367],[1715,1322],[1716,1323],1735,1736,1735,1736,[1733,1245],1734,1735,1736,[440,1695],439,440,[419,1308],[420,1309],[1379,1310],1379,[1380,7],9,[1181,83,10],1181,1421,[1181,1315],1359,[1379,1261],[419,1262],[420,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1268],[4,1248],[4,1227],[4,1227],[4,1227],[4,1227],[4,1227],[4,1243],[4,1244],[4,1247],[4,1248],[4,1281,1227],[572,1282,1227],[573,1227],[573,1227],[572,1227],[573,1309,1227],[4,1310,1227],[4,1227],[4,1281,1227],[573,1282,1183],[572,1184],[573,1185],[4,1262],[4,1263],0,0,[419,1310],420,[419,1678],[439,1679],[440,1680],420,419,439,440,420,[419,1674],1715,1716,[439,1676],440,[420,1328],[419,1329],[419,1379,1330],[1181,1360],1181,1181,[1181,1295],[1378,1281],[1379,1282],1358,1359,1358,1359,1358,1359,1378,1379,1378,1379,1358,1359,1358,1359,1358,1359,[1356,1229],[1181,1398],[1181,1399],1357,1378,1359,[1359,1289],[1359,1290],[1181,1380,1229],[1181,1230],[1181,1321],[1736,1322],[419,1737,1323],420,419,420,[419,1674],[420,1734],[419,1733],[420,1735],[419,1736],[439,1736],[440,1733],[420,1734],[419,1735],[439,1715],[440,1716],[420,1655],[419,1656],[420,1657],419,[439,1732,1306],[1735,1363],[1736,1304],[1715,1368],[1735,1388],1736,[419,1756],[420,1695],419,420,419,[420,1694],[420,1736,1383],[1735,1385],[1736,1386],[1736,1387],[1735,1342],[1736,1322],[1713,1323],1714,1715,[1716,1328],[420,1713,1265],[419,1714,1678],[420,1715,1679],[1716,1680],420,419,420,[419,1328],[420,1329],[1359,1330],1356,[1181,1338,7],9,[1181,83,10],1181,1181,[1181,1335],1379,[440,1379,1281],[439,1282],440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1370],[4,1268],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1263],[4,1264],[4,1267],[4,1268],[28,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1203],[4,1204],[4,1205],[4,1263],4,0,0,[439,1310],440,[439,1698],[440,1699],[439,1700],440,1827,440,[439,1328],[440,1344],[439,1715,1231],[1716,1344],[1715,1345],[440,1716,1346,7],[439,9],[440,1348,63,10],[439,1349],[439,1379,1350],[1181,1380],1411,1428,[1181,1375],[1358,1281],[1359,1282],1378,1379,1378,1379,1378,1379,1358,1359,1358,1359,1378,1379,1378,1379,1378,1379,[1181,1380],1181,1181,[1181,1337],1357,1379,[1379,1268],[1379,1248],[1376,1249],[1181,1319,1250],[1181,1341],[440,1736,1342],[439,1736,1322],[440,1654,1323],[439,1655],[440,1656],[439,1713],[440,1714],[439,1715],[440,1735],[439,1736],[440,1716],[439,1713],[440,1714],[439,1715,1678],[440,1716,1679],[439,1713,1680],[440,1714],[439,1713],[440,1677],439,[440,1693],[1736,1383],[1715,1387],[1735,1388],1736,[440,1696,1328],[439,1724],[440,1725],[439,1726],[440,1323],439,440,[440,1752],[439,1753],[440,1756],[439,1756],[440,1735,1362],[439,1715,1342],[440,1716,1343],[1734,1346],[1735,1347],[1736,1348],[440,1695,1285],[439,1694,1698],[440,1735,1699],[1736,1700],[440,1676],439,[1847,1288],[440,1289],[1359,1349],[1379,1350],[1181,1380],[1181,7],9,[1181,83,10],1181,1401,[1181,1355],1359,[420,1359,1301],[420,1302],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[420,1310],420,[419,1718],[420,1719],[419,1720],420,419,[420,1674,1328],[419,1329],[420,1364],[419,1735,1251],[420,1736,1364],[419,1735,1365],[420,1736,1366,7],9,[420,1181,1368,83,10],[1181,1398,1369],[1181,1399,1370],[1181,1400],1181,1181,[1181,1395],[1181,1378,1281],[1379,1282],1358,1359,1358,1359,1358,1359,1378,1379,1378,1379,1358,1359,1358,1359,1358,1359,1376,[1181,1299],[1181,1318],1421,[1181,1375],1359,1358,[1359,1268],[1358,1269],[1181,1400,1270],1181,[1181,1362],1363,[420,1713,1282],[419,1714],[420,1714],[419,1733],[420,1734],[420,1735],[420,1715],[419,1716],[420,1736],[419,1733],[420,1734],[419,1735,1698],[420,1736,1699],[419,1733,1700],[420,1734],[419,1733],[420,1697],419,420,[419,1732],1735,1736,[420,1696,1328],[420,1329],[419,1304],[420,1745],[419,1746],[420,1322],[419,1323],420,420,1847,420,419,[420,1694],[420,1735,1362],[419,1736,1363],[1713,1366],[1714,1367],[1715,1368],[419,1675,1305],[420,1718],[419,1694,1719],[1715,1720],1716,[420,1657],[419,1308],[419,1309],[1379,1310],1356,[1181,1339],[1181,7],9,[1181,83,10],1428,1181,[1181,1375],1379,[440,1379,1301,1678],[440,1302,1679],[439,1680],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[440,1269],[440,1270],[439,1738],[440,1739],[439,1740],440,[439,1673],[440,1716,1309],1349,[420,1379,1384],[439,1181,1380,1271],[440,1181,1384],[439,1181,1357,1385],[440,1181,1356,1386,7],9,[440,1181,1388,83,10],[1421,1389],[1181,1390],1181,1401,1181,[1181,1261],[1358,1262],[1359,1263],1378,1379,1378,1379,1378,1379,1358,1358,1359,1359,1378,1379,1378,1379,1378,1379,1378,1379,1376,[1181,1296],1377,1358,1359,[1379,1288],[1378,1289],[1181,1290],1401,1181,[1181,1281],[440,1733,1282],[439,1734],[440,1734],[439,1713],[440,1714],[440,1715,1246],[440,1735],[439,1736],[440,1716],[439,1713],[440,1714],[439,1715,1718],[440,1716,1719],[419,1713,1720],[420,1714],[439,1713],[440,1717],439,440,[439,1752],[440,1756],[439,1757],[440,1309],[440,1349],[439,1764],[440,1652,1765],[439,1653,1766],[440,1654,1342],[439,1655,1322],[440,1656,1323],[440,1657],439,440,439,440,[440,1693],[439,1736,1383],[1733,1386],[1734,1387],[1735,1388],[439,1677],[440,1738],[439,1739],[440,1694,1740],1736,[440,1677],[439,1328],[439,1329],[1356,1330],[1181,1338],1411,[1181,1317,7],9,[1181,1299,83,10],[1181,1300],1181,[1181,1395],[1181,1357,1261],[420,1262,1698],[419,1263,1699],[420,1700],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[420,1289],[419,1290],[420,1758],[419,1759],[420,1760],[419,1652],1716,[1736,1309],[439,1181,1379,1310],[1181,1379],[1181,1380],1181,[1181,1336],[1181,1400,7],9,[1181,83,10],1411,[1181,1317],[1181,1318],1421,[1181,1317],[1377,1281],[1378,1282],1379,1358,1359,1358,1359,1358,1359,1378,1378,1379,1379,1358,1359,1358,1359,1358,1359,1358,1359,1378,1379,1378,1378,1379,1359,[1358,1289],[1181,1376,1290],[1181,1300],1181,[1754,1181,1281],[420,1755,1282],[419,1756],[420,1734],[420,1734],[419,1734],[420,1735,1266],[419,1736,1323],[420,1735],[419,1736],[420,1733],[419,1734],[420,1735,1738],[419,1736,1739],[439,1733,1740],[440,1734],[420,1733,1245],[419,1737],420,419,420,419,420,[419,1289],[420,1290],419,[420,1694],[1715,1361],[1716,1362],[1716,1342],[1715,1302],[420,1716],[419,1676],420,419,1828,419,[420,1672],1713,1714,1715,[420,1697],[419,1758],[420,1759],[419,1674,1760],1716,[419,1697],[420,1289],1349,[1181,1350],1181,[1181,1317],[1377,1242,7],9,[1358,1228,103,10],1376,[1181,1319],1181,[1181,1281],[440,1282,1718],[439,1719],[440,1720],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[420,1289],[419,1290],420,419,420,[419,1672],[1736,1328],[1736,1329],[420,1181,1379,1330],[1181,1356],[1181,1400],1411,1181,[1181,7],9,[1181,1295,83,10],[1181,1296],[1181,1377],[1181,1376],[1181,1299],[1181,1377],[1181,1378,1301],[1379,1302],1359,1378,1379,1378,1379,1378,1379,1358,1359,1358,1359,1378,1379,1358,1359,[1378,1324],1379,1358,1359,1358,1359,1358,1358,1359,1379,[1378,1289,1420],[1181,1356,1290,1420],[1181,1338,1420],[1181,1420],[1181,1281,1420],[440,1282,1420],439,[419,1693],[420,1734],[439,1714],[440,1715,1286],[439,1716,1322],[440,1715,1323],[439,1716],[440,1713],[439,1714],[419,1715,1758],[420,1716,1759],[440,1713,1760],[439,1713,1328],[419,1714,1265],[420,1757],440,[439,1652],[440,1653],[439,1654],[419,1655],[420,1656,1268],[440,1657,1269],[439,1270],419,[420,1735],1736,[1736,1281],[1735,1282],1736,1716,[440,1675],439,440,439,[440,1692],1733,1734,1735,[440,1717],439,[440,1673],1736,1736,[439,1717],[440,1289],[1181,1290],1411,[1181,1295],[1377,1261],[419,1262,7],[419,9],[420,1248,10],[1358,1270],[1181,1380],1181,[1181,1301],[420,1302,1738],[419,1739],[420,1740],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[419,1289],[420,1290],419,420,419,[420,1692],[1736,1309],[1181,1349],[1181,1356,1350],[1181,1338],[1181,1221],[1401,1222],[1181,1223],[1181,1224,7],9,[1181,1378,1228,83,10],[1181,1378],[1181,1379],[1181,1378],[1181,1379],[1181,1378,1261],[1379,1262],[1378,1263],1379,1358,1359,1358,1359,1358,1359,1378,1379,1378,1379,1358,1359,1378,1379,1358,1359,1378,1379,1378,1379,1378,1378,1379,1358,1440,1440,1440,1440,1440,1440,1827,439,[440,1752],[419,1753],[420,1735,1306],[419,1736,1342],[420,1735,1343],[419,1736,1344],[420,1733,1345],[420,1734,1323],[439,1735],[440,1736],[420,1733,1328],[419,1733,1348],[439,1737,1285],440,420,[419,1732],1715,[1716,1678],[1715,1679],[1716,1288,1680],[420,1677,1289],[419,1290],439,[440,1672],1715,[1716,1301],[1735,1302],1736,1715,1716,[419,1657],420,419,[420,1712],1713,1714,1715,[420,1753],[419,1754],[420,1755],[419,1756],[420,1756],[419,1757],[420,1289],[1181,1290],1181,[1181,1395],[1357,1301],[419,1302],420,[420,1289],[1356,1290],[1181,1400],1181,[1181,1321],[440,1322,1758],[439,1323,1759],[440,1760],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[439,1268],[440,1269],[439,1270],440,439,[419,1712],[1716,1309],[1181,1356,1310],[1181,1400],1181,[1181,1241],[1181,1242],[1358,1243],[1359,1244,7],[1358,9],[1359,1248,103,10],[1181,1358,1224],[1181,1359,1224],[1181,1358,1224],[1181,1359,1224],[1358,1243],[1359,1263],1358,1359,1358,1359,1378,1379,1358,1359,1358,1359,1358,[1359,1678],[1359,1679],[1379,1680],1359,1356,1357,1379,1359,[1358,1370],1359,1358,[1359,1760],1359,1379,1378,1460,1460,1460,1460,1460,1460,440,439,440,439,[440,1693],[439,1716,1362],[440,1715,1363],[439,1716,1364],[440,1713,1365],[440,1714,1343],[419,1715,1344],[420,1716,1345],[440,1713,1348],[439,1714,1368],[419,1737,1305],1827,440,[439,1732],1735,[1736,1698],[1715,1699],[1716,1700],[440,1697,1289],[439,1290],[440,1084],[439,1692,1085],[1735,1086],[1736,1281],[1715,1282],1716,1735,1736,[439,1677],440,439,[440,1732],1735,1736,[439,1695],440,439,440,439,440,439,[440,1289],[1376,1290],[1181,1319],1181,[1181,1321],[439,1322,7],[440,9],[440,1348,63,10],1330,1181,1181,[1181,1316,1341],[420,1342],[420,1302],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[419,1288],[420,1289],[419,1290],420,420,[439,1694],[440,1736,1309],[1181,1310],1181,1181,[1181,1261],[1358,1262],[1359,1263],[1379,1264],[1378,1267],[1379,1268],[1378,1244],[1379,1244],[1378,1244],[1379,1244],[1378,1263],1379,1378,1379,1378,1379,1358,1359,1378,1379,1378,1379,1378,[1358,1698],[1379,1699],[1378,1700],[1181,1379],[1181,1338],[1181,1315],1378,1379,[1378,1390],1379,1378,1379,1379,1359,1358,[1359,1309,1480],[1181,1310,1480],[1181,1480],[1181,1315,1480],[1181,1359,1301,1480],[419,1302,1480],[420,1678],[419,1674,1679],[420,1676,1680],419,420,[419,1693],[420,1735,1383],[419,1736,1384],[420,1733,1385],[419,1734,1363],[439,1735,1364],[440,1713,1365],[420,1714,1368],[419,1734,1388],[439,1696],440,420,[419,1732],1715,[1716,1718],[1735,1719],[1736,1720],[420,1717,1268],[419,1248],[419,1104],[420,1712,1105],[1715,1106],[1716,1243],[1735,1263],1736,1735,1736,[419,1697],420,420,[419,1752],[420,1753],[419,1757],420,419,420,419,420,419,420,[419,1268],[420,1269],[1376,1270],[1181,1300],[1181,1341],[1363,7],9,[1368,83,10],[1181,1350],1181,[1181,1295],[1181,1377],[440,1358,1301],[440,1302],439,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[439,1308],[440,1309],[439,1310],440,440,419,[420,1694,1309,1420],[1181,1310,1420],[1181,1420],[1181,1420],[1181,1281,1420],[1378,1282,1420],[1379,1283],[1358,1284],1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1379,1359,1358,1359,1358,1359,[1378,1718],[1379,1719],[1356,1720],[1181,1338],1181,[1181,1335],1378,1379,1358,1359,1359,1358,1359,1379,1378,[1379,1309],[1181,1310],1181,[1181,1335],[1654,1181,1379,1301],[439,1655,1302],[440,1656,1698],[439,1715,1699],[440,1716,1700],[439,1653],[440,1676],439,[440,1752],[439,1756],[440,1756],[439,1714,1383],[440,1715,1384],[439,1733,1385],[440,1734,1388],[439,1696],440,439,[440,1674],[439,1734],1735,[1736,1738],[1715,1739],[1716,1740],[440,1737],[439,1268],[439,1124],[440,1732,1125],[1735,1126],[1736,1263],1715,1716,1715,1716,[439,1717],440,440,439,440,439,440,439,440,439,440,439,440,439,[440,1309],[1359,1310],[1181,1320],1181,[1181,1383,7],9,[1181,1388,83,10],1428,1181,[1181,1315],[1181,1358],[420,1359,1301],[419,1302],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[419,1347],[420,1329],[419,1330],420,1848,439,[440,1460],[419,1460],1460,1460,1460,[1358,1460],1359,[1378,1678],[1379,1679],[1378,1680],1379,1358,1359,1378,1358,1358,1359,1378,1358,1359,1379,1378,1379,1378,1379,1378,1379,[1359,1738],[1379,1739],[1181,1380,1740],1181,1421,[1181,1355],1378,1379,1378,1379,1379,1378,1379,1359,1358,[1359,1309],[1181,1310],1181,[1181,1355],[1181,1359,1301],[1733,1302],[1734,1718],[1735,1719],[1736,1720],1736,[420,1735],[419,1676],420,420,420,[419,1694],[420,1754],[419,1755],[420,1696],419,420,[419,1673],1715,1716,1715,[1716,1758],[1735,1759],[1736,1760],[420,1677],419,420,[420,1672],1715,1716,1735,1736,1735,1736,[419,1737],420,419,420,419,420,[419,1652],[420,1653],[419,1654],[420,1655],[419,1656],[420,1657],419,[420,1327],[419,1309],[1379,1310],[1181,1360],1411,[1181,7],9,[1181,83,10],1421,1181,[1181,1335],1378,[440,1358,1281],[439,1282],440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[439,1367],[440,1349],[439,1350],440,439,440,[439,1309,1480],[439,1181,1310,1480],[1181,1480],[1181,1315,1480],[1181,1359,1301,1480],[1378,1302,1480],1379,[1358,1698],[1359,1699],[1358,1700],1359,1378,1379,1358,1378,1378,1379,1358,1378,1379,1359,1358,1359,1359,1358,1359,1378,[1379,1758],[1356,1759],[1181,1400,1760],1181,1181,[1181,1375],1358,1359,1358,1359,1358,1359,1378,1379,1378,[1379,1309],[1181,1310],1181,[1181,1375],[1181,1379,1301],[1713,1302],[1714,1738],[1715,1739],[1716,1740],1716,1713,1714,[440,1653],[440,1676,1678],[440,1679],[439,1680],440,439,440,1847,440,[419,1693],1735,1736,1715,1716,1715,1716,[440,1697],439,1827,[440,1692],1735,1736,1715,1716,1715,1715,1716,[440,1676],439,440,439,[440,1674],1715,[1716,1326],[1715,1327],[1716,1328],[1715,1344],[440,1716,1345],[439,1676,1346],[440,1347],[439,1348],[1379,1330],[1181,1380],1181,[1181,7],9,[1181,83,10],1181,1181,[1181,1355],1358,[420,1378,1301],[419,1302],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1359,1038],[558,1379,1348],[419,1368],[420,1328,1388],[419,1329],[420,1181,1377,1330],[1181,1356],[1181,1400],1181,1181,1181,1428,1181,[1181,1223],[1181,1317,1224],[1181,1300,1227],[1181,1228],1411,1181,1181,1181,1421,1181,[1181,1383],[558,1342],[419,1322],[420,1323,1383],[559,1342],[558,1378,1322],[559,1358,1033],0,0,[419,1387],[420,1350],420,420,419,[420,1327],[419,1309],[419,1181,1320,1310],1181,[1181,1335],[1181,1379,1281],[1358,1282],1359,[1378,1718],[1379,1719],[1378,1720],1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1379,1378,1379,1358,1359,[1181,1380],1181,1181,[1181,1295],[1181,1377],1358,1359,1378,1379,1378,1379,1358,1359,[1358,1328],[1359,1329],[1181,1330],1181,[1181,1395],[1181,1357,1321],[1733,1322],[1734,1323,1758],[1735,1759],[1736,1760],1736,1733,1734,1735,[1736,1698],[419,1657,1699],[420,1700],419,420,419,420,419,439,[440,1732],1715,1735,1736,1735,1736,[419,1717],420,419,[420,1712],1715,1716,1735,1736,1735,1735,1715,1716,[419,1653],[420,1653],[419,1653,1326],[1715,1327],1716,1736,[1735,1328],[1736,1348],[1735,1364],[1736,1365],1366,1251,1368,[1356,1350],[1181,1339],1181,[1181,1295,7],9,[1181,1300,83,10],1181,1181,[1181,1375],[1358,1261],[420,1262],[419,1263],[420,1673],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1038,[579,1379,1329],[419,1368],[439,1038,1388],[440,1348],[439,1349],[1181,1356,1350],[1181,1338,1221],[1181,1222],[1181,1223],[1181,1224],[1181,1227],[1181,1227],[1181,1227],[419,1243],[420,1244],[420,1247],[420,1248],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1299,1228],[1181,1300,1229],[1181,1230],[1181,1362],[439,1342],[440,1322],[419,1033,1362],[420,1342],[579,1378,1322],0,0,[439,1344],[440,1345],[440,1346],[440,1347],[439,1346],[440,1347],[439,1329],[439,1181,1340,1330],1181,[1181,1355],[1181,1359,1301],[1378,1302],1379,[1358,1738],[1359,1739],[1358,1740],1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1379,[1181,1380],1181,1181,[1181,1395],[1181,1357],1378,1358,1359,1358,1359,1358,1358,[1359,1328],[1378,1348],[1379,1349],[1181,1380,1350],1181,1181,[1181,1383],1342,[1716,1322],[1713,1323],[1714,1324],[1715,1325],1716,1713,1714,[1715,1718],[439,1675,1719],[440,1720],439,[440,1652],[439,1653],[440,1657],439,440,[439,1672],1735,1736,1713,1715,[1716,1328],[439,1737,1344,7],[440,8],[439,9],[440,1732,1347,63,10],[1735,1323],[1736,1034],[1715,1035],1716,1715,1716,1735,1736,1715,[1716,1328],[1715,1346],[1716,1724],[439,1736,1725],[1735,1726],[1736,1348],[1378,1368],[1379,1384],[1380,1385],[1181,1386],[1181,1271],[1181,1399,1388],[1181,1400],1181,[1181,1316],[1181,1377,7],9,[1181,1376,83,10],[1181,1318],1181,[1181,1395],[1378,1281],[440,1282],[439,1674],1716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1309,[419,1349],[439,1038,1388],[440,1348],[558,1368],[1181,1379,1369],[1181,1380,1370],[1181,1241],[440,1181,1242],[439,1243],[440,1244],[420,1247],[440,1247],[439,1247],[440,1263],[440,885],[439,886],[440,1268,887],[439,1247],[440,1247],[420,1247],[440,1247],[439,1248],[440,1181,1376,1249],[1181,1319,1250],1181,[1181,1362],[558,1342],[439,1343],[440,1033,1362],[559,1342],0,0,[420,1358,1364],[419,1359,1365],[420,1358,1366],[419,1359,1367],[420,1358,1366],[419,1359,1367],[420,1349],[1181,1360,1350],1181,[1181,1375],[1181,1379,1321],[1358,1322],[1359,1323],[1378,1758],[1379,1759],[1378,1760],1379,1378,1379,1378,1379,[1378,1324],[1379,1325],[1378,1326],[1358,1327],[1359,1328],[1379,1346],[1378,1231],[1379,1346],[1378,1347],[1379,1346],[1378,1347],[1379,1323],[1356,1324],[1181,1400,1325],1401,1428,1411,[1181,1395],1357,1358,[1359,1328],[1378,1344,7],[1379,8],[1378,9],[1378,1347,63,10],[1379,1348],1368,[1356,1350],[1181,1400],1181,1181,1181,[1181,1362],1342,[1733,1343],[1734,1344],[1735,1345],[1736,1323],1733,1734,[1735,1738],[419,1677,1739],[420,1740],1828,[420,1693],1736,[420,1677],419,420,[419,1692],1733,1734,1733,[1735,1328],[420,1736,1348],[419,1364,7],[420,8],[419,9],[420,1367,83,10],[1715,1343],[1716,1344],[1735,1345],[1736,1344],[1735,1345],[1736,1323],[1716,1326],[1736,1327],[1735,1328],[1736,1329],[1735,1366],[1736,1744],1745,[1181,1356,1746],[1181,1368],[1181,1398,1388],[1181,1399],[1181,1400],1181,1421,1181,[1181,1317],[1181,1299,1242],[1377,1224],[1378,1224,7],[1378,9],[1379,1224,103,10],[1376,1228],[1181,1300],1181,[1181,1301],[420,1302],[420,1752],1736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1290],[440,1309],[579,1181,1368],[1181,1356,1388],[1181,1399,1389],[1181,1400,1390],[1181,1261],[420,1262],[420,1263],[1828,1264],440,419,420,419,[420,905],[420,906],[420,907],675,676,440,[419,1267],[420,1268],[419,1269],[420,1181,1376,1270],[1181,1318],1181,[1181,1362],1363,[419,1282],[420,1281],0,0,[1181,1399,1384],[1181,1399,1385],[1181,1396,1386],[1181,1397,1387],[1181,1398,1386],[1181,1399,1387],[1358,1388],[1181,1380,1389],1181,[1181,1395],[1181,1357,1341],[1181,1378,1342],[1379,1343],[1358,1344],[1359,1347],[1358,1323],[1359,1324],[1358,1325],[1359,1326],[1358,1327],[1359,1328],[1358,1344],[1359,1345],[1358,1346],[1378,1347],[1379,1348],[1358,1366],[1359,1251],[1358,1366],[1359,1367],[1358,1366],[1359,1367],[1358,1343],[1181,1400,1344],[1181,1345],[1181,1346,1436],1291,[1181,1344,1438],[1181,1345],[1181,1337,1346],[1378,1347],[1379,1348],[1364,7],8,9,[1367,83,10],1368,[1356,1388],[1181,1338],1181,1181,1401,1181,1181,[1181,1375,1362],[1359,1363],[1714,1364],[440,1715,1365],[1716,1322],[1713,1323],1714,[1715,1758],[439,1697,1759],[440,1760],439,[440,1674],1716,[440,1697],439,1848,[439,1712],1713,1713,[440,1695,1038],[439,1694,1348],[440,1359,1368],[1181,1384,7],8,9,[4,1387,83,10],[1735,4,1363],[1736,1364],1365,[440,1364],1365,[1735,1343],[1736,1346],[1715,1347],[1716,1348],[1358,1349],[1359,1386],[1358,1764],[1359,1765],[1376,1766],[1181,1319,1388],1428,1181,1411,1181,[1181,1295],[1181,1296],[1377,1261],[419,1262],[420,1244],[419,1244,7],[420,9],[439,1244,10],[440,1248],[1181,1380,1270],1181,[1181,1321],[440,1322],[440,1323],[439,1693],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1290],[440,1289],[1181,1356,1290],[1181,1338],1181,1181,[1181,1281],[440,1282],419,420,419,439,440,439,440,1847,440,695,696,419,[439,997],[440,998],[439,1289],[440,1181,1356,1290],[1181,1400],1181,[1181,1316],[1181,1377,1301],[439,1302],[440,1281],0,0,1181,1181,1181,[1181,1401],1181,1181,[1181,1336],[1181,1400],1181,1181,[1181,1375],[1181,1379,1362],1363,[1378,1364],[1379,1367],[1378,1343],[1379,1344,7],[1378,8],[1379,9],[1378,1347,63,10],[1379,1348],[1378,1364],[1379,1365],[1378,1366],[1379,1367],[1359,1368],[1356,1386],[1181,1397,1271],[1181,1397,1386],[1181,1398,1387],[1181,1399,1386],[1181,1387],[1181,1363],1364,[1181,1365],[1181,1366],[1181,1311],[1181,1364],1365,1366,1367,[1181,1378,1368],[1181,1384,7],8,9,[1356,1387,83,10],[1181,1396,1388],[1181,1339],[1181,1317],[1181,1296],[1181,1296],[1181,1297],[1181,1299],[1181,1319],[1181,1395],[1181,1396,1383],[1181,1357,1384],[1359,1385],[419,1736,1342],[420,1733,1322],[1734,1323],1735,[419,1717],420,[419,1673],1735,1736,[420,1717],419,420,[419,1732],1733,[419,1695,1328],[420,1329],[1734,1368],[1181,1388],[1181,7],8,9,[1181,1336,83,10],[1181,1357,1383],[1358,1384],[1181,1380,1385],[1181,1384],[1379,1385],1363,1366,1367,1368,[1378,1369],1379,1378,1358,1359,1376,[1181,1300],1181,1181,[1181,1295],1377,1358,[1358,1301],[439,1302],440,439,440,419,[420,1289],[1376,1290],[1181,1300],[1181,1395,1341],[420,1342],[419,1282],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1290],[440,1289],[1181,1359,1290],[1181,1300],1181,[1181,1316],[1181,1377,1301],[420,1302],439,440,439,615,419,420,420,439,420,439,440,439,440,419,[420,1309],[439,1181,1310],1181,[1181,1317],[1181,1377],[1181,1379,1301],[419,1302],[420,1281],0,0,[1181,1297,1227],[1181,1298,1227],[1181,1299,1227],[1181,1298,1227],[1181,1299,1227],[1181,1299,1228],[1181,1318],[1181,1411],1181,1181,[1181,1395],[1181,1396],[1181,1399,1383],[1181,1357,1384],[1359,1387],[1358,1363],[1359,1364,7],8,9,[1359,1367,83,10],1368,[1378,1384],[1379,1385],[1378,1386],[1378,1387],[1181,1395,1388],[1181,1339],1181,1181,1411,1181,1428,[1181,1383],[1181,1384],[1181,1385],[1181,1386],[1280,1331],[1181,1384],[1181,1385],[1181,1386],[1181,1387],[1181,1388],[1181,7],[871,8],[872,9],[1181,1400,83,10],[1181,1317],[1181,1296,1223],[1181,1357,1224],[1379,1227],[1378,1227],[1379,1227],[1378,1227],[1379,1227],[1181,1299,1227],[1181,1318,1228],[1181,1395],[1181,1397],[1357,1362],[1713,1358,1342],[1714,1343],[1715,1344],[439,1716,1345],[440,1653,1344],[439,1714,1345],[1715,1344],[1716,1345],[440,1716,1344,7],[439,8],[440,62,9],[439,1752,1344,63,10],[440,1695,1345],[439,1348],[440,1714,1358,1349],[1181,1388],[1181,1295],[1181,1318,7],8,9,[1181,83,10],[1181,1395],[1181,1399],[1181,1400],1411,[1181,1395],[1181,1399,1383],[1181,1386],[1181,1387],[1181,1397,1388],[1181,1398,1389],[1181,1399],1357,1378,1379,1379,[1181,1380],1181,1401,[1181,1395],1357,1378,[1378,1321],[419,1322],[420,1344],[419,1345],[420,1346],[439,1347],[440,1348],[1379,1330],[1181,1380],1411,[440,1181,1301],[439,1302],440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1290],[440,1289],[1181,1379,1290],[1181,1320],1181,[1181,1375],[1181,1379,1301],[440,1302],419,420,419,420,439,440,440,419,440,419,420,419,1827,439,[440,1309],[419,1181,1310],1181,[1181,1375],[1181,1379],[1181,1379,1301],[439,1302],[440,1281],0,0,[35,1247],[36,1247],[35,1247],[36,871,1247],[872,1247],[871,1248],[1181,1376,1228],[1181,1299],[1181,1300],1181,[1181,1401],[1181,1428],1181,[1181,1395],[1181,1396],[1181,1396,1383],[1181,1397,1384,7],8,9,[1181,1399,1387,83,10],[1181,1399,1388],[1181,1398],[1181,1399],1357,[1181,1376],[1181,1300],[1181,1411],[1181,1401],[1181,1295],[1181,1296],[1181,1299],[1181,1300],1181,1181,[1181,1411],1181,1257,1181,1181,1181,1428,[1181,1317],[1181,1297,7],8,9,[1181,1298,1223,83,10],[36,1378,1224],[35,1243],[872,1244],[891,1247],[892,1247],[871,1247],[872,1247],[15,871,1247],[16,813,1247],[15,1248],[1181,1318,1249],1181,[1181,1337],[1357,1362],[1734,1379,1363],[1735,4,1364],[1736,4,1365],[1733,4,1364],[1734,4,1365],[16,1735,1358,1364],[1736,1359,1251],[16,1736,4,1364,7],8,9,[4,1364,83,10],[1358,1365],[1733,1359,1368],[1181,1369],[1181,1316],1377,[1379,1223,7],8,9,[1181,1227,83,10],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1300,1228],1428,1428,1181,1401,1181,1181,[1181,1336],1357,1356,[1181,1399],[1181,1400],1181,1181,1421,[1181,1336],[1181,1399],[1357,1341],1363,1364,1365,1366,1367,1368,[1356,1350],[1181,1338,1221],[1181,1222],[420,1181,1281],[419,1282],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1359,1290],[440,1309],[1181,1359,1310],[1181,1340],1421,[1181,1395],[1181,1379,1301],[440,1302],439,1828,439,440,419,420,440,439,635,439,440,439,440,419,[420,1309],[439,1181,1310],1181,[1181,1395],[1181,1396,1261],[419,1262],[420,1263,1261],[579,1358,1262],0,0,[15,937],[16,937],[15,937],[16,891,937],[892,937],[891,938,1268],[892,1248],[1379,1227],[1181,1376,1228],[1181,1297],[1181,1298],[1181,1299],[1181,1296],[1181,1319],[1181,1401],1181,[1181,7],8,9,[1181,83,10],1181,[1181,1411],1181,[1181,1336],[1181,1399],[1181,1400],1181,[1181,1317],[1181,1377],[1181,1359],[1181,1358],[1181,1320,1223],[1181,1224],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1228],[1181,1295],[1181,1300],[1181,1337],[1359,1223,7],8,[871,9],[35,891,1243,103,10],[892,1244],[891,1263],[892,1264],892,892,[872,794],[892,795],[871,796],[16,893],[35,1268],[15,1269],[1181,1300,1228],1421,[1181,1395],[1181,1396,1383],[1181,1357,1384],[1359,1385],[1358,1384],[1359,1385],[1378,1384],[1379,1271],[1359,1384,7],8,9,[1356,1384,83,10],[1181,1385],[1181,1388],[1181,1316,1389],[1377,1223],[4,1224],[35,1243,7],[36,8],[35,9],[36,1247,103,10],[35,1247],[36,1247],[35,1247],[36,1247],[35,1269],[1181,1270],1181,1181,1181,1181,1181,1181,[1181,1395],[1181,1338],1181,1181,1181,1181,1181,1181,1181,[1181,1336],[1181,1357,1383],[1378,1384],[1379,1385],[1378,1386],[1379,1387],[1356,1388],[1181,1339],[1181,1241],[1181,1295,1242],[440,1243],[439,1263],440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1268,[439,1379,1269],[440,1268,1270],[420,1379,1269],[1181,1360,1270],1181,1181,[1181,1321],[420,1322],[419,1323],420,[419,993],420,439,440,420,419,420,419,420,419,420,[439,1038],[440,1348],[419,1181,1330],1401,1181,[1181,1281],[419,1282],[420,1281],[559,1358,1282],0,0,[35,957],[36,957],[35,957],[36,957],[35,957],[36,958],[35,872,938,1268],[871,1247],[872,1248],[36,1379,1227],[35,1378,1227],[1379,1227],[1378,1227],[1181,1376,1227],[1181,1297,1227],[1181,1298,1227],[1181,1299,1227,7],8,9,[1181,1299,1227,83,10],[1181,1296,1228],[1181,1296],[1181,1297],[1181,1298],[1181,1299],[1181,1296,1223],[1181,1296,1224],[1181,1379,1227],[1181,1378,1227],[1379,1227],[1378,1227],[871,1243],[35,813,1244],[36,1247],[35,1247],[36,1247],[35,1247],[36,1247],[35,1248],[1379,1227],[1181,1378,1227],[1181,1227],[36,893,1243,7],[35,872,8],[36,871,9],[872,1263,10],[872,1264],871,872,891,892,[892,814],[871,815],[871,816],[16,893],15,[35,1268],[15,871,1248],[1181,1300,1249],1181,[1181,1428],[1181,1395],[1181,1398],[1181,1399],[1181,1398],[1181,1399],[1181,1400],[1181,1336,7],8,9,[1181,1339,83,10],1401,[1181,1316],[1181,1377,1223],[15,1243],[16,1244],[15,973],[16,974],[15,977],[16,977],[15,977],[16,977],[15,977],[16,977],[15,1289],[1181,1376,1290],[1181,1299],[1181,1300],1181,[1181,1317],[1181,1318],1401,1428,1181,1181,[1181,1316],[1181,1296],[1181,1297],[1181,1298],[1181,1319],1181,1181,[1181,1336],[1181,1396],[1181,1397],[1181,1398],[1181,1399],[1181,1339],[1181,1223],[1181,1224],[420,1262],[419,1263],[420,1674,1264],[420,1653],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1358,1268],[439,1359,1269],[440,1268,1270],[420,1269],[1181,1270],1181,[1181,1316,1341],[440,1181,1342],[439,1343],[440,1033],[439,1013],440,419,420,440,439,440,439,440,655,[440,1038],[419,1348],[420,1368],[439,1181,1376,1350],[1181,1319],1421,[1181,1281],[419,1282],[420,1281],[579,1358,1282],0,0,[15,937],[16,937],[15,937],[16,938],15,[16,978],[15,958],[891,938],[892,939,1268],[891,940,1247],[892,1247],[891,1247],[892,1247],[891,1247],[892,1247],[891,1247],[36,853,1247,7],[35,891,8],[36,892,9],[35,888,1247,103,10],[892,1248],[1379,1227],[1378,1227],[1379,1227],[1378,1227],[891,1243],[892,1244],[891,1247],[892,1247],[891,1247],[892,1247],[891,1263],[15,833],16,15,36,35,36,[35,1268],[36,849,1247],[35,871,1247],[871,1247],[16,893,1263],15,16,[35,908],871,891,892,871,871,[871,834],[871,835],[872,836],[35,851],36,15,[35,1268],[36,1269],[35,1181,1227],[36,1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227,7],8,9,[1181,1227,83,10],[1181,1227],[1379,1227],[36,1243],[35,973],[36,974,794],[35,795],[36,796],35,36,35,36,35,36,[35,1309],[1181,1358,1310],1359,[1181,1320],1181,[1181,1337],[1181,1400],1181,1181,1181,[1181,1295],1377,1358,[1358,1223],[1358,1224],[1376,1227],[1181,1227],[1181,1227],[1181,1228],1181,1181,[1181,1317],[1181,1299,1223],[1181,1224],[420,1243],[419,1244],[440,1263],[439,1674],1715,1716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1378,1328],[558,1379,1329],[439,1018,1330],[440,1289],[1181,1290],1181,[1181,1375,1071],[420,1181,1376,1362],[419,1342],[420,1302],[616,993],420,439,440,420,419,420,419,420,419,[420,1309],[439,1368],[440,1181,1379,1350],[419,1181,1379,1080],[1181,1380],1181,[1181,1281],[419,1282],[420,1281],[559,1378,1282],0,0,[35,957],[36,957],[35,957],[36,958],[35,959],36,[35,978],[36,958],[872,959],[871,960],872,871,872,871,872,871,[16,873],15,16,[15,888,1267],[872,1268],[871,1247],[872,1247],[871,1247],[872,1247],[871,1263],872,871,872,871,872,871,[35,853],36,35,16,15,16,15,16,[15,908],891,871,[35,831],36,15,[36,908],871,872,[16,871],[15,871],[871,854],[891,855],[16,893,856],15,16,36,15,[16,1268],[15,849,1247],[16,15,891,1247],[16,891,1247],[15,892,1247],[16,872,1247],[15,871,1247],[16,872,1247],[15,871,1247],[16,872,1247,7],[15,871,8],[16,872,9],[15,892,1247,103,10],[16,871,1247],[15,871,1247],[16,872,1263],[15,892],[16,892,814],[15,831,815],[16,816],15,16,15,16,15,16,[15,1309],[1181,1378,1310],1379,[1181,1360],1181,1181,1181,[1181,1316],[1181,1300],1181,[1181,1315,1223],[1358,1224],[1378,1227],[420,1243],[419,1244],[420,1247],[420,1247],[420,1247],1248,[1181,1297,1227],[1181,1298,1227],[420,1377,1227],[419,1243],[420,1244],[440,1263],439,[420,1673],1715,1735,1736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1309],[419,567,1349],[439,1038,1350],[440,1348],[1181,1330],1181,[1181,1395,1091],[1181,1396,1092],[419,1181,1357,1281],[420,1282],[420,1013],419,420,419,420,1847,420,419,420,419,[420,1289],[1181,1379,1290],[1181,1379],[1181,1356],[1181,1400],1181,[1181,1281],[419,1282],[420,1281],[579,1358,1282],0,0,15,16,15,[16,978],[15,979],[16,980],15,[16,978],[15,979],[891,980],892,891,892,891,892,891,[36,913],35,[36,829],[35,891],892,891,892,891,892,891,892,891,892,891,892,891,[15,873],[16,781],[15,782],[36,783],[35,784],36,35,36,35,[35,850],891,892,[16,832],35,16,[15,850],892,891,871,[872,874],[871,875],[36,893,876],35,36,16,36,36,[35,977],[36,35,908,977],[36,891,977],[871,977],[872,977],[891,977],[892,977],[871,977],[872,977],[891,977],[892,977],[892,974],[872,974],[891,974],892,871,[872,834],[35,871,835],[36,813,836],35,36,[35,714],[36,715],35,36,[35,1268],[36,1269],[1379,1270],1376,[1181,1318],1181,[1181,1316],1377,[1376,1223],[1181,1224],[420,1243],[419,1244],[420,1247],[440,1263],[439,1264],[440,1267],[440,1267],[440,1267],[420,1268],[419,1247],[420,1247],[420,1247],[439,1263],440,420,420,[440,1752],1735,1736,1716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1309],[1181,1368],[1181,1350],1181,1428,[1181,1261],[439,1262],[440,1263],440,439,440,[439,1564],[440,1565],439,440,420,440,439,[440,1289],[1181,1379,1290],[1181,1356],[1181,1338],1181,[1181,1316],[1181,1377,1281],[419,1282],[420,1281],[559,1358,1282],0,0,35,36,35,36,[35,999],[36,1000],35,36,[35,999],[871,1000],872,871,872,871,872,[15,852],16,[15,829],872,871,872,871,872,871,872,871,872,871,872,871,872,871,[35,893],[36,801],[35,802],[16,803],[15,804],16,15,16,15,15,[36,888],872,871,[15,813],36,35,[36,850],872,871,[872,894],[871,895],[16,872,896],[15,832],16,36,16,16,15,[16,15],[16,908],871,872,871,872,872,871,891,892,891,892,892,892,872,[892,854],[15,871,855],[16,893,856],15,16,[15,734],[16,735],15,16,15,[16,1289],[1358,1342],[1359,1228],1376,[1181,1296],[1181,1377,1223],[420,1358,1224],[419,1243],[420,1244],[440,1263],439,440,420,420,419,419,419,440,439,440,440,420,419,440,440,420,[419,1694],1735,1736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[1181,1290],1401,1181,[1181,1261],[419,1262],[420,1263],419,420,419,420,655,[420,1585],420,439,440,419,420,[419,1268],[420,1269],[1181,1338,1270],1181,[1181,1295],[1181,1377,1261],[419,1262],[420,1263,1261],[1358,1262],[579,1378,1263],0,0,15,16,15,16,[15,1019],[16,891,1020],15,16,[15,999],[16,891,1000],892,891,[36,892],[35,909],[36,913],35,36,[35,908],[36,909],[35,910],892,891,892,891,892,891,892,891,892,891,892,[16,912],[15,913],[16,821],[36,892,822],[35,823],[36,824],35,36,35,36,[35,829],891,892,891,[35,833],36,35,36,[36,828],891,892,891,[36,892],[35,872],[36,832],16,36,36,35,[36,35],36,[35,891],871,891,892,872,871,872,872,871,872,891,892,892,[871,874],[35,871,875],[36,893,876],35,36,35,36,35,36,35,[36,1268],[558,1247],[559,1248],[1358,1227],[1359,1227],[558,1243],[559,1244],[559,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1289],[1181,1290],1421,1181,[1181,1281],[439,1282],440,439,1827,439,440,439,440,419,420,419,439,440,439,[440,1289],[420,1181,1290],1181,[1181,1315],[1181,1379,1281],[439,1282],[440,1301],[558,1358,1302],[559,1358],0,0,16,15,16,[36,1038],[35,1039],[36,1040],35,36,[35,999],[36,871,1000],872,[15,871],[16,833],15,16,15,16,15,16,15,[16,850],871,872,871,872,871,872,871,872,871,[15,851],36,35,[36,841],[16,842],[15,843],[16,844],15,16,[15,808],[16,809,794],[871,795],[871,796],872,871,[15,853],16,15,16,[16,848],871,872,871,872,892,872,[36,809],[16,810],[16,811],[15,872],[16,873],16,[15,849],871,871,872,892,891,892,871,891,892,[871,794],[871,795],[871,796],[871,894],[15,872,895],[16,851,896],15,16,15,16,15,16,15,16,558,[559,1268],[558,1247],[559,1247],[578,1263],579,579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[1181,1376,1290],[1181,1299],[1181,1319],[1181,1301],[440,1302],439,440,420,440,439,1848,[420,1625],439,440,439,440,616,420,[439,1309],[440,1181,1310],1181,[1181,1335],[1181,1379,1301],[439,1302],[440,1321],[578,1378,1322],[579,1358,1033],0,0,[36,1055],[35,1056],[36,1057],[16,1058],[15,1059],[16,1060],15,16,[15,1019],[16,891,1020,794],[892,795],[891,796],[36,853],35,36,35,36,35,36,35,36,[35,850],892,891,892,[36,909],[35,910],[36,911],[35,912],[36,913],35,16,15,[16,861],[36,892,862],[35,863],[36,864],35,36,[35,828],[891,814],[871,815],[891,816],892,891,[35,873],36,35,36,[36,868],891,[892,757],[891,758],[892,759],872,871,871,871,872,892,[36,893],36,35,[36,908],[35,891],[36,871],872,871,871,[36,872],871,872,[871,814],[871,815],[871,816],891,[35,893],36,[35,714],[36,715],35,36,35,36,35,[36,971],[578,934],[579,937],[578,938],558,578,579,579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1289],[1181,1379,1290],[1181,1379],[1181,1320],[1181,1301],[420,1302],420,439,440,419,420,[419,1644],[420,1645],419,420,419,635,439,440,[419,1309],[420,1181,1310],1428,[1181,1355],[1181,1379,1321],[439,1322],[419,1323,1341],[420,1342],[559,1358,1302],0,0,[16,1075],[15,1076],[16,1077],[36,871,1078],[35,1079],[36,1036,1080],[35,1037],[36,1038],[35,872,1039],[36,871,1040,814],[872,815],[871,816],[16,873],15,[16,921],[15,922],[16,923],[15,924],[16,925],15,16,15,[15,908],[16,912],[15,913],16,15,16,15,16,15,36,35,[36,881],[16,882],[15,883],[16,884],15,16,[15,888],[892,834],[891,835],[871,836],872,871,[16,893],35,36,35,[36,888],871,[872,777],[871,778],[891,779],892,871,872,891,[35,892],[36,912],[35,913,794],[36,16,795],[15,796],16,[15,850],[16,891],892,891,871,872,891,892,[891,834],[16,871,835],[872,836],871,[15,893],16,[15,734],[16,735],15,16,15,16,15,[16,991],[558,953],[558,957],[559,958],[578,959],579,558,559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[1181,1379,1290],[1181,1379],[1181,1340],[1181,1321],[440,1343],[419,1033],420,419,439,440,439,440,439,440,439,440,419,420,[439,1309],[440,1181,1310],1181,[1181,1375],[1181,1379,1341],[578,1342],[419,1302],[420,1281],[579,1378,1282],0,0,[36,1095],[35,1096],[36,1097],[35,1098],[36,1038],[35,1056],[36,1057],[35,891,1058],[36,892,1059],[35,891,1060,834],[892,835],[891,836],[36,893],35,36,[35,942],[36,943],[35,944],36,35,36,35,35,36,35,36,35,36,35,[36,808],[35,812],[36,813],35,[36,901],[36,902],[35,903],[36,904],35,36,[35,908],[892,854],[892,855],[891,856],871,872,[36,913],35,35,[36,830],871,872,[892,797],[872,798],[871,799],891,891,892,872,[35,873],36,[35,35,814],[36,36,815],[35,816],36,35,[36,888],872,871,872,871,872,[36,871],[35,851,854],[36,855],[35,850,856],871,872,[36,832],35,36,35,36,35,36,[35,971],[36,972],[578,973],578,[558,978],[559,958],[558,937],[578,938],579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1289],[440,1181,1379,1290],[439,1181,1379],[440,1181,1360],[439,1181,1341],[440,1342],[420,1302],440,439,440,[419,1564],[420,1565],439,419,420,419,1827,439,440,[419,1268],[420,1269,1565],[1181,1270],[1181,1395],[1181,1357],[1181,1379,1281],[419,1282],[420,1281],[559,1358,1282],0,0,16,15,16,[15,1038],[16,872,1039],[15,871,1076],[16,872,1077],[15,871,1078],[872,1079],[871,1080,854],[872,855],[15,871,856],[16,913],15,16,[15,962],[16,963],[15,964],16,15,16,16,15,16,15,16,[15,830],[16,809],[15,812],871,872,871,[15,831],16,16,15,16,15,16,36,[35,908,874],[892,875],[892,876],891,[15,851],16,15,[16,829],892,891,892,[871,817],[871,818],[891,819],891,871,872,892,[35,893],36,[35,15,834],[36,16,835],[15,836],16,[15,829],[16,891],892,891,892,891,892,[16,893],[15,874],[16,891,875],[15,876],[16,888],892,[16,872],[15,832],16,15,16,15,16,[15,991],[16,992],578,578,578,[579,978],[578,957],[579,958],[559,937],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[420,1181,1379,1290],[420,1181,1356],[420,1181,1400],[420,1428],[439,1181,1281],[440,1282],419,675,676,420,1828,419,439,440,439,440,419,420,439,[440,1289,1585],[1181,1290],1181,[1181,1337],[1181,1357,1301],[419,1302],[420,1281],[579,1358,1282],0,0,[36,1055],[35,1056],[36,1057],[35,891,1058],[36,892,1059],[35,891,1096],[36,892,1097],[891,1098],892,[35,891,874],[36,852,875],[35,876],36,35,36,[35,982],[36,983],[35,984],36,35,36,36,35,36,35,[36,829],892,891,892,891,892,891,892,[36,813],36,35,36,35,35,16,[15,894],[16,850,895],[15,909,896],[36,910,955],35,36,[36,808],871,872,871,872,891,891,891,892,891,[35,892],[36,912],[35,913],36,[35,35,854],[36,36,855],[35,808,856],[15,809],871,871,872,871,872,871,872,871,[35,832,894],[36,895],[35,829,896],[36,871],872,[36,892],[35,872],[36,809],[35,810,794],[36,811,795],[35,872,796],[36,873],[35,1011],[36,1012],558,559,558,578,579,[578,978],[579,957],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1289],[440,1181,1356,1290],[419,1181,1338],[440,1181],[419,1181,1223],[420,1243],[419,973],439,695,696,440,420,439,419,615,419,420,439,440,419,[420,1309],[1181,1310],1181,1411,[1181,1301],[419,1302],[420,1281],[559,1358,1282],0,0,[16,1075],[15,1076],[16,1077],[15,871,1078],[872,1079],[871,1080],872,871,872,[15,833,894],[16,895],[15,896],[16,1835],[15,830],[16,809],[15,810],[16,811],[15,812,794],[16,813,795],[15,796],16,16,[15,808],[16,810],[15,812],871,872,871,872,871,872,871,872,871,[16,832],15,16,15,15,36,35,36,[35,1038],[16,975],15,35,[16,888],891,892,891,892,872,871,891,[36,892],[35,912],[35,913],[36,853],35,36,[35,15,874],[36,16,875],[15,828,876],891,871,891,892,891,892,891,892,891,[15,892],[36,809],892,891,892,872,871,871,[15,871,814],[16,872,815],[15,892,816],[16,893],[15,1011],[16,1012],578,579,[578,808],[579,809],[578,810],[579,811],[579,812],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[420,1181,1290],[439,1181],[420,1181],[439,1181,1281],[440,1282],439,440,419,420,439,[440,1625],419,419,420,439,440,419,420,439,[440,1309,1625],[1181,1310],1181,[1181,1317],[1181,1377,1301],[419,1302],[420,1281],[579,1378,1282],0,0,[36,1095],[35,1096],[36,1097],[35,891,1098],892,891,892,891,892,[35,853],36,35,[36,829],891,892,891,892,[891,814],[36,833,815],[35,816],[36,829],[36,809],892,891,892,[891,1038],[892,1110],[891,1111],[35,892,1112],[891,1113],[892,1114],[891,1115],[892,1033],[891,1034],[36,892,1035],[35,809,1036],[36,812,1037],[35,813,1038],[35,1114],[16,1115],[15,1116],[16,1117],[36,1058],[35,995],36,[15,830],872,871,872,871,872,871,872,[15,872],[16,851],15,35,36,35,36,[35,35,894],[36,36,895],[36,35,888,896],892,891,871,872,871,872,871,872,871,872,871,872,871,891,892,871,872,[35,891,834],[36,892,835],[35,912,836],[36,913],[35,1011],[36,1012],558,[559,829],871,872,892,891,892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1309],[440,1181,1310],[419,1181,1295],[440,1181,1319],[419,1181,1301],[420,1302],419,420,439,440,[419,1644],[420,1645],[439,1084],[1848,1085],[420,1086],419,420,439,440,[419,1644],[420,1309,1645],[1181,1376,1310],[1181,1318],[1181,1395],[1181,1357,1301],[439,1302],[440,1281],[559,1378,1282],0,0,[16,1054],[15,1055],[16,1112],[15,1113],[16,1054],[15,871,1055],[872,1116],[871,1117],[872,1033],[15,873],[16,1071],[15,829],872,871,872,871,872,[871,834],[16,872,835],[15,871,836],872,871,872,871,[872,1038],[871,1058],[872,1130],[871,1131],[872,1132],[871,1133],[872,1134],[871,1135],[872,1053],[871,1110],[872,1111],[871,1112],[872,1113],[871,1058],[15,872,1134],[36,1135],[35,1136],[36,1137],[16,1078],[15,1015],16,[35,828],892,891,892,871,[35,872],[36,912],[35,912],[36,913],35,36,15,16,15,16,[15,15],[16,16],[16,15,908],892,892,[891,1564],[871,1565],872,871,872,871,[872,1564],871,872,892,872,871,891,891,892,[35,15,872,854],[36,16,873,855],[35,15,856],[36,16],[35,15,1011],[36,16,1012],[578,830],[579,871],872,892,872,871,872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1358,1268],[578,1359,1269],[419,978,1270],[440,1248],[439,1181,1377,1227],[440,1181,1376,1227],[439,1243],[440,973],439,440,419,420,[439,1223],[440,1224],[419,1104],[439,1105],[440,1106],[439,1227],[440,1228],419,420,419,[420,1268],[420,1269],[1181,1376,1227],[1181,1227],[419,1262],[420,1263,1261],[578,1358,1262],[579,1358,1263],0,0,[15,1074],[16,1075],[15,1132],[16,1133],[15,1074],[16,828,1075],[15,892,1136],[891,1137],[892,1032],[16,893,1054],[15,809,1033],[16,871],892,891,892,891,892,[891,854],[15,892,855],[16,891,856],892,891,892,[891,1038],[892,1058],[891,1078],[892,1150,794],[891,1151,795],[892,1152,796],[891,1153],[892,958,1154],[891,938,1155],[892,939,1073],[891,940,1130],[892,1131],[891,1132],[892,1133],[891,1078],[35,892,1154],[16,891,1155],[15,891,1156],[16,891,1157],[36,1098],35,36,[15,848],892,871,872,[16,912],[15,913],16,15,16,15,16,35,36,35,36,[35,35],[36,36],[36,35],[35,36,908],892,892,891,892,891,892,891,892,891,892,871,871,891,891,871,872,[892,892,874],[16,892,893,875],[15,872,876],[16,891],[15,892,1011],[16,830,1012],871,872,892,891,892,891,892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1378],[559,1379,1268],[439,1359,1269],[420,978,1270],[419,1247],[420,1247],[419,973],[420,1223],[419,1224],[420,1227],[439,1227],[440,1227],[419,1358,1243],[559,1358,1244],[559,1358,1124],[559,1359,1125],[559,1358,1126],[559,1359,1247],[559,567,1359,1248],[439,1227],[440,1227],[439,1227],[419,1228],[420,978],[419,1247],[419,1247],[420,973,1261],[1358,1262],[558,1358,1263],[559,1378],0,0,[35,1094],[36,1095],[35,1152],[36,1153],[35,1094],[36,848,1095],[872,1156],[871,1157],[872,1052],[871,1074,1014],[872,1053,1032],[871,1033],[872,1037],[871,1038],[872,1056],[871,1057],[872,1033],[871,874],[872,875],[871,876],872,871,[872,1038],[871,1058],[872,1078],[871,1098],[872,814],[871,815],[872,816],871,[872,978],[871,958],[872,959,1093],[871,960,1150],[872,1151],[871,1152],[872,1153],[871,1098],[15,872],[36,871],[35,872],[36,893],16,15,16,[35,868],872,891,[16,913],36,35,36,35,36,35,36,35,36,35,36,35,16,16,15,[16,850],891,892,872,871,872,871,872,871,872,891,891,891,892,891,892,[892,912,894],[891,913,895],[892,896],892,[35,892,1011],[36,872,1012],891,892,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1378],[579,1379],[578,1379,1289],[440,932,1290],[439,1223],[440,1224],[439,1224],[440,1358,1243],[439,1359,1244],[440,1359,1247],[419,1359,1247],[420,1359,1247],[439,1378,973],[579,1378],[579,1358],[579,1358],[579,1378],[579,1379,1267],[579,1379,1268],[579,1359,1247],[579,1359,1247],[579,1359,1247],[439,1359,1248],[440,1227],[439,1227],[439,1228],[440,1281],[1378,1282],[1378,1283],[579,1379],0,0,[15,980],16,15,[16,141],[15,142],[16,868,143],[892,1071],891,[892,1072],[891,1094],[892,1073,1052],[891,1053,1032],[892,1057],[891,1058],[892,1076],[891,933,1077],[892,1032],[891,1033,894],[892,895],[891,896],892,[891,1038],[892,1058],[891,1078],[892,1098],891,[892,834],[891,835],[892,836],891,[892,939],[891,978],[892,979],[891,980],892,891,892,891,[35,892],[36,891],[35,891],[36,913],36,35,[36,808],870,872,[35,913],36,16,15,16,[15,933],[16,934],[15,937],[16,937],[36,937],[16,938],[15,939],[16,940],15,36,36,35,36,[35,908],[891,1625],892,[891,921],[892,922],[891,923],[892,924],[891,925,1625],892,872,871,891,[35,892],[36,912],[16,913],872,871,872,[16,891,971],[15,892,972],[16,892,973],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1267,0,0,0,0,0,0,0,0,0,0,[35,1000],36,35,[36,161],[35,162],[36,888,163],872,871,872,871,[872,1093,1072],[871,1073,1052],[872,1077,1014],[871,1078],[872,933,1096],[871,953,1097],[872,1052],[871,1053,1032],[872,1351],[871,1352],[872,1353],[871,1058],[872,1078],[871,1098],872,871,[872,854],[871,855],[872,856],871,872,[871,998],[872,999],[871,1000],872,871,872,871,[15,872],[16,871],[15,851],16,16,15,[16,828],872,[36,833],35,36,[36,312],[35,313],[36,971],[35,953,1873],[36,954,1874],[35,957,1875],[36,957],[16,957],[36,958],[35,959],[36,960],35,16,16,15,16,15,[16,849],892,871,[872,942],[871,943],[872,944],[871,1645],872,871,872,[36,872],[35,851],36,36,[35,871],891,892,[36,871,991],[35,871,992],[36,871,993],871,872,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[15,1000],16,15,[16,181],[15,182],[16,828,183],892,891,[892,1071],891,892,[891,931,1093,1072],[892,932,1097],[891,933,1098],[892,953],[891,973],[892,1072],[16,891,1073,1052],[15,892,1371],[16,891,1372],[15,892,1373],[891,1078],[892,1098],891,892,891,[892,874],[891,875],[892,876],891,892,[891,1018],[892,1019],[891,1020],892,891,892,891,[35,892],[36,851],35,36,36,35,[36,848],872,[16,853],15,16,16,15,[16,1011],[15,1012,1893],[16,1894],[15,1895],[16,977],[36,977],[16,978],[15,979],[16,937],[15,938],[36,939],[36,940],35,36,35,36,[36,891,956],891,[892,962],[891,963],[892,964],871,[872,955],[15,912],[16,912],[16,913],15,16,16,[15,908],871,872,[871,1011],[15,871,1012],[16,871],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,1000],36,35,[36,201],[35,202],[36,848,203],872,871,[872,1091],[871,1092],872,871,[872,952],[754,953],[755,973],871,872,[36,1093,1072],[35,872,1391],[36,871,1392],[35,1393],[36,1098],[15,888],[16,871],872,871,872,[871,895],872,[871,998],872,[871,1038],[872,1039],[871,1040],872,871,872,871,[36,833],35,36,35,36,35,[36,868],871,[36,873],35,36,[36,830],[35,809],[36,871,1031],[35,872,1032],[36,1033],35,36,16,36,[35,978],[36,957],[35,958],[16,959],[16,960],15,16,15,36,[36,849,976],[36,892,1033],[892,982],[871,983],[872,984],[36,912,1038],[36,913,975],35,36,35,36,35,36,35,[36,850],892,[891,1011],[35,871,1012],[36,872],871,872,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[15,979],[16,980],15,16,[15,241],[16,868],892,[891,312],[892,313],891,[892,1013],[891,971],[892,972],[774,973],775,891,892,[16,832],15,16,15,16,[35,888],[36,891],892,[891,312],[892,313],891,892,[891,998],[892,1038],[891,1058],[892,1059],[891,1060,332],[892,333],891,892,891,[16,853],15,16,15,16,15,[16,888],872,[16,893],15,[16,808],[15,891],[16,892],[15,891,1051],[16,892,1052],[15,891,1053],[16,892,1054],[36,891,1033],[36,892],16,15,[16,977],[15,978],[16,979],[15,980],16,15,16,16,[16,996],[16,888,1053,1032],[872,1351],[36,891,1352],[35,913,1353],[36,1058],[16,995],36,35,36,35,36,16,15,16,[15,850],[16,872,1011],[15,871,1012],[16,872],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,999],[36,1000],35,36,[35,261],[36,888],872,871,872,871,872,[871,991],[872,992],[871,993],872,871,872,[36,871],[35,832],36,35,[36,829],872,871,872,871,872,871,872,[871,998],[872,999],[871,1059],[872,1060],[871,352],[872,353],871,872,871,[36,873],35,36,35,[36,312],[35,808,313],[36,872],892,[36,851],35,[36,828],[35,871,977],[36,872,977],[35,871,977],[36,872,1051],[35,871,1073],[36,872,1014],[16,871,1053],[16,872,1054],[36,873,1033],35,[36,997],[35,998],[16,999],[36,1000],35,36,35,36,[36,808,1016],[36,871,1073,1052],[35,872,1374],[16,1372],[15,1373],[16,1078],[16,1015],16,15,16,15,16,36,[16,794],[15,795],[16,796],[15,828,1011],[16,891,1012],[15,892],871,872,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[15,999],[16,1000],15,16,[15,829],891,892,891,892,891,[892,971],[891,972,332],[892,973,333],891,892,891,892,891,[15,892],[16,809],[15,812],[16,891],892,891,754,755,892,891,892,[891,998],[892,999],[891,1040],892,[891,372],[892,373],891,892,891,[16,893],15,16,15,[16,931],[15,888,932],[16,872,933],[15,851,934],[16,937],[15,829,938],[16,892],[15,891],[16,892],[15,891],[16,892],[15,891,1093],[16,892,1094],[36,891,1073],[36,892,1014],[16,893,1053],[15,1054],[36,1056],[35,1057],[36,1058],[35,1040],36,35,36,16,[16,828],[16,872,1093,1072],[15,833,1391],[36,1392],[35,1393],[36,1098],35,36,35,36,35,36,16,[36,814],[35,815],[36,816],[35,848,1031],[36,871,1032],[35,872,1033],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,978],[36,979],[35,980],[36,830],889,871,872,871,872,[871,971],[872,972],[871,973,352],[872,353],871,[872,312],[871,313],872,871,754,755,872,871,872,871,774,775,872,871,872,[871,1018],[872,1019],[871,1020],872,871,872,871,[35,872],[36,871],[36,913],35,36,35,[36,808,951],[35,872,952],[16,913,953],[35,954],[36,957],[35,958],[36,908,938],[35,871],[36,872],[35,871],[36,872],[35,909],[36,872],[16,871,1093],[16,872,1094],[15,833,1073],[16,1014],[16,1076],[15,1077],[16,1059],[15,1060],16,15,16,36,[36,848],[36,872],[35,853],16,15,16,15,16,15,16,15,16,36,[16,834],[15,835],[16,836],[15,868,1051],[16,891,1052],[15,892,992],871,872,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,[16,1019],[15,1020],[16,891],892,891,892,891,892,[891,991],[892,992],[891,372],[892,373],891,892,891,892,891,774,775,892,891,892,891,892,891,892,891,892,[891,1038],[892,1039],[891,1040],892,891,892,891,[15,892],[16,852],16,15,[16,893],871,[872,971],[16,893,972],[16,973],[15,974],16,[15,978],[16,958],[15,937],[16,850,938],[15,892,939],[16,851],15,[16,849],[15,891],[16,892],[15,893,1093],[16,1094],[36,1096],[35,1097],[36,1098],35,36,35,36,16,[16,868],[16,871],[15,873],36,35,36,35,36,35,36,35,36,16,[36,854],[35,855],[36,856],[35,888],[36,871,991],[35,872,992],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,[16,1019],[15,1020],[16,908],872,871,872,871,872,[871,1011],[872,1032],[871,1112],[872,1113],[871,1112],[872,1115],[871,736,1033],[872,737,1034],[871,738,1035],[872,739,1036],[871,737,1037],[872,740,1038],[871,1116],[872,1117],[871,1112],[872,1113],[871,1110],[872,1111],[871,1114],[872,1115],[871,1058],[872,1059],[871,1060],872,871,872,871,[35,893],36,36,[35,829],871,[872,971],[36,872,972],[35,913,973],36,35,36,35,[36,978],[35,957],[36,958],[35,851,959],[36,714],[35,715],36,[35,888],[36,872],[36,893],[35,1017],[36,1018],35,36,35,36,15,16,36,[36,888],[36,872],[35,893],16,15,16,15,16,15,16,15,16,36,[16,874],[15,875],[16,830,876],[15,871],[16,872,991],[15,892,992],871,872,871,872,871,871,[15,872],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,[36,1019],[35,1020],36,[35,908],891,892,891,[892,1071],[891,1072],[892,1073],[891,1132],[892,1133],[891,1132],[892,1135],[891,1053],[892,1054],[891,1351],[892,1352],[891,1353],[892,1058],[891,1136],[892,1137],[891,1132],[892,1133],[891,1130],[892,1131],[891,1134],[892,1135],[891,1078],[892,1079],[891,1080],892,891,892,891,[15,893],16,[16,808],[15,872],[872,971],[15,872,972],[16,913,973],[15,715],[16,933],[36,937],[35,808,937],[36,813,934],[35,937],[36,937],[35,978,938],[36,979],[35,734,980],[36,735],[35,829],[36,890],[36,892],[16,851],15,16,[15,15],[16,16],[15,15],[16,16,794],[35,15,795],[36,16,796],[16,15,808],[16,16,872],[16,15,892],[15,16,851],[36,15],[35,16],[36,15],[35,16],[36,15],[35,16],[36,15],[35,16],[36,15],[16,16],[36,15,894],[35,829,895],[36,892,896],[35,891],[36,892,991],[35,871,992],871,872,871,872,871,871,[35,872],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,15,[16,978,332],[15,714,979,333],[16,715,980],15,[16,871],872,871,[872,1091],[871,1092],[872,1093],[871,1152],[872,1153],[871,1152],[872,1155],[871,1073],[872,1074],[871,1371],[872,1372],[871,1373],[872,1078],[871,1156],[872,1157],[871,1152],[872,1153],[871,1150],[872,1151],[871,1154],[872,1155],[871,1098],[872,1099],[871,1100],872,871,872,871,[35,833],36,[36,871],872,[851,991],[35,992],[36,734],[35,735,952],[36,953],[16,957],[15,888,957],[16,893,954],[15,957],[16,957],[15,958],[16,978,959],[15,979,960],[16,808,980],[15,872,960],[16,871],[16,872],36,35,36,[35,35],[36,36],[35,35],[36,36,814],[15,35,815],[16,36,816],[35,35,888],[36,36,872],[35,35,851],[36,36],[16,35],[15,36],[16,35],[15,36],[16,35],[15,36],[16,35],[15,36],[16,35],[36,36],[16,808],[15,871],[16,872],[15,871,971],[16,872,972],[15,891,973],891,892,[558,891],[559,892],[15,891],[16,891],[15,892],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1304,1704],[4,1745],[4,1746],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,35,[36,352],[35,734,1019,353],[36,735,1020],35,[36,908],[35,912],891,892,891,892,891,892,891,892,[891,1093],[892,1094],[891,1391],[892,1392],[891,1393],[892,1098],891,892,871,872,872,872,891,892,891,892,891,871,872,872,891,[15,853],16,[16,908],[15,913],[16,991],[15,992],[16,971],[15,972],[16,973],[36,829],[35,872],[36,891,974],[35,832],36,[35,978],[36,979],[35,829,978,980],[36,891,979],[35,892,980],[36,891,312],[36,913,313],16,15,[16,714],[15,715],[16,16],[15,15],[16,16,834],[35,15,835],[36,16,808,836],[15,15,872],[16,16,913],[15,15],[16,16],[15,15],[16,16],[15,15],[16,16],[15,15],[16,16],[15,15],[16,16],[15,15],[16,16],[15,888],[16,891],[15,892],[16,891,991],[15,892,992],[16,872],871,891,[578,892],[579,909],[35,911],[36,912],[35,913],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1346],[4,1347],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,[4,1328],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[552,1349],[1359,1764],[1359,1765],[1359,1766],[1359,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,15,[16,372],[15,1019,373],[16,1020],15,16,15,[16,908],[15,912],[16,912],872,871,872,871,872,871,872,871,872,871,872,871,872,871,872,892,892,871,872,872,872,872,891,892,892,871,[35,873],36,[35,931],[36,932],[35,991],[36,992],[35,991],[16,829,992],872,[891,974],892,[871,61,977],872,[16,810],[15,811],[16,812,999],[15,872,1000],[16,871,999],[15,872,1000],[16,913],16,36,35,[36,734],[35,735],36,35,[36,854],[15,871,855],[16,872,856],[35,893],36,35,36,35,36,35,36,35,[36,714],[35,715],36,35,[16,830],[15,872],[16,871],[15,872,971],[16,871,972],[15,872,973],[16,871],891,892,[15,852],16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,[4,1328],[4,1347],[4,1345],[4,1348],[4,1366],[4,1367],[4,1366],[4,1367],[573,1366],[572,1367],[4,1322],[4,1323],4,4,4,4,[4,1328],[4,1348],[4,1304,1704],[4,1745],[4,1746],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1368],[1359,1369],1379,1379,1379,[1379,1341],[1359,1342],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,35,36,[35,1019],[36,1020],35,36,35,36,35,36,[35,850],891,892,891,892,891,892,891,892,891,892,891,892,891,892,891,892,891,892,892,892,892,871,872,892,871,[15,893],16,[15,951],16,[15,1011],[16,1012],[15,829,991],[891,992],892,891,892,[891,81],892,[36,891],[35,892],[36,891,1019],[35,892,1020],[36,891,999],[35,892,1000],36,36,16,15,16,15,16,[15,829],[16,871,874],[15,872,875],[16,872,876],[15,913],16,15,16,15,16,15,16,15,[16,734],[15,735],[16,794],[15,795],[16,828,796],[15,892],[16,891,971],[15,892,972],[16,871,973],[15,872],[16,912],[16,912],[36,913],35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,[4,1328],[4,1329],[553,1364],[1358,1365],[1359,1368],[1358,1386],[1359,1387],[1358,1386],[1359,1387],[1358,1386],[1359,1387],[553,1342],[4,1343],[4,1323],4,4,[4,1328],[4,1348],[1358,1349],[1359,1764],[1358,1765],[1359,1766],[4,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,1378,1379,1378,[1379,1361],[1379,1321],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,[15,1019],[16,1020],[15,960],16,15,16,15,[16,312],[15,313],[16,850],[15,912],[16,910],[15,911],[16,912],871,872,872,871,872,871,872,871,872,871,871,872,871,872,872,872,891,892,871,872,[35,913],36,35,36,[35,829,1011],[36,891,1012],[35,871,1011],[872,1012],872,871,872,871,872,[16,871],[15,872],[16,871,1019],[15,912,1020],[16,912,1019],[15,913,1020],16,16,36,35,36,35,[36,808],[35,872],[36,872,894],[35,872,895],[36,913,896],35,36,35,36,35,36,35,36,35,36,35,[36,814],[35,815],[36,848,816],[35,892],[36,871,1011],[35,872,1012],[36,912],[35,913],36,36,16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1328],[4,1348],[1358,1349],[1359,1384],[1378,1385],[1379,1388],1378,1379,1378,1379,1378,1379,[1358,1362],[1359,1363],[4,1302],[4,1324],4,[4,1289],[4,1368],[1378,1369],1379,1378,1379,[1358,1341],[1359,1342],[4,1282],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1359,1358,1359,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,35,[36,312],[35,978,313],[36,979],[35,980],36,35,36,35,36,35,[36,702],35,36,35,[36,908],891,892,889,890,[35,891],[36,892],871,[872,312],[871,313],872,871,872,[15,891],[16,892],892,872,891,871,[15,891],[16,852],15,16,[15,808],[16,809,971],[15,872,972],[16,891,973],[15,891,1031],[871,1032],[872,1033],[872,1035],[892,1036],[891,1034],[892,1035],[36,891,1036],[35,892,1038],[36,851,1039],[35,1040],[36,999],[35,1000],36,36,16,15,16,15,[16,871],[15,872],[16,851],15,16,15,16,15,16,15,16,15,16,15,16,15,[16,834],[15,835],[16,868,836],[15,872],[16,891,1011],[15,913,1012],16,15,16,16,15,16,15,16,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1289],[1358,1368],[1359,1369],1379,1358,1359,1358,1359,1358,1359,1358,1359,1378,[1379,1321],[4,1322],[4,1344],[4,1231],[1358,1348],[1359,1330],1358,1359,1358,1356,[1181,1399],[1379,1321],[4,1282],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,1378,1379,1378,1379,[1359,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,[15,332],[16,978,333],[15,979],[16,980],15,16,15,[16,701],15,[16,722],[15,725],[16,703],15,16,[15,908],[16,908],[15,909,781],[16,910,782],[15,911,783],[16,912,784],891,892,891,892,891,892,[35,909],[36,910],891,892,871,891,[35,852],[36,931],[35,932],[36,933],[35,849,934],[891,972],[892,973],871,[35,891,1051],[891,1052],[892,1053],[871,1055],[872,1054],[872,1832],[872,1056],[16,891,1055],[15,892,1058],[16,813,1059],[15,1060],[16,1019],[15,1020],16,16,15,16,15,16,[15,908],[16,913],36,35,36,35,36,35,36,35,36,35,36,35,36,35,[36,854],[35,808,855],[36,870,856],[35,872],[36,913,1011],[35,1012],36,35,36,36,35,36,35,36,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1289],[1378,1290],1379,1379,1378,1379,[1378,1223],[1379,1224],[1378,1224],[1379,1227],[1378,1228],1379,1358,[1359,1341],[572,1342],[572,1364],[573,1251],[1378,1368],[1379,1350],1378,1379,1356,[1181,1338],1181,[1181,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1359,1358,1359,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,[15,352],[16,998,353],[15,999],[16,1000],15,16,15,[16,721],15,[16,742],[15,745],[16,723],[15,725],[16,685],15,16,[15,801],[16,802],[15,803],[16,804],[15,908],[16,909],[15,910],[16,911],[15,912],[16,913],15,16,[15,849],[16,891],[15,891],[16,913],15,[16,951],[15,952],[16,953],[15,954],[16,888,973,312],[871,313],891,[15,892],[891,1072],[871,1073],[872,1014],[871,1074],[872,1852],[892,1076],[36,871,1075],[35,872,1078],[36,833,1079],[35,1038],[36,1039],[35,1040],36,35,36,35,36,35,[36,932],[35,714,933],[16,715,934,1561],[15,937,1562],[16,938,1563],[15,939],[16,940],15,16,15,16,15,16,15,16,15,[16,874],[15,828,875],[16,872,876],[15,833],[16,1011],[15,1012,1561],[16,1562],[15,1563],16,16,15,16,15,16,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1289],[1358,1290],1359,1358,1359,[1358,1261],[4,1243],[4,1244],[4,1244],[4,1247],[4,1248],[1359,1249],[1378,1250],[1379,1382],[1358,1362],[1359,1384],[1358,1271],[1359,1388],1359,1358,1359,[1181,1380],[1181,1222],[1181,1223],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,1378,1379,1378,1379,[1359,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,35,36,[35,372],[36,1018,373],[35,1019],[36,1020],35,36,35,[36,741],35,[36,762],[35,765],[36,743],[35,745],[36,705],35,36,[35,821],[36,822],[35,823],[36,714,824],[35,715],36,35,[36,312],[35,313],36,35,36,35,36,35,36,35,[36,971],[35,972],[36,1873,973],[35,829,1874,974],[892,1875],891,[36,892],[35,892],[892,1092],[891,1093],[871,1095],[891,1094],[892,1872],[891,1096],[16,891,1095],[15,892,1098],[16,853],[15,1019],[16,1059],[15,1060],16,15,16,15,[16,312],[15,313],[16,971],[15,734,972],[36,735,954,1581],[35,957,1582],[36,958,1583],[35,959,1584],[36,960],35,36,35,36,35,36,35,36,35,[36,894],[35,848,895],[36,872,896],[35,853,971],[36,972],[35,973,1581],[36,1582],[35,1583],[36,1584],16,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1289],[1378,1290],[1379,1163],[1378,1164],[1379,1165],[1378,1281],[4,1282],4,4,[4,1267],[4,1268],[4,1269],[1358,1228],1359,1358,1359,1358,1359,1358,1359,1356,[1181,1400],[1181,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1359,1358,1359,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,[16,1038],[15,1039],[16,1040],15,16,15,[16,761],15,16,15,[16,763],[15,765],16,15,16,[15,841],[16,842],[15,843],[16,734,844],[15,735],16,15,16,15,16,15,16,15,16,15,16,[15,714],[16,715,991],[15,992],[16,1893,993],[15,888,1894,994],[871,1895],[872,332],[16,892,333],[15,851],[16,849],891,891,891,892,872,871,872,[16,873,1038],[15,1058],[16,1040],15,16,15,16,15,16,[36,931],[35,991],[36,992],[16,974,1601],[15,977,1602],[16,978,1603],[15,979,1604],[16,980,1605],15,16,15,16,15,16,15,16,15,16,[15,868],[16,871],[15,873,991],[16,992],[15,1601],[16,1602],[15,1603],[16,1604],[36,1605],16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1268],[4,1269],[1359,1183],[1358,1184],[1359,1185],[4,1243],[4,1263],4,4,4,4,[4,1268],[1378,1248],[1379,1224],[1378,1224],[1379,1224],[1378,1224],[1379,1224],[1378,1224],[1379,1224],[1378,1224],[1181,1224],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1359,1290],1379,1378,1379,1378,1379,[1359,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,[36,1019,312],[35,1059,313],[36,1060],35,36,35,36,35,36,35,36,35,36,35,36,[35,861],[36,862],[35,863],[36,864],35,36,35,36,35,36,35,36,35,36,35,36,[35,734],[36,735,1011],[35,1012],[36,829],[35,871],872,[892,352],[36,871,353],[35,832],[36,830],871,872,[871,1038,312],[872,1054,313],[872,1351],[891,1352],[871,1353],[36,893,1058],[35,1078],[36,1098],35,36,35,36,35,36,[16,951],[15,1011],[16,1012],[15,1621],[16,997,1622],[15,998,1623],[16,999,1624],[15,1000],16,15,16,15,16,15,16,15,16,15,[16,888],[15,872],[16,893,1011],[15,1012],[16,1621],[15,1622],[16,1623],[15,1624],16,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,[4,1268],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1379,1290],1359,[1359,1163],[1359,1164],[1359,1165],1359,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,[16,1019],[15,1020],16,15,16,15,16,15,16,15,16,15,16,15,16,[15,881],[16,882],[15,883],[16,884],15,16,15,16,15,16,15,[16,714],[15,715],16,15,16,15,[16,1031],[15,1032],[871,1033],[891,1034],[892,1035],[891,372],[871,373],891,892,891,[871,1038],[872,1058],[892,1074],[892,1371],[892,1372],[891,1373],[16,892,1078],[15,832,1098],16,15,16,15,16,15,[16,933],[36,934],[35,972],[36,973],[35,1641],[36,1642],[35,1018,1643],[36,714,1019],[35,715,1020],36,35,36,35,36,35,36,35,36,[35,808],[36,872],[35,892],[36,851,1011],[35,1012],[36,1641],[35,1642],[36,1643],35,36,16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[1379,1227],[1379,1183],[1379,1184],[1379,1185],[1379,1227],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,[36,1019],[35,714,1020],[36,715],35,36,35,36,35,[36,241],35,36,35,36,35,36,[35,901],[36,902],[35,903],[36,904],35,36,35,36,35,36,35,[36,734],[35,735],36,35,36,35,[36,1051],[35,1052],[871,1053],[871,1054],[871,1055],[872,1033],[891,1034],[891,1035],871,[872,1038],[891,1058],[892,1078],[891,1094],[892,1391],[872,1392],[871,1393],[36,872,1098],[35,872],[36,813],35,36,35,[36,951],[35,952],[36,953],[16,954],[15,973],16,15,16,15,[16,734,999],[15,735,1000],16,15,16,15,16,15,16,[15,714],[16,715],[15,888],[16,872],[15,851],[16,1031],[15,1032],[16,1033],[15,1034],[16,1035],15,16,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1203],[4,1204],[4,1205],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,[16,1019],[15,734,1020],[16,735],15,16,15,16,15,[16,261],15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,[16,829],[15,812],[16,813],15,16,15,16,15,[16,1071],[15,1072],[16,849,1073],[15,891,1074],[16,891,1075],[892,1032],[872,1054],[871,1055],[872,1057],[871,1058],[872,1078],[871,1098,704],872,892,871,871,[16,872,703],[15,892],[16,892],[15,831],16,15,[16,971],[15,972],[16,973,332],[36,333],35,36,35,36,35,[36,1019],[35,1020],36,35,36,35,[36,956],35,36,[35,734],[36,735],35,36,35,[36,1051],[35,1052],[36,1053],[35,1054],[36,1055],[35,1033],36,16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,36,35,[36,1019],[35,1020],36,35,36,35,36,[35,956],36,35,36,35,36,35,36,35,36,35,36,35,36,35,[36,808],[35,809],[36,872],[35,871],[36,872],[35,813],36,35,36,35,36,35,[36,1093],[35,908,1094],[36,891,1095],[871,1052],[872,1014],[891,1076],[892,1077],[871,1078],[872,1098],[891,724],[892,725],[892,685],872,891,[892,723],[871,725],[872,685],[35,871],[36,813],[35,952],[36,953],[35,714,973],[36,715,352],[16,353],15,16,15,16,[15,1038],[16,1039],[15,1040],16,15,16,15,[16,976],[15,1033],[16,1034],[15,1035],16,15,16,15,16,[15,1072],[16,1073],[15,1074],[16,1075],[15,1032],[16,1033],15,16,15,16,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,15,[16,1019],[15,1020],16,15,16,15,16,[15,976],[16,1033],15,16,15,16,15,16,15,16,15,16,15,16,[15,829],[16,871],[15,872],[16,891],[15,891],[16,892],[15,833],16,15,16,15,16,15,16,15,[16,908],[871,1072],[872,1094],[871,1096],[872,1097],[872,1098],871,[891,744],[892,745],[891,705],892,892,[892,743],[872,745],[892,705],[15,871],[16,893,971],[15,972],[16,973],[15,734,974],[16,735,372],[36,373],35,[36,1038],[35,1056],[36,1057],[35,1058],[36,1059],[35,1060],36,35,36,35,[36,996],[35,1032],[36,1056],[35,1352],[36,1353],[35,1056],[36,1351],[35,1352],[36,1353],[35,1033],[36,1093],[35,1094],[36,1095],[35,1052],[36,1053],[35,1054],[36,1055],[35,1033],36,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,36,35,[36,978],[35,979],[36,980],35,36,35,36,[35,714,996],[36,715,1032],[35,1033],[36,1034],35,[36,1038],[35,1112],[36,1113],[35,1110],[36,1111],[35,808,1114],[36,809,1115],[35,810,1112],[36,812,1113],[35,871,1033],[36,872],[35,872],[36,871],[35,891],[36,892],[35,853],36,35,36,35,36,35,36,35,36,891,871,891,892,872,871,[872,764],[872,765],871,872,891,[892,763],[892,765],871,[35,871],[36,893,991],[35,992],[36,993],[35,994],36,16,[15,1038],[16,1058],[15,1076],[16,1077],[15,1078],[16,1079],[15,1080],16,15,16,15,[16,1016],[15,1052],[16,1374],[15,1372],[16,1373],[15,1076],[16,1371],[15,1372],[16,1373],[15,1053],[16,1054],[15,1055],[16,1033],[15,1072],[16,1073],[15,1074],[16,1075],[15,1053],[16,1054],[15,1055],[15,1056],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,[16,757],[15,758],[16,759],[15,978],[16,979],[15,980],16,15,16,[15,734,1016],[16,735,1052],[15,1053],[16,1054],[15,1057],[16,1058],1132,1133,[552,1130],[553,1131],[828,1134],[871,1135],[872,1132],[16,872,1133],[15,891,1053],[16,892,1033],[15,892],[16,891],[15,892],[16,891],[15,873],16,15,[16,312],[15,313],16,15,16,15,16,[15,849],871,871,872,892,891,892,871,891,892,871,871,[871,312],871,[15,872],[16,851,1031],[15,1053],[16,1056],[15,1057],[16,1112],[36,1113],[35,1058],[36,1078],[35,1096],[36,1097],[35,1098],36,35,36,35,36,35,36,[35,1072],[36,1391],[35,1392],[36,1393],[35,1096],[36,1391],[35,1392],[36,1393],[35,1073],[36,1074],[35,1075],[36,1032],[35,1033],[36,1093],[36,1094],[35,1095],[36,1073],[35,1074],[36,1075],[35,1076],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,[36,777],[35,778],[36,779],[35,998],[36,999],[35,1000],36,35,36,35,[36,1072],[35,1073],[552,1074],[553,1077],[552,1078],[553,1152],[552,1153],[35,572,1150],[36,573,1151],[35,828,1154],[36,891,1155],[35,892,1152],[36,892,1153],[35,891,1073],[36,892,1053],[35,871,1033],[36,872],[35,872],[36,872],[35,833],36,[35,714],[36,715],35,36,35,36,35,36,35,[36,908],891,871,872,871,871,872,871,872,871,871,871,891,[35,893],[36,1093],[35,714,1073],[36,715,1076],[35,1077],[36,1132],[16,1133],[15,1078],[16,1098],15,16,15,16,[15,714],[16,715],15,16,15,16,15,16,15,16,15,16,15,16,[15,1093],[16,1094],[15,1095],[16,715,1052],[15,1012],16,16,15,[16,1093],[15,1094],[16,1095],[15,1096],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,[16,797],[15,798],[16,799],15,[16,1019],[15,1020],16,15,16,15,[16,1092],[15,1093],[572,1094],[573,1097],[572,1098],573,572,[15,573],[16,533],[15,848],[16,871],[15,872],[16,871],[15,872,1093],[16,871,1073],[15,891,1053],[16,892,1033],[15,871],[16,872],[15,853],16,[15,734],[16,735,332],[15,333],16,15,16,15,16,15,16,[15,850],891,892,891,871,872,891,[892,241],891,871,872,871,[15,893],16,[15,734,1093],[16,735,1096],[15,1097],[16,1152],[36,1153],[35,1098],36,35,36,35,36,[35,734],[36,735],35,36,[35,332],[36,333],35,36,35,36,35,36,35,36,35,36,[35,98],[36,735,99,1011],[35,1012],36,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,[36,817],[35,818],[36,819],35,[36,978],[35,958],[36,959],35,36,35,36,35,[36,589],[35,590],[36,591,1118],[35,592],[36,593],[35,594],36,[35,868],[36,891],[35,892],[36,891],[35,892],[36,891,1093],[35,892,1073],[36,871,1053],[35,891,1033],[36,892],[35,873],36,[35,98],[36,99,352],[35,353],36,35,36,[35,1018],[36,955],35,36,35,[36,888],872,[871,312],[872,313],871,872,[871,261],872,871,872,871,872,[36,832],35,36,35,36,16,15,16,15,16,15,16,15,16,15,16,[15,352],[16,353],15,16,15,16,15,[16,714],[15,715],16,15,16,15,[16,1011],[15,1012],16,16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,15,16,15,16,[15,978],[16,979],[15,959],16,15,16,[15,13],[16,14],15,16,15,16,[15,714],[16,715],[15,888],[16,889],[15,891],[16,892],[15,891],[16,892],[15,891,1093],[16,871,1073],[15,871,1053],[16,891,1033],[15,892],16,15,[16,372],[15,373],16,15,16,[15,1038],[16,975],15,16,[15,829],[16,891],892,891,892,891,892,891,892,891,892,891,[892,98],[16,872,99],[15,832],16,15,16,36,35,36,35,36,35,36,35,36,35,36,[35,372],[36,373],35,36,35,36,35,[36,734],[35,735],36,35,36,35,[36,991],[35,992],36,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,36,35,36,35,36,35,[36,978],[35,979],[36,980],35,36,[35,33,617],[36,34,618],[35,619],[36,620],35,36,[35,734],[36,735],[35,908],[36,909],[35,911],[36,912],[35,909],[36,910],[35,911],[36,891,1093],[35,891,1073],[36,891,1053],[35,892,1033],[36,1034],[35,1035],[36,1036],[35,1037],[36,1038],[35,1110],[36,1111],[35,1058],[36,995],[35,808],[36,809],871,871,872,871,872,871,872,871,872,871,872,871,872,892,872,[36,809],[35,810],[36,811],[16,872],[15,873],16,15,16,15,16,15,16,15,16,15,16,[15,808],[16,812],[15,813],16,15,16,15,16,15,16,[15,971],[16,972],[15,973],16,16,15,[16,505],[15,484],[16,485],[15,486],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,15,16,15,16,15,16,[15,999],[16,491,1000],[15,492],[16,493],[15,513,637],[16,638],[15,639],[16,640],15,16,15,16,[15,929],[16,930],[15,931],[16,932],[15,929],[16,930],[15,931],[16,908],[15,909,1093],[16,910,1073],[15,911,1053],[16,912,1112],[15,1113],[16,1114],[15,1115],[16,1058],[15,1130],[16,1131],[15,1078],[16,1015],[15,828],891,871,891,892,891,892,891,892,891,892,891,892,891,892,872,871,871,871,[16,872],[36,892],[35,893],36,35,36,[35,714],[36,715],35,36,35,[36,808],[35,809],[36,809],[35,871],[36,872],[35,833],36,35,36,35,36,35,36,[35,991],[36,992],35,36,[35,505],[36,487],[35,546],547,546,547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1346],[4,1347],[4,1346],[4,1347],[4,1346],[4,1347],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,36,35,36,35,36,[35,1019],[573,1020],552,553,[35,553,483,657],[36,513,484,658],[35,488,659],[36,660],35,36,35,36,35,36,35,36,35,[36,714],[35,715],36,[35,929],[36,930,1093],[35,931,1073],[932,1132],1133,[13,1134],[14,1135],[36,1078],[35,1150],[36,1151],[35,1098],[36,1099],[35,888],892,[891,757],[871,758],[872,759],871,872,871,872,871,[872,119],871,872,871,891,892,871,872,891,[36,892],[16,912],[15,913],16,15,16,[15,734],[16,735],15,16,[15,830],[16,871],[15,872],[16,871,781],[15,872,782],[16,871,783],[15,872,784],[16,832],15,16,15,16,15,16,[15,1011],[16,1012],15,[16,504],546,547,566,567,[15,566],567,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1345],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1304],[4,1366],[4,1367],[4,1366],[4,1367],[4,1366],[4,1367],[4,1366],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,16,15,16,15,16,[15,1019],[552,1020],572,573,[573,503,677],[553,566,678],[15,547,679],[16,488,680],15,[16,1857],[15,505,1858],[16,487,1859],[15,11,506,1860],[16,12],15,[16,483],[15,506],[16,734],[15,735],16,15,16,[15,1093],[16,1152],[15,1153],[16,33,1154],[15,34,1155],[16,1098],15,16,[15,1118],16,[15,908],[16,892],[892,777],[891,778],[871,779],872,871,872,871,872,871,872,892,872,871,891,891,892,872,[36,873],35,36,35,36,35,36,35,[36,808],[35,809],[36,871],[35,872],[36,892],[35,891,801],[36,892,802],[35,891,803],[36,892,804],[36,871],[35,809],[36,810],[35,811],[36,812],[35,813],36,[35,991],[36,483,992],[35,484],546,566,567,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1364],[4,1365],[4,1366],[4,1367],[4,1364],[4,1365],[4,1366],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,[4,1289],[553,1349],[552,1385],[553,1386],[552,1387],[553,1386],[553,1387],[552,1386],[553,1387],[552,1386],[553,1387],[4,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,36,35,36,[35,1038],[36,1057],[35,1058],[36,572,1040],573,552,[553,523,697],[573,566,698],[35,553,567,699],[36,567,700],[35,485],[36,486,1877],[35,566,1878],[36,567,1879],[35,31,567,1880],[36,32,485],[35,484],[36,547],[35,508],36,35,36,35,[36,483],[35,484],[36,488],35,36,35,36,35,36,35,36,35,[36,908],[892,797],[892,798],[891,799],892,891,892,891,892,891,892,871,871,891,891,871,872,892,[16,893],15,16,15,16,15,16,15,[16,849],[15,871],[16,891],[15,892],[16,892],[15,891,821],[16,892,822],[15,871,823],[16,891,824],[16,892],[15,871],[16,871],[15,871],[16,871],[15,872],[16,813],[15,991],[16,503,992],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1348],[4,1368],[572,1384],[573,1385],[572,1386],[573,1387],[572,406,1384],[573,1385],[572,1386],[573,1387],[572,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,[4,1309],[573,1310],572,573,572,573,573,572,573,572,573,[573,1362],[572,1363],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,16,15,[16,1038],[15,1039],[16,573,1077,1014],[15,573,1078],[16,550,1060],[15,551],[16,550],[15,551,543,717],[16,572,546,718],[15,573,546,719],[16,547,720],546,[547,1897],[547,1898],[546,1899],[547,1900],566,567,567,[15,548],16,[15,483],[16,484],[15,487],547,566,[567,601],[15,506,602],[16,603],[15,604],16,15,16,15,16,15,16,[15,850,817],[891,818],[892,819],872,871,872,[871,119],872,871,872,891,891,891,892,891,892,[35,912],[36,913],35,36,35,36,35,36,35,36,[35,908],[36,891],[35,871],[36,872],[35,871,841],[36,871,842],[35,872,843],[36,871,844],[36,872],[35,871],[36,871],[35,871],[36,891],[35,892],[36,913,1071],[35,714,1011],[36,715,523,1012],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[553,1304],[552,1368],[553,1388],552,553,552,[553,670],[552,406],[553,688],[552,747],553,[552,746,1362],[553,649,1363],[4,1322],[4,1323],4,4,4,4,4,4,4,4,[4,1309],[553,1310],[552,1163],[553,1164],[552,1165],553,553,552,553,552,553,553,[552,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,36,35,[36,1019],[35,552,1059],[36,553,1097],[35,550,1098],[36,570],[35,571],[36,570],[35,571,563],[36,546],[35,544],[36,545,101],[546,102],[547,1917],[567,1918],[566,1919],[546,1920],566,[567,61],[566,62],[35,567],[36,484],547,567,[547,119],567,546,[547,621],[35,546,622],[36,485,623],[35,486,624],[36,487],[35,506],36,35,36,35,36,35,[36,908],891,892,891,892,891,892,891,892,872,871,891,[16,892],[15,912],[16,913],15,16,15,16,15,16,[15,483],[16,484],[15,488],16,15,[16,850],[15,891],[16,892],[15,891,861],[16,871,862],[15,872,863],[16,891,864],[16,892],[15,891],[16,871],[15,872],[16,871],[15,893],16,[15,734,1011],[16,735,543,1012],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1309],[572,1368],[573,1386],[572,1388],573,572,573,572,573,[572,630],[573,406],[572,688],[573,689],[572,690,1382],[573,406,1383],[572,628,1342],[4,1302],4,4,4,4,4,4,4,4,[4,1268],[4,1248],[572,1183],[573,1184],[572,1185],[573,1227],[573,1228],572,573,572,573,573,[572,1321],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,16,15,[16,1019],[15,552,1020],[16,553],[15,570],[16,571],[15,552],[16,552],[15,553,563],[16,566],[15,564],[16,565,121],[566,122],567,546,547,546,547,[547,81],[546,82],[546,717],547,[567,617],[566,720,618],[567,61,619],[547,62,620],566,[546,641],[566,642],[567,643],[566,644],567,[15,526],16,15,16,15,16,[15,483],[16,488],[15,849],892,871,872,871,872,871,872,871,872,872,[36,851],[35,11],[36,12],35,36,35,[36,483],[35,484],[36,487],547,566,567,[36,506,98],[35,99],36,[35,888],[36,872],[35,871,881],[36,872,882],[35,871,883],[36,872,884],[36,871],[35,872],[36,871],[35,872],[36,871],[35,872],[36,832],[35,991],[36,503,992],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1288],[4,1289],[552,1290],553,552,553,552,553,552,553,552,[553,629],[552,629],[553,629],[552,630],[553,406],[552,668,1281],[4,1282],4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1247],[4,1269],[552,1270],553,552,553,553,[552,1341],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,36,[35,1038],[36,1039],[35,572,1040],[36,573],[35,552],552,552,[572,483],[573,546],547,[566,61],[567,62],546,547,[546,101],[547,102],546,547,567,547,546,547,[546,637],[547,638],[546,81,639],[547,82,640],567,[566,661],[567,662],[567,663],[566,664],546,[35,488],36,35,36,35,[36,504],[35,566],[36,568],35,[36,891],891,892,891,892,871,872,[35,912,118],[16,912],[15,913],16,[15,31,956],[16,32],[15,483],[16,484],[15,484],547,567,547,567,546,547,546,[15,485],[16,829,486],[15,891,487],[16,892,506],[15,891,901],[16,892,902],[15,891,903],[16,892,904],[16,891],[15,851],[16,850],[15,892],[16,891],[15,892],[16,872],[15,832,1011],[16,523,1012],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1308],[4,1309],[572,1310],573,572,573,572,573,572,573,572,573,572,573,[572,650],[573,406],[572,688,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1270],572,460,573,572,[573,1362],[4,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,0,0,15,16,15,16,[15,1019],[16,553,1059],[15,553,1060],553,553,552,553,[553,503],[552,566],[553,567],[547,81],[546,82],546,547,[870,546,121],[871,547,122],566,[567,140],566,[567,61],[566,62],[567,120],[566,657],[567,658],[566,659],[567,660],567,[547,681],[546,682],[547,683],[15,546,684],[16,547,61],[15,587,62],[16,484],[15,485],[16,486],[15,487],[16,546],[15,55,547],[16,56,588,118],15,[16,849],892,892,871,872,[15,912],[16,913,617],[15,618],[36,619],[35,620],36,[35,976],[36,504,1033],566,567,547,567,566,567,547,566,546,[808,566],[809,567],[871,566],[871,567],[36,872,526],[35,871],[36,872],[35,871],[36,872],[36,871],[35,872,483],[36,488],[35,888],[36,871],[35,872,951],[36,892,952],[35,872,953],[36,809,543,973],[810,567],546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,552,553,479,553,552,553,552,553,552,553,552,[553,629],[552,629,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,552,553,552,553,[552,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,35,36,35,36,[35,999],[36,573,1000],[35,550],551,551,552,553,[573,523],[572,546],[573,547],567,566,566,567,[35,890,566],[36,891,584],546,566,567,[566,81],[567,82],566,[567,677],[547,678],[566,679],[567,680],566,567,566,567,566,[36,526,81],[35,82],[36,524],[35,584],[36,585],[35,586],[36,587],[35,75,588],[36,76],35,36,[35,888],872,891,[36,913],35,[36,637],[35,638],[16,639],[15,640],16,[15,483,996],[547,1032],[546,1033],547,547,546,[547,381],[546,382],[547,383],[567,384,617],[566,618],[828,567,619],[891,567,620],[871,546],[891,547],[16,892,487],[15,891,488],[16,892],[15,891],[16,892],[16,891,504],[15,892,566],[16,568],[15,888],[16,891,951],[15,892,952],[16,872,953],[15,871,973],[16,871,563],[872,547],566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1309],[572,1310],573,572,573,572,573,572,573,572,573,572,573,572,573,[572,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],573,572,573,572,573,572,[573,1362],[4,1342],[4,1282],4,4,4,4,4,4,4,4,0,0,15,16,15,16,[15,1019],[16,552,1020],[15,570,504],[571,488],571,552,553,[572,543],[573,566],567,546,[547,61],[566,62],[16,11,546],[15,12,912,527],[16,912],[15,912,524],[16,584],[15,546],547,567,566,[567,697],[567,698],[567,699],[546,700],547,[546,61],[547,62],566,567,[16,488],15,16,15,[16,714],[15,715],16,15,16,[15,98],[16,808,99],[13,871],[16,14,872,140],15,16,15,[16,657],[15,658],[36,659],[35,505,660],[36,484],[35,566,1016],[567,1052],[566,1032],[36,567,1033],567,566,[567,401],[566,402],[567,403],[567,404,637],[547,638],[888,546,639],[892,547,640],[891,546],[871,547],[872,547],[35,871,587],[36,872,485],[35,871,486],[36,872,487],[36,871,546],[35,872,547],[36,871,588],[35,872],[36,871,971],[35,891,972],[36,892,973],[35,872],[36,910,503],[911,567],546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1227],[552,1228],553,552,553,552,460,572,[573,1222],[552,1223],[553,1227],[552,1227],[553,1227],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[553,1227],[552,1228],553,552,553,572,[573,1222],[4,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,35,36,35,[36,483,1038],[35,484,1039],[36,553,487,1040],[35,573,566],546,[572,488,381],[552,382],[552,383],[552,563,384],[552,567],[553,547,61],[566,62],[567,81],[546,82],[36,31,568],[35,32,138],[36,714],[35,715],36,[35,524],546,[546,61],[547,62],[546,717],[547,718],[546,719],[566,720],567,[566,81],[546,82],547,567,567,[35,485],[36,486],[35,487],[36,734,488],[35,735],36,35,36,35,[36,828],[33,872],[36,34,833],35,36,35,[36,677],[35,505,678],[16,484,679],[15,566,680],[16,567,141],[15,547,142,1071],[546,143,1072],[546,1052],[547,1012],566,567,[547,421],[566,422],[567,423],[566,424,657],[567,658],[908,566,659],[892,567,660],[892,566],[891,567],[16,871,526],[15,872,955],[16,871,583],[15,872,585],[16,871,586],[16,872,587],[15,871,588],[16,872],[15,892],[16,872,991],[15,871,992],[16,891,993],[15,893],[16,523],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1248],[573,1227],[572,1227],[573,1228],[572,1163],[573,1164],[552,1165],[553,1242],[4,1243],[4,1247],[4,1247],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1248],[573,1228],[572,1163],[573,1164],[552,1165],[553,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,0,0,15,16,15,[16,503,1019],[553,546,1059],[573,547,1060],[573,566],[552,566],[552,547,401],[572,485,402],[572,487,403],[572,546,404],[572,566],[573,567,81],[547,82],566,566,566,[15,506],[16,734],[15,735],[16,13],[15,14],[16,583],[15,566,81],[16,546,82],547,546,[547,140],567,567,546,566,567,566,567,[15,566],[16,587],[15,567],[16,568],15,16,[15,504],[16,487],[15,488],[16,848],872,[16,853],15,16,15,[16,504,697],[566,698],[567,699],[15,547,700],[16,566,161],[15,567,162],[15,566,163],[15,566,1011],[16,587,1012],[566,993],567,[567,441],[567,442],[546,443],[547,444,677],[546,678],[547,679],[908,566,680],[892,567],[36,892,527],[35,891,1038],[36,892,975],[35,891],[36,892],[35,891],[36,892],[35,891],[36,892],[35,871],[36,871,1011],[35,891,1012],[36,891,1013],[35,892],[36,813,543],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1267],[4,1268],[4,1247],[4,1247],[4,1269],[552,1183],[553,1184],[572,1185],[4,1262],[4,1263],4,[4,1267],[4,1267],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1183],[553,1184],[572,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,0,0,35,36,[35,998],[36,523,999],[573,566,1000],567,[546,617],[572,546,618],[572,547,421,619],[573,567,422,620],[567,423],[566,424],567,546,546,547,546,566,[35,567],[36,484],[35,488],[36,33],[35,34],[36,483],546,546,547,566,567,546,[547,617],[566,618],[567,119,619],[546,620],546,547,[35,11,526],[36,12],[35,583],[36,546],[35,485],[36,487],[35,586],[36,587],[35,588,677],[36,868],871,[36,873],35,36,35,[36,563,717],[567,718],[566,719],[546,720],[547,181],[35,546,182],[35,547,183],[35,546,1011],[36,1012],[35,525,1013],546,[547,461],[546,462],[566,463],[567,464,697],[566,698],[546,699],[547,700],[15,850,527],[16,891,1038],[15,892,1058],[16,872,486,995],[871,487],[16,872,488],[15,871],[16,872],[15,871],[16,872],[15,891],[16,891,1031],[15,891,1032],[16,892,1033],[15,892,1034],[16,893,563],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,15,[16,710],[15,711,1018],[16,543,1019],[552,547,1020],[553,546],[566,637],[566,638],[567,441,639],[567,442,640],[546,443],[546,444],547,566,566,567,566,546,[546,119],547,[15,546],[16,484],[15,487],[16,546],546,566,567,547,[546,717],566,[567,637],[566,720,638],[567,639],[546,640],547,[16,567],[15,31,506],[16,32],[15,504],[16,566],[15,11,567],[16,12,526],15,16,15,[16,888],872,[16,893],[15,119],16,[15,505],547,547,547,[15,566],[567,201],[15,566,202],[15,567,203],[15,566,1031],[16,1032],[15,1033],[16,583],[15,584],[16,587],[15,584],[16,585,717],[15,586,718],[16,587,719],[15,588,720],[16,1038],[15,908,1058],[16,891,566,1078],[15,892,587,1015],[891,567],[15,892,568],[16,891],[15,892],[16,891,504],[15,892,487],[16,872,488],[15,871,1051],[16,891,1052],[15,892,1053],[16,912,1033],[15,913,503],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,[36,730],[35,731,998],[36,563,999],[572,546,1000],[573,547],[546,657],[546,658],[546,461,659],[547,462,660],[566,463],[566,464],567,567,[546,717],546,547,[566,720],566,[567,61],[566,62],567,547,566,566,[566,61],[546,62],[547,381],[547,382],[567,383],[546,384,657],[547,658],[567,659],[566,660],567,566,[35,567],[36,484],[35,587],[36,587],[35,31,526],[36,32],35,36,[35,808,717],872,[35,892],[36,851,720],35,[36,505],566,567,567,[36,546],547,[36,546],[35,544,241],[35,545],[35,547,1051],[36,547,1052],[35,1053],[36,1110],[35,1111],[36,1110],[35,1351],[36,1352],[35,1353],[36,1110],[35,1111],[36,1058],[35,547,1078],[36,849,526,1098],[35,892],[36,871,583],[35,872,546],[36,871,485],[35,872,487],[36,871,586],[35,872,587],[36,871,588],[35,872,1071],[36,872,1072],[35,851,1073],[36,1032],[35,523,1033],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,[15,483,1018],[16,573,547,1019],[566,1020],567,[547,677],[566,678],[566,679],[546,680],547,[547,617],[546,618],[547,619],[566,620],566,546,547,566,[567,81],[547,82],566,567,546,566,[567,140,81],[566,82],[546,401],[547,402],[567,120,403],[546,404,677],[547,678],[547,679],[546,680],547,566,[15,567],[16,526],15,16,15,16,15,16,[15,888],872,[15,851],16,[15,504],566,567,547,566,566,567,566,[15,564,261],[35,565],567,[567,1072],[566,1073],[567,1130],[547,1131],[16,546,1130],[15,566,1371],[16,567,1372],[15,566,1373],[16,567,1130],[546,1131],[547,1078],[567,1098],[16,506],[15,891],[16,891,504],[892,566],[891,567],[15,892,526],[16,871],[15,872],[16,912],[15,912,1091],[16,913,1092],[15,1093],[16,1052],[543,1012],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,486],[36,487],[573,566,998],[567,999],[566,1000],546,[547,697],[546,698],[547,699],[566,700],567,[567,140,637],[566,638],[567,639],[547,640],[546,120],[566,61],[567,62],566,567,[35,871,567],[36,872,586],[35,872,584],[36,872,566],566,567,546,[566,421],[546,422],[547,423],[35,566,424,697],[36,567,698],[35,567,699],[36,566,700],[35,567,118],[36,587],[35,567],[36,488],35,36,[35,505],[36,487,140],[35,488],[36,808],[35,872],[36,913,120],35,[36,483],546,547,566,546,566,567,546,546,547,[15,547],566,[567,1092],[566,1093],[546,1150],[547,1151],[36,547,1150],[35,1391],[36,1392],[35,1393],[36,567,1150],[566,1151],[567,1098],566,[36,567],[35,849,484],[36,892,587],[35,892,587],[36,871,526],[35,872],[36,912],[35,913],36,35,36,35,[36,1011],[563,992],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,547,547,[566,1018],[567,1019],[567,1020],546,[547,717],[35,544,718],[35,545,719],[546,720],547,[567,657],[547,658],[567,659],[567,660],566,[567,81],[11,566,82],[15,12,871,567],[16,872,587],[15,11,871,526],[16,12,871],[15,872],[16,892,524],[872,566],546,546,[547,441],[566,442],[567,443],[15,546,444,717],[16,584,718],[15,585,719],[16,586,720],[15,588],16,[15,524],[16,508],15,16,[15,583],[16,584],[871,526],872,[15,893],16,[15,504],566,566,546,[547,617],[566,618],[546,619],[547,620],546,566,567,567,566,567,567,566,546,[16,547],[15,507],16,[15,504],547,546,547,566,567,[15,526],[16,888],[15,872],[16,891],[15,913],16,15,16,15,16,15,[16,1011],[566,1012],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,547,566,[567,978],[547,979],[547,980],567,[35,564],[35,565],566,567,[546,677],[547,678],[546,679],[546,680],547,566,[31,567],[35,32,891,588],[36,892],[35,31,872],[36,32,872],[35,872,138],[36,892],[35,892,583],[36,566],566,[567,461],[546,462],[714,547,463],[35,715,527,464],[36,13],[35,14],36,35,36,[35,504],[36,528],35,36,[35,829],871,872,872,[35,913],[36,505],547,546,547,566,[567,637],[546,638],[566,639],[567,640],566,546,546,546,566,567,567,546,566,[36,546],[35,547],[36,484],[35,567],567,566,567,[35,587],[36,567],[35,808,488],[36,871],[35,872],[36,505],[35,487],[36,488],35,36,35,36,35,[36,546,1031],[546,1032],[547,1033],566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,567,566,567,[567,1019],[546,1000],547,566,[567,138],566,567,[566,697],[567,698],[566,699],[566,700],567,[15,567],[16,871,527],[15,872],[16,872],[15,909],[16,714,910],[15,715,911],[16,912],[15,892],[16,872,525],[15,566],[16,546],566,[734,567],[15,735,507],[16,33],[15,34,140],16,15,[16,504],[15,567],[16,548],[15,714,138],[16,715,808],872,872,[15,872],[16,913],15,[36,583,617],[35,584],[36,566],[35,567,620],547,[546,657],[547,658],[546,659],[547,660],566,566,566,546,566,567,546,546,547,566,567,546,[15,584],[16,585],[15,586],[16,588,617],[15,618],[16,524,619],[15,828,508,620],[16,872],[15,833],[16,583],[15,584],[16,526],15,16,15,16,15,[16,1051],[15,566,1052],[567,1012],546,[547,974],546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,547,546,547,[546,999],[566,1000],567,567,567,547,566,[546,717],[566,718],[546,719],[871,566,720],[36,872,567],[35,872,526],[36,872],[35,892,140],[36,913],35,[36,734],[35,735],36,[35,908],[36,892],[35,55,872,524],[36,56,546],567,546,[35,546],[36,484],[35,485],[36,486],[35,487],[36,546],[35,547],[36,568],[35,734],[735,871],872,[36,55,851],[35,56],36,[35,483],[16,507],15,[16,525],[15,566,140],567,[566,677],[567,678],[566,679],[567,680],[13,546],[36,14,526],[35,524],[35,566],566,567,546,547,546,547,546,547,[35,506],36,35,[36,637],[35,638],[36,483,639],[35,848,484,640],[36,872,488],[35,853],36,35,36,35,36,35,36,35,[36,1071],[35,1011],[545,1012],566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,567,566,567,[566,1019],[567,1020],566,567,566,[567,956],566,[566,993],567,566,[891,567],[16,912,547],[15,912,507],[16,912],[15,913],16,[15,712],16,15,16,15,[16,908],[15,75,892],[16,76,871,525],[872,547],547,[15,547],[16,567],[15,584],[16,585],[15,586,138],[16,566],[15,567],[16,568],15,[16,908],[15,913],[16,75],[15,76],[16,504],[15,566],[53,567,118],[54,488],53,[54,563],547,[566,697],[567,698],[566,699],[567,700],[15,33,568],[16,34],15,[15,503],566,567,546,[547,736],[567,739],[546,738],[566,737],[546,738],[15,547,740],[16,484],[15,485],[16,486,657],[15,487,658],[16,567,659],[15,868,587,660],[16,871,567],[15,873,488],16,15,16,15,16,15,16,15,16,[15,991],[567,992],546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,567,567,[546,1038],[546,1039],[547,1040],566,[11,566],[12,567],[567,976],[546,1033],[546,1013],547,566,566,[36,567],[35,567],[36,485],[35,486],[36,11,487],[35,12,506],[36,733,955],35,36,35,36,35,[36,908,504],[892,547],547,[35,567],[36,526],[35,505],[36,487],[35,488],[36,583],[35,584],[36,588],[35,483],[36,484],[35,485],[36,486],[35,487],547,546,547,[35,568],36,[35,583],567,[546,717],[547,718],[546,719],[547,720],[35,588],36,35,[35,543],566,567,566,567,546,546,547,566,[35,567],[36,546],[35,584],[36,585,677],[35,586,678],[36,588,679],[35,888,680],[36,872,524],[35,893,508],36,35,36,35,36,35,36,35,36,[35,1011],[547,1012],566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[567,1036],[567,1037],567,[566,1019],[566,1059],[546,1060],547,[31,547],[32,546],[547,996],[566,1032],[566,1033],[546,736],[547,737],[566,737],[567,738],[567,739],[567,738],[567,739],[31,567,740],[15,32,567,1038],[16,975],15,16,15,[16,505],[15,484],546,566,567,[15,566],16,[15,583],[16,584],[15,526],16,15,16,[15,524],[16,584],[15,585],[16,586],[15,587],[16,585],[15,586],[16,587],[15,526],16,15,[16,524],[15,585],[16,586],[15,587],[16,527],15,16,15,[15,524],566,567,546,547,546,547,567,546,[15,547],[16,11,527],[15,12],[16,697],[15,698],[16,808,699],[15,872,700],[16,892,504],[15,851,528],16,15,16,15,16,15,16,[15,951],[16,952],[546,972],[547,973],546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,567,567,567,[546,999],[547,1000],566,567,567,566,[567,1016],[547,1052],[546,1032],[566,1110],[567,1111],[566,1110],[567,1351],[567,1352],[567,1353],[567,1110],[567,1111],[35,567,1058],[36,995],35,36,[35,505],567,567,566,567,566,[35,567],36,35,36,35,36,35,36,35,36,35,36,35,36,35,[36,717],35,53,[54,720],36,35,36,35,36,35,36,35,35,[35,525],567,566,567,566,567,546,566,567,[36,31,507],[35,32],[36,717],[35,718],[36,888,719],[35,872,504,720],[36,851,567],[35,548],36,35,36,35,36,35,36,[35,971],[546,972],[566,973],567,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1447],[4,1448],[4,1449],[4,1446],[4,1447],[4,1446],[4,1447],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1447],[4,1448],[4,1449],[4,1446],[4,1447],[4,1446],[4,1447],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,0,0,567,567,[567,1018],[566,1019],[566,1020],567,567,546,546,[547,1071],[566,1072],[566,1052],[567,1130],[566,1131],[567,1130],1371,1372,[567,1373],[546,1130],[566,1131],[15,567,1078],[16,505,1015],[15,484],[16,484,617],[15,547,618],[546,619],[546,620],547,566,[16,567],[15,588],16,15,16,15,16,15,55,56,16,15,16,15,16,15,16,15,73,74,16,15,[16,140],[15,483],[16,484],[15,488],16,15,15,15,[16,583],[15,587],[16,587],[15,526],[16,524],[15,584],567,546,546,[15,484],[16,485],[15,808,486],[16,872,487],[913,546],547,[15,568],16,15,[16,1857],[15,1858],[16,1859],[15,1860],16,[15,991],[566,992],567,547,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1465],1466,1467,1467,1468,1467,1468,1467,1468,1467,1468,1469,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],1466,1467,[1467,1669],[1468,1670],[1467,1671],1468,1467,1468,1467,1468,1469,[4,1470],4,4,4,4,4,4,4,4,4,0,0,[710,566],[711,566],[567,998],[547,999],[547,1000],546,547,566,566,546,[547,1092],[566,1093],[566,1150],[36,567,1151],[35,588,1150],[36,1391],[35,1392],[36,584,1393],[35,566,1150],[36,566,1151],[35,567,1098],546,566,[567,637],[567,638],[566,639],[566,640],567,567,[36,527],35,36,35,36,35,36,35,75,76,36,[35,955],36,35,36,35,[36,956],35,36,35,[36,483],[35,484],[36,487],[35,547],[36,566],[35,567],[36,506],35,35,35,36,35,36,35,36,35,[36,583],566,547,[35,567],[36,871,584],[35,872,585],[36,893,586],[566,141],[567,142],[35,568,143],36,35,[36,1877],[35,1878],[36,1879],[35,1880],36,[35,1011],[563,1012,617],[566,618],[567,619],546,547,546,547,546,546,547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,[1488,825],[1487,826,885],[1488,826,886],[1487,826,887],[1488,827],1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],1486,[1487,1609],[1487,1610,1689],[1488,1610,1690],[1487,1610,1691],[1488,1610],[1487,1610],[1488,1610,1666],[1487,1610,1667],[1488,1611,1668],1489,[4,1490],4,4,4,4,4,4,4,4,4,0,0,[730,546],[731,547],[566,1018],[567,1019],[567,1020],566,567,547,546,566,567,566,[15,567],[16,527],15,16,15,16,[15,524],[16,566],[15,546],546,547,[546,657],[546,658],[546,659],[566,660],[16,567],[15,526],16,15,[16,98],[15,99],16,15,16,15,16,15,[16,1038],[15,552,975],[16,513],15,16,[15,510],[16,553,976],[15,483,1033],[16,484],[15,484],[16,547],[15,567],[16,547],[15,567],[16,546],[15,547],[16,546],[15,485],[15,486],[15,487],[16,506],15,16,15,[16,13],[15,14],16,[15,563],[16,829,567],[15,871,526],[16,872,505],[15,872,487],[16,913,488],[15,583,161],[16,584,162],[15,588,163],16,15,[16,1897],[15,1898],[16,1899],[15,1900],16,[15,991],[16,583,992,637],[36,584,638],[16,585,639],[566,640],567,566,567,566,566,567,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,[1508,845],[1507,846,905],[1508,846,906],[1507,846,907],[1508,847],1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],1506,[1507,1629],[1507,1630,1709],[1508,1630,1710],[1507,1630,1711],[1508,1630],[1507,1630],[1508,1630,1686],[1507,1630,1687],[1508,1631,1688],1509,[4,1510],4,4,4,4,4,4,4,4,4,0,0,[15,544],[16,545],[546,998],[547,999],[567,1000],547,567,567,566,567,566,567,[35,526],36,[35,61],[36,62],35,36,35,[36,583],[35,566,61],[566,62],567,[566,677],[566,678],[36,566,679],[35,567,680],[36,588],35,36,11,12,35,36,35,[36,1038],[35,1055],[36,1056],[35,1057],[36,1058],[35,572,156,995],[36,573,116],[35,490],[36,493],572,[504,573,996],[35,566,1053],[36,567,1054],[35,547,1055],[36,546,1033],[35,547],[36,567],[35,547],[36,566],[35,546],[36,566],[35,546],[35,547],[35,546],[36,547],[35,484],[36,488],35,[36,33],[35,34],36,[35,808,583],[36,872,588],[35,872],[36,872,583],[35,913,584],[36,526],[35,181],[36,182],[35,183],36,35,[36,1917],[35,1918],[36,1919],[35,1920],36,[35,1011],[36,1012,657],[35,658],[36,583,659],[15,584,660],[15,585],[16,586],[15,584],[16,585],[15,586],[16,587],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1525],1486,1487,1487,[1488,845],[1487,846],[1488,846],[1487,846],[1488,847],1487,1488,1489,[4,1530],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1525],1486,[1487,1629],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1630,1706],[1487,1630,1707],[1488,1631,1708],1489,[4,1530],4,4,4,4,4,4,4,4,4,0,0,[35,564],[36,565],[566,1018],[567,1019],[546,1020],547,546,546,547,566,567,[16,588],15,16,[15,81],[16,82],15,16,15,16,[15,525,81],[566,82],546,[546,697],[566,698],[16,567,699],[15,526,700],16,15,16,31,32,15,16,[15,1038],[16,1058],1014,[155,1076],[156,1077],[175,1078],[552,155,1015],[16,553,117],[15,552],[16,553],[15,552],[553,113,1016],[155,1073],[155,1074],[15,175,1075],[16,566,1032],[15,567,1033],[16,547],[15,546],[16,547],[15,546],[16,547],[15,566],[15,567],[15,566],[16,567],[15,566],[16,567],[15,506],16,15,16,[15,871],[16,872],[15,851],16,15,16,[15,201],[16,202],[15,203],16,15,16,15,16,15,16,[15,991],[16,992,677],[15,678],[16,679],[35,680],35,36,35,36,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1465],1506,1507,1507,[1508,845],[1507,846],[1508,846],[1507,846],[1508,847],1507,1508,1509,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],1506,[1507,1629],[1507,1630],[1508,1630],[1507,1630],[1508,1630],[1507,1630],[1508,1630],[1507,1630],[1508,1631],1509,[4,1470],4,4,4,4,4,4,4,4,4,0,0,566,567,[714,566],[715,567,978],[566,979],[567,980],566,566,567,567,[35,527],[36,61],[35,62],36,35,36,35,36,35,36,35,[36,524],[35,584],[36,566,717],[35,567,718],[36,588,719],[35,720],[36,1036],[35,1037],36,35,36,35,[36,1038],[35,1058],[156,1078],[156,1215,213],[175,1214,214],[176,1215,215],[159,1098,216],[35,572,175],[36,573,137],[35,572],[36,573],[35,572,114],[36,573,156],[35,175,1093],[175,1214],[176,1095],[36,175,1052],[35,566,1053],[36,567,1054],[35,566,1055],[36,567,1033],[35,566,1034],[36,567],[35,547,736],[35,567,737],[35,547,737],[36,567,738],[35,546,739],[36,547,740],[35,546],[36,485],[35,486],[36,487],[35,908,506],[36,913],35,36,35,36,35,36,35,[36,241],35,36,35,36,35,36,[35,1011],[36,1012,697],[35,698],[36,699],[15,700],15,16,15,16,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,[1488,845],[1487,846],[1488,846],[1487,846],[1488,847],1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],1486,[1487,1629],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1631],1489,[4,1490],4,4,4,4,4,4,4,4,4,0,0,567,567,[734,547],[735,566],[546,999],[566,1000],546,566,567,[16,526],15,[16,81],[15,82],16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,[15,1037],[16,1038],[15,1054],[16,1058],[175,1078],[176,1098],[15,156,233],[16,155,234],[15,156,235],[16,155,236],[15,552,156],[16,553,157],[15,459],[16,460],[15,552,112],[16,553,176],[15,158],[16,155],[15,156],[155,1072],[175,1073],[176,1074],[15,504,176,1075],[16,566,1169],[15,567,1054],[16,547,1055],[15,567,1056],[15,566,1055],[15,567,1054],[16,547,1055],[15,566,1056],[16,546,1057],[15,566,1033],[16,567],[15,566],[16,567],[15,588],16,15,16,15,16,15,16,15,[16,261],15,16,15,16,15,16,[15,1031],[16,1032,717],[15,1033,718],[16,1034,719],35,35,36,35,36,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1465],1506,1507,1507,[1508,845],[1507,846],[1508,846],[1507,846],[1508,847],1507,1508,1509,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],1506,[1507,1649],[1507,1650],[1508,1650],[1507,1650],[1508,1650],[1507,1650],[1508,1650],[1507,1650],[1508,1651],1509,[4,1470],4,4,4,4,4,4,4,4,4,0,0,567,566,567,566,[566,999],[567,1000],566,567,[35,588],36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,[35,1038],[36,1056],[35,1057],[36,1058,213],[35,155,1074,214],[156,1078,215],[155,1098,216],[36,156],[35,155,253],[36,155,254],[35,156,255],[36,175,256],[35,572,176],[36,573,177],[35,479],[36,480],[35,572,132],[36,573,155],[35,156],[36,175],[35,176],[36,175],[35,155,1093],[156,1094],[156,1211],[155,1189],[35,156,1074],[155,1075],[156,1076],[155,1075],[155,1074],1075,1076,1077,[35,546,1032],[36,546,1033],[35,547],[36,526],35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,[35,1051],[36,1052],[35,1053],[36,1056],[15,1057],[15,1056],[16,1057],[15,1056],[16,1057],[15,1056],[16,1057],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,[1488,845],[1487,846],[1488,846],[1487,846],[1488,847],1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,1488,1487,1488,1487,1488,1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,0,0,567,567,567,567,[15,567,1019],[16,567,1020],[15,587],[16,588],15,16,15,16,15,16,15,16,15,16,15,16,15,[16,1036],[15,1037],[16,1038],[15,1056],[16,1057],[15,1056],[16,1057],[15,1058],[16,1076],[175,1077],[176,1078,233],[175,1094,234],[176,1098,235],[15,175,236],[16,176],[15,175,273],[16,175,274],[15,176,275],[16,155,276],[15,160],[16,176],[15,552,116],[16,553],[15,552,152],[16,553,175],[15,176],[16,155],[15,156],[16,155],[15,175],[16,176],[15,176],[16,175,1209],[176,1094],[175,1095],[176,1096],[175,1095],[175,1094],[156,1095],[155,1096],[156,1097],[566,155,1052],[16,566,1053],[15,547,1149],[16,507],15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,[15,1071],[16,1072],[15,1073],[16,1076],[35,1077],[35,1076],[36,1077],[35,1076],[36,1077],[35,1076],[36,1077],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,[1508,865],[1507,1606,866],[1508,1607,866],[1507,1608,866],[1508,867],1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,1508,[1507,1606],[1508,1607],[1507,1608],1508,1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,0,0,567,567,567,[567,1038],[16,567,1039],[36,1040],35,36,[15,1038],[16,1056],[35,1057],[15,1033],[15,1034],[16,1035],[15,1036],[15,1037],[16,1038],[36,1056],[35,1054],[36,1351],[35,1352],[36,1353],[35,1057],[36,1058],[35,1076],[36,1077],[35,175,1076],[36,176,1077],[35,155,1078],[156,1096],[155,1097],[156,1098,253],[155,254],[36,156,255],[35,155,256],[36,156],[35,155,293],[36,175,294],[35,176,295],[36,175,296],[35,155],[36,156],[35,572,177],[36,459],[35,460,172],[36,573,156],[35,176],[36,175],[35,176,213],[36,175,214],[35,155,215],[36,156,216],[35,155],[36,156],[35,155],[36,156],[35,155],[35,156],155,176,257,258,[35,175,1072],1052,[35,547,1012],[36,568],35,[36,11],[35,12],36,[35,1038],[36,1055],[35,1056],[36,1351],[35,1352],[36,1353],[35,1114],[36,1057],[35,1056],[36,1057],[35,1110],[36,1111],[35,1177],[36,1033],[35,1093],[16,1096],[35,1097],[35,1096],[36,1097],[35,1096],[36,1097],[35,1096],[36,1097],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1525],1526,1527,1527,1528,[1487,1626],[1488,1627],[1487,1628],1528,1527,1528,1529,[4,1530],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1525],1526,1527,1527,1528,[1487,1626],[1488,1627],[1487,1628],1528,1527,1528,1529,[4,1530],4,4,4,4,4,4,4,4,4,0,0,[567,1036],[567,1037],[567,1038],[567,1039],[15,1059],[16,1060,1038],[15,1056],[16,1057],[35,1058],[36,156,1076],[155,1077],[35,1053],[35,1054,213],[36,1055,214],[35,1056,215],[35,1057,216],[36,1058],[156,1133],[155,1074],[156,1371],[156,1372],[155,1373],[155,1014],[156,1078],[155,406,1096],[156,1097],[155,1096],[156,1097],[155,1098],156,155,[156,273],[155,274],[156,275],[155,276],156,155,[155,314],[156,315],[155,140],175,155,[552,117],479,[480,192],[553,176],156,155,[155,233],[156,234],[155,235],[156,236],155,156,155,156,155,[156,138],155,156,277,278,[155,1092],[156,1031],[15,567,1053],[15,588,1033],[16,1034],[15,31],[16,32,1037],[15,1038],[16,1039],[156,1014],[155,1076,702],[156,1371],[155,1372],[156,1373],[155,1134,701],[156,1077],[155,1076],[155,1077],[156,1130],[156,1131,213],[155,1197,214],[156,1032,215],[155,1033,216],156,175,175,176,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547],[4,1547],[4,1548],[4,1646],[4,1647],[4,1648],[4,1548],[4,1547],[4,1548],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547],[4,1547],[4,1548],[4,1646],[4,1647],[4,1648],[4,1548],[4,1547],[4,1548],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,0,0,[35,567,1056],[35,567,1057],[36,567,1058],[15,1059],[16,1060,1038],[36,1058],[35,175,1076],[36,176,1077],[175,1078],[176,1096],[175,1097],[175,1073],[176,1074,233],[175,1075,234],[155,1076,235],[156,1077,236],[175,1078],[176,1096],[175,1094],[176,1391],[176,1392],[155,1393],[156,1097],[176,670,1098],[175,406],[176,668],175,155,155,156,155,[156,293],[175,294],[176,295],[175,296],176,175,175,176,175,155,156,[572,137],573,572,[573,172],176,155,[156,253],[176,254],[175,255],[176,256],175,155,155,156,155,156,175,176,175,176,175,[156,1031],[35,175,1052],[35,1053],[36,1054],[35,1832],[36,1057],[35,1058],[36,155,1078],[156,1095],[552,155,1096,722],[553,1391],[552,1392,685],[553,1393],[175,1154,721],[176,1097,725],[155,1096,685],[156,1097],[176,1150],[176,1151,233],[175,1217,234],[176,1052,235],[175,1053,236],[176,1033],155,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[36,1076],[15,1077],[16,1078],[16,1079,1038],[36,1058],[156,1078],[159,1096],[156,1097],[155,1098],155,156,[155,1093],[156,1094,253],[155,1095,254],[175,1096,255],[176,1097,256],[155,669,1098],[156,747],155,155,156,175,[155,746],[156,690],[155,406],[155,668],155,175,175,176,175,176,[159,314],[156,315],155,257,258,155,[156,213],[155,214],[175,215],[176,216],[552,157],553,552,[553,192],[552,156],[553,175],[155,273],[156,274],[155,275],[155,276],155,175,175,176,175,176,155,156,155,159,155,[156,1072],[155,1094],[156,1073],[155,1074],[156,1852],[155,1077],[156,1078],[156,1098,703],156,[572,175,742],[459,116,745],[460,705],[573,113],[155,741],[155,745],[175,705,704],176,160,[156,253],[155,254],[156,1072,255],[155,1011,256],[156,1012],175,155,156,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[16,1096],[15,1097],[16,1098],[36,1019],[175,1059],[176,1098],155,156,175,175,176,176,[175,273],[176,274],[175,670,275],[176,406,276],[175,406],[176,688],[175,747],175,176,155,[156,670],[156,406],[156,628],175,175,176,175,176,175,[176,138],155,156,175,277,278,176,[175,233],[176,234],[175,235],[176,236],[459,177],460,572,573,[572,172],[573,155],[156,293],[156,294],[156,295],[175,296],175,176,175,[176,140],175,176,175,176,175,176,155,156,175,[176,1093],[552,1210],[552,1872],[553,1097],[156,1098],[176,723],176,[175,762,685],[479,176,765],[480,93],155,[155,761],[175,765],[176,724],[155,725],[156,685],[176,273],[175,274],[176,275],[175,1011,276],[176,1012],175,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,[35,113],[36,96],[16,97,1019],[155,1020],156,155,156,155,156,155,156,[155,293],[156,294],[155,670,295],[155,406,296],[155,406],[155,406],[155,688],[156,689,7],[175,9],[159,689,10],[175,690],[176,406],[176,668],158,155,156,155,156,155,156,155,156,[155,213],[156,214],[155,215],[156,216],[155,253],[156,254],[155,255],[156,256],[479,117],480,460,552,[553,192],[552,175],[553,176],[176,314],[176,315],158,155,156,155,156,155,156,[155,118],156,155,155,175,176,155,156,[572,116],460,[553,113],176,[155,743],[156,745],[156,705],155,156,155,156,175,[176,744],[175,745],[176,705],[156,293],[155,294],[156,295],[155,1011,296],[156,1012],156,155,155,156,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[15,113],[16,156],[35,155],[36,156,1019],[175,1020],176,155,156,175,176,175,176,175,[176,314],[175,315],[175,630,213],[155,406,214],[175,406,215],[175,406,216],[176,406,7],[155,9],[156,406,10],[155,406],[155,628],156,156,155,156,175,176,175,155,155,156,[175,233],[176,234],[175,235],[176,236],[175,273],[176,274],[175,275],[176,276],[572,137],479,[480,113],[572,96],[573,116],[572,134],[573,193],176,155,156,175,176,175,176,175,155,156,[176,213],[155,214],[175,215],[176,216],176,175,176,175,[572,93],[573,176],175,[155,763],[156,765],156,175,176,175,155,156,[176,764],[176,765],175,176,[175,314],[176,971,315],[159,972],[176,973],176,155,175,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,175],[36,176],175,[176,1019],[155,1020],[156,213],[175,214],[176,215],[175,216],176,155,156,155,156,155,[156,233],[175,629,234],[176,629,235],[156,629,236],[155,629],156,[155,629],[156,629],175,155,156,175,176,155,156,155,155,175,176,[175,253],[176,254],[155,255],[156,256],[155,293],[156,294],[155,295],[156,296],[552,157],552,[553,112],160,[552,176],[553,116],552,[553,192],[552,195],[553,196],[552,155],[553,156],[552,155],[553,156],155,155,156,[155,233],[175,234],[175,235],[176,236],156,[155,119],155,[156,314],156,155,156,175,176,156,156,155,175,175,176,156,155,155,156,155,[156,991],[155,992],156,156,175,176,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,156,[175,1038],[176,1039],[175,1060],[176,233],[175,234],[176,235],[175,236],176,175,176,175,155,156,[176,253],[155,254],[155,255],[156,256],155,155,175,257,258,175,176,155,155,[156,213],[196,214],[175,215],[175,216],175,176,[175,273],[176,274],[175,275],[176,276],[175,119],[155,314],[156,315],176,[572,177],572,[573,152],155,[572,156],[573,156],[572,94,213],[573,95,214],[572,96,215],[573,116,216],[553,192],[459,194],[460,195],[573,196],175,175,176,[175,253],[175,254],[155,255],[156,256],176,155,[175,213],[176,214],[176,215],[175,216],176,175,175,[552,196],[553,193],175,155,175,[176,213],[176,214],[175,215],[175,216],176,175,[176,1011],[175,1012],176,155,156,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,176,[155,1019],[156,1020],155,[156,253],[155,254],[156,255],[175,256],176,155,156,155,175,176,[156,273],[175,274],[175,275],[176,276],175,155,156,277,278,175,175,155,156,[155,233],[155,234],[155,235],[156,236],155,156,[175,293],[176,294],[155,295],[156,296],155,[175,213],[176,214],[156,215],[552,117,216],553,[553,172],175,155,156,[175,233],[176,234],[176,235],[572,156,236],[573,97],479,480,552,[553,134],156,155,[156,273],[155,274],[175,275],[176,276],155,156,[176,233],[155,234],[156,235],[155,236],156,155,[552,135],553,[573,113],156,175,155,[156,233],[156,234],[155,235],[155,236],156,155,[156,1031],[155,1032],[156,1033],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,156,[175,1019],[176,1020],175,[176,273],[175,274],[176,275],[158,276],176,175,176,175,176,175,[176,293],[175,294],[176,295],[156,296],155,156,176,175,176,175,176,175,176,[175,253],[175,254],[155,255],[156,256],175,176,158,[176,314],[175,315],176,175,[176,233],[175,234],[176,235],[572,137,236],573,[573,132],155,156,176,[175,253],[176,254],[175,255],[176,256],155,[459,94],[460,95],[572,96],[573,115],[553,134],[552,175],[553,176,293],[552,175,294],[553,155,295],[552,155,296],[553,155],156,[176,253],[175,254],[176,255],[175,256],[552,176],[553,136],459,[460,92],175,158,175,175,[176,253],[176,254],[175,255],[175,256],176,175,[176,1051],[175,1052],[176,1012],176,176,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,176,[155,1019],[156,1020],155,[156,293],[155,294],[156,295],[155,296],156,155,156,155,155,156,156,[155,314],[175,315],176,175,176,156,156,156,155,156,175,155,[156,273],[156,274],[175,275],[155,276],156,156,155,156,155,156,155,[155,253],[156,254],[156,255],[552,157,256],553,[552,152],[553,175],176,156,[156,273],[156,274],[155,275],[156,276],175,[479,155],[480,156],156,[572,155],[573,115],[572,134],[573,194],[459,195,314],[460,196,315],[572,194],[573,175],176,[156,273],[155,274],[156,275],[155,276],[572,177],573,[479,92],[480,176],156,155,156,155,[155,273],[156,274],[156,275],[155,276],156,155,156,[155,1011],[156,1012],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,[156,1038],[175,1039],[176,1020],175,176,[155,314],[156,315],175,176,175,176,175,175,176,176,155,156,156,175,155,155,156,176,175,176,175,175,[176,293],[176,294],[155,295],[175,296],176,156,175,176,175,176,175,[175,273],[176,274],[176,275],[572,177,276],573,[572,172],[573,175],155,155,[156,293],[176,294],[175,295],[176,296],175,175,176,176,155,156,[552,115],553,479,480,552,[553,133],155,[156,293],[175,294],[176,295],[155,296],[552,136],[553,114],[572,156],[573,176],155,156,176,155,[175,293],[176,294],[176,295],[175,296],[176,746],[175,649],[176,689],[175,689,1011],[176,1012],155,155,156,155,156,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,[156,1019],[155,1059],[156,1060],155,156,155,[156,213],[175,214],[176,215],[155,216],156,155,155,156,156,175,176,176,176,175,155,156,156,155,156,155,156,156,[156,314],[175,315],176,155,[156,140],175,176,155,156,155,[155,293],[156,294],[156,295],[552,117,296],552,[553,112],176,175,155,156,[156,314],[155,315],156,155,156,156,156,175,176,[572,176],[573,93],[572,94],[573,95],[572,94],[573,115],[552,133],[553,156],[156,314],[552,156,315],[553,135],[572,113],[573,175],176,156,175,176,156,175,[176,746],[155,649,314],[156,689,315],[155,689],[156,690],[155,406],[156,628],[155,629,1011],[156,1012],175,155,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[175,1038],[176,1039],[175,1040],176,175,176,155,[156,233],[155,234],[156,235],[155,236],156,175,159,176,176,155,155,156,155,156,175,176,155,156,176,155,156,156,176,175,155,155,156,155,[552,193],[553,194],[552,195],[553,196],159,[176,314],[176,315],[459,137],460,[573,132],155,156,175,176,155,156,[176,140],155,156,156,176,175,155,155,156,175,176,175,176,[572,97],[573,134],[573,194],[572,135],[573,114],156,175,155,156,176,175,[155,746],[156,649],[176,690],[175,406],[176,406],[175,406],[176,406],[175,628],176,[175,1011],[176,1012],175,175,176,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[155,1019],[156,1059],[176,1060],175,155,156,155,[156,253],[175,254],[176,255],[175,256],176,155,155,156,156,175,175,176,175,176,156,155,175,176,156,175,158,155,156,155,175,155,156,[552,135],553,573,553,459,[460,133],[553,156],156,[479,157],480,[553,152],[175,213],[176,214],[156,215],[155,216],175,176,156,175,158,155,156,155,175,175,[176,213],[155,214],[156,215],[155,216],156,155,[459,115],460,[552,113],[553,175],176,155,175,176,156,155,[156,650],[176,406],[156,628],[155,629],[156,629,213],[155,629,214],[156,629,215],[155,216],[156,971],[155,972],[156,973],155,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[28,1829],[4,1346],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[28,1829],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[175,1019],[176,1020],156,175,175,176,175,[176,273],[175,274],[176,275],[155,276],156,175,175,176,[176,141],[155,142],[175,143],176,176,155,155,156,[156,213],[175,214],[176,215],[175,216],175,175,155,156,155,[552,175],[459,135,119],[460,113],[573,93,213],[572,94,214],[573,95,215],[479,96,216],[480,97],[553,134],176,[572,177],573,[573,172],[176,233],[155,234],[155,235],[156,236],156,175,176,175,175,175,155,156,155,155,[155,233],[155,234],[156,235],[175,236],159,175,[479,117],[480,113],[572,155],[573,175],176,153,176,175,176,175,[176,650],[176,406],[176,668],175,[176,233],[175,234],[176,235],[175,236],[176,991],[175,992],176,175,155,156,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1348],[4,1364],1849,[4,1304],[4,1343],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],1849,[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,[155,978],[156,979],[176,980],176,155,156,155,[156,293],[155,294],[156,295],[175,296],176,155,155,156,[156,161],[175,162],[176,163],[176,141],[156,142],[175,143],160,176,[156,233],[156,234],[156,235],[155,236],156,176,175,176,[552,175],[553,136],[479,114],[480,155],[156,233],[175,234],[176,235],[155,236],[572,155],[573,116],[459,192],[460,197],553,[552,112],[553,156,253],[175,254],[160,255],[176,256],156,156,156,155,156,176,175,176,175,175,[175,253],[175,254],[176,255],[155,256],156,155,[552,137],[553,112],175,176,155,156,156,155,156,158,[175,650],[176,406],[156,688],[155,747],[156,253],[155,254],[156,255],[155,256],[156,1011],[155,1012],156,175,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1304],[4,1368],[552,1384],[553,1869],[552,1386],[553,1363],[4,1304],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1368],[1359,1869],[1359,1342],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,0,0,[175,998],[176,999],[175,1000],176,175,155,156,176,[175,314],[155,315],155,156,175,175,155,[155,181],[156,182],[155,183],[156,161],[176,162],[175,163],155,156,[155,253],[156,254],[155,255],[156,256],156,175,[552,176],[459,196],[460,135],[573,113],176,175,[155,253],[155,254],[156,255],[175,256],175,[572,155],[479,115],480,573,[572,132],[573,176,273],[175,274],[155,275],[156,276],155,156,155,156,156,175,176,175,155,155,[156,273],[175,274],[155,275],[156,276],257,258,[572,157],[573,132,213],[176,214],[175,215],[175,216],176,156,175,176,175,[176,650],[175,406],[176,406],[155,688],[156,747,273],[175,274],[176,275],[175,276],[176,1031],[175,1032],[176,1033],156,155,155,156,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[4,1349],[552,746,1384],[553,406,1388],[572,668],573,572,[552,1383],[553,1387],[4,1342],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1346],[4,1347],[4,1348],[1378,1330],1379,[1379,1321],[4,1343],[4,1346],[4,1347],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,0,0,[155,1018],[156,1019],[155,1020],156,[155,213],[155,214],[156,215],[156,216],155,175,175,176,175,176,175,[175,201],[176,202],[175,203],[176,181],[155,182],[156,183],175,176,[175,273],[155,274],[156,275],[176,276],176,155,[572,136,140],479,[480,113],156,156,155,[175,273],[175,274],[176,275],[175,276],176,175,176,[552,115],459,[460,152],[553,155,293],[156,294],[175,295],[176,296],[175,213],[155,214],[156,215],[176,216],176,155,156,155,156,175,[176,293],[156,294],[155,295],[155,296],277,278,[552,197],[553,152,233],[156,234],[155,235],[175,236],[155,213],[156,214],[155,215],[156,216],155,155,[156,630],[156,406],[175,406],[176,668,293],[155,294],[156,295],[155,296],[156,1051],[155,1052],[156,1012],176,155,175,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,689,1290],[572,690],[573,406],[460,668],553,552,572,573,[553,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1367],[4,1747],[4,1367],[4,1368],[1358,1350],1359,[1358,1341],[1359,1363],[1358,1366],[1359,1367],[1358,1747],[1359,1367],[4,1343],[4,1323],4,4,4,4,4,4,0,0,[175,1038],[176,1039],[175,1040],176,[175,233],[175,234],[176,235],[158,236],175,155,156,176,155,156,175,175,[175,241],176,[156,201],[175,202],[155,203],156,176,[176,293],[552,175,294],[553,176,295],[552,193,296],[553,193],[552,197],553,[572,113],[573,176],176,158,175,[155,293],[156,294],[176,295],[155,296],156,[175,241],175,[572,177],479,[480,172],[573,175],[155,314],[156,315],176,[176,233],[175,234],[176,235],[155,236],156,175,[176,140],175,176,175,175,[176,314],[175,315],175,[552,176],[459,135],[460,113],[573,176,253],[176,254],[175,255],[175,256],[175,233],[176,234],[156,235],[176,236],175,155,[156,650],[176,406],[175,406],[176,688],[175,669,314],[176,747,315],175,176,[175,1011],[176,1012],156,175,176,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,406,1290],[573,628],[553,629],572,573,572,[480,1846],553,[573,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1368],[1358,1386],[1358,1387],[1358,1767],[1359,1387],[1359,1388],1359,1379,1378,[1379,1383],[1378,1386],[1379,1387],[1378,1767],[1379,1387],[4,1363],[4,1302],4,4,4,4,4,4,0,0,[175,999],[176,1059],[175,1060],156,[155,253],[156,254],[155,255],[156,256],155,175,176,156,155,156,155,155,[156,261],175,176,155,156,156,[552,155],[553,156],[572,193,314],[573,135,315],459,460,[572,114],[573,93],176,[155,213],[155,214],[156,215],[155,216],175,[176,314],[156,315],155,156,[155,261],159,[552,117],553,[552,112],[553,156],175,176,155,[156,253],[156,254],[175,255],[175,256],176,155,155,156,155,156,156,156,156,156,[572,135],[479,113],[480,176],[156,273],[155,274],[156,275],[155,276],[156,253],[175,254],[176,255],[156,256],155,175,176,[156,630],[155,406],[156,406],[155,406],[156,688],[155,689],[156,689],[155,1011],[156,1012],155,156,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[572,648,1228],573,573,572,573,[553,1222],[573,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[1379,1310],1358,1378,1378,1358,1359,1379,1358,1359,1358,1359,1358,1359,1358,[1359,1301],[4,1302],4,4,4,4,4,4,0,0,[156,999],[156,1000],175,176,[155,273],[156,274],[175,275],[176,276],175,175,176,155,175,176,175,175,176,155,156,175,176,176,[459,175],[460,135],552,553,[479,113],[480,93],175,175,176,[175,233],[175,234],[176,235],[175,236],175,176,155,175,176,175,175,[572,137],573,[572,132],[573,257],258,176,175,[176,273],[176,274],[155,275],[155,276],156,175,175,176,175,176,176,155,156,[552,135],[553,113],156,155,[156,293],[175,294],[155,295],[156,296],[176,273],[155,274],[155,275],[156,276],155,175,176,176,[155,629],[156,629],[175,630],[176,406],[175,406],[159,406],[175,1011],[176,1012],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1228],[553,1163],[479,1164],[553,1165],[573,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[1378,1227],[1379,1227],[1378,1227],[1378,1227],[1379,1228],1379,1378,[1379,1222],[1378,1223],[1379,1224],[1378,1224],[1379,1224],[1378,1224],[4,1262],[4,1263],4,4,4,4,4,4,0,0,[176,999],[176,1000],176,156,[175,293],[176,294],[155,295],[156,296],155,155,156,175,176,156,155,155,156,175,176,155,156,156,[479,135],480,[572,113],[573,93],[572,175],[573,176],155,156,155,[156,253],[155,254],[156,255],[155,256],155,156,175,176,156,155,155,[459,157],460,[552,152],[553,277],278,156,155,[156,293],[155,294],[175,295],[175,296],176,155,156,[155,138],156,155,155,[552,176],[553,135],[572,92],[573,175],176,155,156,[175,314],[175,315],176,[160,293],[175,294],[155,295],[156,296],175,176,176,[155,213],[156,214],[156,215],[155,216],[156,629],[155,629],[156,629],[155,1011],[156,1012],176,176,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1183],[572,1184],[573,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1247],[4,1247],[4,1247],[4,1248],[1358,1270],1359,[1358,1261],[4,1243],[4,1244],[4,1244],[4,1244],[4,1244],[4,1263],4,4,4,4,4,4,4,0,0,[155,999],[156,1000],176,175,155,[155,314],[156,315],176,175,175,176,[155,213],[156,214],[156,215],[175,216],175,176,155,156,175,[552,176],[553,135],572,[573,92],175,176,175,176,175,176,175,[176,273],[156,274],[176,275],[175,276],175,176,155,156,156,[175,138],175,[479,117],480,[572,172,213],[573,176,214],[175,215],[176,216],175,176,[175,314],[176,315],175,176,175,176,175,176,175,175,[572,176],[573,116],[552,192],[553,155],158,175,176,156,175,175,176,[156,314],[155,315],156,175,176,175,[175,233],[176,234],[176,235],[175,236],176,175,176,[175,1011],[176,1012],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,[1378,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,0,0,[175,978],[176,979],[156,980],175,175,175,176,156,155,160,155,[175,233],[176,234],[176,235],[155,236],156,155,175,176,156,[572,155],[573,116],552,[553,172],155,156,155,156,155,156,155,[156,293],[176,294],[156,295],[155,296],160,155,175,176,176,155,[459,156],[460,137],553,[552,112,233],[553,156,234],[155,235],[156,236],155,156,155,156,155,156,155,156,155,156,155,176,[552,176],[553,176],[572,115],[573,134],175,176,175,176,[155,119],175,175,176,175,176,155,156,155,[156,253],[155,254],[156,255],[155,256],160,155,156,[155,1011],[156,1012],155,155,156,155,156,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[1359,1227],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,0,0,155,[156,978],[176,979],[176,980],175,176,175,176,175,176,175,[176,253],[175,254],[176,255],[175,256],176,155,156,[155,213],[156,214],[552,175,215],[553,177,216],572,[573,112],175,176,175,176,175,176,175,176,[175,314],[176,315],175,176,175,[176,213],[175,214],[176,215],[175,216],[479,176],[480,157],573,[572,132,253],[573,156,254],[175,255],[176,256],175,176,175,176,175,176,175,176,175,176,175,176,[572,175],[573,176],175,[1715,115],[1716,134],176,175,176,175,176,175,176,175,[176,119],175,176,175,[176,273],[175,274],[153,275],[154,276],176,175,[176,971],[175,972],[176,973],175,155,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,176,[155,978],[156,979],[155,980],156,159,156,155,155,155,[156,273],[156,274],[155,275],[175,276],176,175,176,[175,233],[176,234],[572,156,235],[573,177,236],552,[553,132],155,155,155,175,175,176,175,176,159,156,155,257,258,[155,233],[156,234],[155,235],[175,236],[552,176],[553,177],459,[460,152,273],[553,155,274],[156,275],[175,276],155,156,155,155,155,175,175,176,175,176,155,156,155,159,155,[1735,156],[1715,97],[1716,134],[552,155],[553,156],155,156,156,156,175,176,155,156,155,[155,293],[175,294],[176,295],[160,296],156,[155,971],[156,972],[155,973],156,176,175,175,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,176,155,156,[176,999],[175,1000],176,155,156,175,175,155,[156,293],[175,294],[176,295],[175,296],176,175,175,[176,253],[155,254],[552,156,255],[459,137,256],460,[573,152],156,175,175,176,175,176,175,176,155,156,175,277,278,[176,253],[175,254],[176,255],[175,256],[572,176],[573,117],479,[480,172,293],[573,155,294],[156,295],[155,296],156,156,156,175,175,176,175,176,175,176,175,176,175,176,155,156,[459,117],460,[553,112],[573,176],155,156,176,[176,213],[175,214],[176,215],[175,216],155,155,175,[176,314],[155,315],156,176,[175,991],[176,992],[175,993],176,156,155,156,155,156,155,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,156,175,176,[156,1019],[155,1020],156,155,[156,213],[155,214],[156,215],[175,216],176,[155,314],[156,315],155,156,155,175,[176,273],[156,274],[572,176,275],[479,157,276],480,[553,172],176,[158,213],[155,214],[156,215],[155,216],156,155,156,155,156,155,156,155,[156,273],[155,274],[156,275],[155,276],[552,156],[552,137],552,[553,112],[156,314],[176,315],175,176,176,176,158,155,156,155,156,[155,118],156,155,156,155,155,175,176,[479,137],480,[573,152],[553,155],175,176,155,[156,233],[156,234],[155,235],[156,236],155,156,175,176,175,176,156,[155,1011],[156,1012],[155,1013],156,176,175,176,175,153,154,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,176,156,156,[176,999],[175,1000],176,155,[156,233],[175,234],[176,235],[175,236],176,175,176,175,176,175,176,[156,293],[156,294],[552,176,295],[553,177,296],572,[573,172],155,[156,233],[175,234],[176,235],[175,236],176,175,155,155,156,175,176,175,[176,293],[175,294],[176,295],[175,296],[572,176],[572,157],572,[573,132],156,176,155,156,155,155,156,175,176,175,176,175,155,156,176,155,175,176,176,[572,157],573,[572,192],[573,193],176,175,155,[156,253],[156,254],[155,255],[156,256],175,155,156,176,176,175,[176,971],[175,972],[176,973],159,176,156,155,155,175,176,160,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,176,176,[156,1019],[155,1020],156,175,[176,253],[175,254],[176,255],[155,256],[156,213],[155,214],[156,215],[155,216],155,156,175,176,[156,314],[572,176,315],[573,135],[552,113],[553,175],175,[155,253],[156,254],[155,255],[156,256],156,155,155,175,176,175,176,155,156,[155,314],[156,213],[155,214],[552,156,215],[553,177,216],552,[553,152],156,[176,138],175,176,175,[175,213],[155,214],[156,215],[155,216],156,156,155,155,156,155,175,175,176,156,[552,155],[553,97],552,553,[552,134],[553,156],175,[176,273],[155,274],[156,275],[176,276],175,175,176,[156,213],[155,214],[155,215],[156,991,216],[155,992],[156,993],155,156,155,155,175,176,155,156,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,155,156,[175,1038],[176,1039],[175,1040],176,175,[176,273],[175,274],[176,275],[175,276],[176,233],[175,234],[155,235],[156,236],175,176,155,156,176,[552,135],[553,113],[572,175],[573,159],175,[156,273],[176,274],[155,275],[155,276],156,175,175,175,176,175,176,175,176,175,[155,233],[156,234],[572,176,235],[573,117,236],572,[573,172],176,155,155,156,155,[156,233],[156,234],[176,235],[155,236],155,156,175,175,176,175,175,155,156,176,[572,155,213],[573,175,214],[572,93,215],[573,96,216],[572,97],[573,134],175,[155,293],[156,294],[156,295],[176,296],155,175,176,[176,233],[175,234],[175,235],[176,1011,236],[175,1012],[176,1013],175,176,155,156,175,176,175,176,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,[176,1038],[155,1039],[156,1059],[155,1060],156,155,[156,293],[175,294],[176,295],[155,296],[156,253],[155,254],[175,255],[176,256],156,155,175,[552,196],[553,135],[572,113],[573,176],155,156,155,[155,293],[155,294],[175,295],[155,296],156,156,156,155,156,175,176,155,156,155,[175,253],[176,254],[552,156,255],[459,137,256],460,[553,112],175,175,175,155,156,[155,253],[155,254],[155,255],[175,256],155,156,156,156,155,156,155,175,176,155,[156,233],[176,234],[155,235],[156,236],[552,177],553,[552,172],[553,156],[156,314],[176,315],176,175,155,156,[156,253],[155,254],[155,255],[156,1031,256],[155,1032],[156,1033],155,156,175,155,156,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,155,[156,1019],[175,1059],[176,1060],175,176,175,176,[158,314],[176,315],175,[176,273],[175,274],[176,275],[175,276],176,[552,175],[459,135],460,[573,113],156,155,156,257,258,175,[175,314],[155,315],156,176,[176,119],[176,213],[175,214],[176,215],[158,216],176,175,176,175,[176,273],[175,274],[572,176,275],[479,157,276],480,[573,132],155,156,176,155,155,[175,273],[175,274],[175,275],[155,276],156,176,176,[176,140],155,156,156,155,156,156,[156,253],[176,254],[175,255],[176,256],[572,176],[573,116],[572,192],[573,155],156,155,156,175,175,176,[176,273],[175,274],[175,275],[176,1051,276],[175,1052],[176,1012],175,176,175,175,176,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,[176,1019],[155,1020],156,155,156,155,156,155,156,155,[156,293],[552,155,294],[553,155,295],[156,296],156,[572,135],[479,113],[480,93],[553,175],176,155,155,277,278,155,156,155,156,156,155,[155,233],[155,234],[156,235],[155,236],156,155,156,155,[155,293],[156,294],[552,156,295],[553,177,296],552,[553,152],175,176,156,[175,140],175,[176,293],[155,294],[156,295],[155,296],156,156,155,155,155,156,176,175,176,176,[156,273],[156,274],[155,275],[156,276],155,[552,176],[553,116],[552,134],[553,176],175,176,[156,138],155,155,[156,293],[156,294],[155,295],[156,296],[155,991],[156,992],155,156,155,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,155,[156,1019],[175,1020],176,175,176,155,156,175,176,175,176,[572,193,314],[573,194,315],[552,195],[553,197],552,[553,172],[572,176],[573,175],[155,213],[155,214],[156,215],[176,216],175,175,176,175,176,176,155,[175,253],[155,254],[156,255],[175,256],176,175,176,175,175,[176,314],[572,176,315],[573,117],572,[573,172],175,155,155,156,176,175,[175,314],[176,315],175,176,176,155,175,[175,213],[155,214],[155,215],[156,216],175,176,[176,293],[156,294],[175,295],[176,296],175,[572,176],[573,177],572,[573,172],176,156,176,155,175,176,[176,314],[175,315],176,[175,1011],[176,1012],175,176,175,155,156,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,[176,1019],[155,1020],156,155,156,155,156,175,176,[552,155],[553,135],459,460,572,573,[572,113],[573,176],156,176,[175,233],[155,234],[156,235],[156,236],155,156,155,156,156,156,175,[175,273],[155,274],[156,275],[175,276],176,155,156,155,155,156,[552,156],[553,137],459,[460,112],176,175,155,156,156,155,[156,213],[155,214],[156,215],[156,216],156,175,175,[176,233],[175,234],[155,235],[155,236],155,156,155,[155,314],[156,118],155,156,[552,176],[553,117],552,[553,152],175,176,156,175,176,155,156,155,156,[155,1031],[156,1032],[155,1033],156,175,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,[176,978],[175,979],[176,980],175,176,[552,155],[553,156],[459,193],[460,193],[572,135],[573,113],[479,93],[480,94],[552,95],[553,96],175,175,176,155,[156,253],[175,254],[176,1036,255],[155,256],156,176,155,156,156,176,175,[155,293],[155,294],[156,295],[155,296],156,155,156,175,159,176,[572,176],[573,157],479,[480,132],155,156,175,176,155,156,[176,233],[155,234],[156,235],[156,236],176,175,155,[155,253],[156,254],[175,255],[175,256],175,176,175,155,155,175,176,[572,175],[573,137],572,[573,172],176,175,[155,213],[156,214],[176,215],[175,216],176,175,176,[175,1051],[176,1052],[175,1012],176,156,155,155,156,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[28,1829],[4,1346],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,[15,156],[16,156,998],[15,175,999],[16,156,1000],[15,175],[16,175],[15,572,176],[16,573,197],[15,479],[16,480],[15,552,113],[16,553,175],[15,176],[16,176],[15,572,155],[16,573,156],[15,155],[16,175],[15,176],[16,156],[15,155,273],[16,156,274],[15,155,275],[16,156,276],[15,155],[16,156],[15,155],[16,156],[15,155],[16,156],[15,155],[16,156],[15,155,314],[16,156,315],[15,175],[16,176],[15,175],[16,176],[15,155],[16,155],[15,156,1007],[16,156],[15,552,177],[16,553],[15,553,152],[16,175],[15,176],[16,156],[15,155],[16,175,1008],[15,176],[16,156,253],[15,175,254],[16,158,255],[15,155,256],[16,156],[15,155],[16,175],[15,175,273],[16,176,274],[558,155,275],[559,156,276],[558,155],[559,156],[558,155],[559,175],[558,175,213],[559,175,214],[558,176,215],[559,552,176,216],[558,552,157],[559,553],[558,1565,552,152],[559,553,156],[558,155],[559,156,233],[558,1564,176,234],[559,1565,156,235],[558,155,236],[559,156],[558,155],[559,156],[558,155,140],[559,156,1011],[558,155,1012],[559,156],176,155,175,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1345],[4,1348],[4,1704],[4,1745],[4,1746],[4,1343],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1345],[4,1348],[4,1364],1849,[4,1304],[4,1343],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[35,176],[36,176,1018],[35,176,1019],[36,176,1020],[35,175],[36,176],[35,552,135],[36,553],[35,552,92,956],[36,553,93],[35,572,175],[36,573,176],[35,175],[36,176,1038],[35,175,1054],[36,714,176,1055],[35,715,155,1112],[36,156,1113],[35,155,1033],[36,156],[35,175,293],[36,176,294],[35,175,295],[36,176,296],[35,175],[36,176],[35,175],[36,176],[35,175],[36,176,1158],[35,175,1054],[36,176,1115],[35,175,1116],[36,176,1173],[35,175,1176],[36,176,1177],[35,11,155,1149],[36,12,156],[35,175],[36,175,1158],[35,176,1027],[36,176],[35,572,175],[36,573,116],[35,573,192],[36,176],[35,155],[36,155],[35,156],[36,156,1028],[35,175,1149],[36,176,273],[35,175,274],[36,175,275],[35,175,276],[36,155],[35,156],[36,155],[35,155,293],[36,155,294],[578,155,295],[579,156,296],[578,175],[579,159],[578,175],[579,155],[578,175,233],[579,176,234],[578,175,235],[579,572,176,236],[578,572,177],[579,573],[578,572,172],[579,573,155],[578,156],[579,176,253],[578,176,254],[579,176,255],[578,175,256],[579,176],[578,175],[579,176],[578,175],[579,176,1011],[578,175,1012],[579,176],156,175,176,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1747],[552,1368],[553,1764],[552,1765],[553,1766],[4,1363],[4,1747],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[1358,1329],[1359,1747],[1358,1368],[1359,1384],[1358,1869],[1359,1386],[1358,1363],[1359,1747],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,[15,155],[16,156,1038],[15,155,1039],[16,156,1040],[15,11,552,155],[16,12,459,135],[15,460,113],[16,573,93],[15,572,155,976],[16,573,155,1033],[15,155,1034],[16,156],[15,156,1038],[16,155,1058],[15,175,1074],[16,734,176,1075],[15,735,175,1132],[16,176,1133],[15,175,1032],[16,176,1033],[15,156],[16,175,314],[15,155,315],[16,156],[15,155],[16,155],[15,155,1158],[16,175,1172],[15,155,1173],[16,156,1178],[15,155,1074],[16,156,1135],[15,155,1136],[16,156,1193],[15,155,1196],[16,156,1197],[15,31,175,1169],[16,32,176,1170],[15,155,1171],[16,155,1178],[15,156,1047],[16,155],[15,156],[16,552,177],[15,553],[16,552,134],[15,553,176],[16,160],[15,176],[16,156,1048],[15,156,1169],[16,156,1149,293],[15,155,294],[16,11,156,295],[15,12,176,296],[16,175],[15,176],[16,175],[15,175],[16,175,314],[558,175,315],[559,176],[558,155],[559,156],[558,155],[559,175],[558,176,253],[559,176,254],[558,176,255],[559,155,256],[558,552,177],[559,553],[558,552,192],[559,553,175],[558,552,176],[559,553,156,273],[558,176,274],[559,156,275],[558,155,276],[559,156],[558,155],[559,156],[558,155],[559,156,1031],[558,155,1032],[559,156,1033],155,156,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1349],[553,1767],[572,1388],573,572,573,[552,1383],[553,1767],[552,1342],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1349],[1379,1767],[1378,1388],1379,1378,1379,[1378,1383],[1379,1767],[4,1342],[4,1302],4,4,4,4,4,4,4,4,0,0,[35,175],[36,176,1019],[35,175,1059],[36,176,1060],[35,31,552,177],[36,32,479],[35,480,172],[36,156],[35,175,996],[36,175,1053],[35,155,1170],[36,156,1171],[35,175,1058],[36,176,1078],[35,175,1094],[36,176,1095],[35,175,1152],[36,175,1153],[35,176,1052],[36,155,1053],[35,156,1056],[36,155,1057],[35,156,1112],[36,156,1113],[35,156,949],[36,175,950],[35,175,1178],[36,176,1192],[35,175,1193],[36,176,1198],[35,175,1094],[36,155,1155],[35,714,156,1156],[36,715,176,1213],[35,175,1216],[36,155,1217],[35,155,1189],[36,156,1190],[35,175,1191],[36,175,1198],[35,155,1067],[36,175],[35,176],[36,572,136],[35,573],[36,572],[35,573,134],[36,174],[35,175],[36,176,1068],[35,156,1189],[36,155,1169],[35,156,1170,314],[36,31,156,1171,315],[35,32,175,1172],[36,176,1173],[35,175,1174],[36,155,1175],[35,155,1176],[36,156,1177],[578,175,1056],[579,155,1057],[578,155,1149],[579,155],[578,155],[579,175],[578,176,273],[579,156,274],[578,175,275],[579,175,276],[578,572,177],[579,573],[578,572],[579,573,134],[578,572,175],[579,573,155,1007,293],[578,155,294],[579,1625,156,295],[578,155,296],[579,156],[578,175],[579,176],[578,175],[579,176,1051],[578,175,1052],[579,176,1012],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],573,552,553,552,553,572,573,[572,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1359,1358,1359,1358,1358,[1359,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,[15,155],[16,156,1019],[15,155,1020],[16,156],[15,572,135],[16,572,113],[15,573,155],[16,156],[15,155,1016],[16,13,156,1073],[15,14,175,1190],[16,176,1191],[15,155,1078],[16,156,1098],[15,194],[16,195],[15,196],[16,175],[15,176,1072],[16,156,1073],[15,176,1076],[16,175,1077],[15,176,1132],[16,176,1133],[15,176,969],[16,158,970],[15,155,1198],[16,156,1212],[15,13,1213],[16,14,133,1218],[15,155],[16,155],[15,734,156],[16,735,156],[15,155],[16,175],[15,175,1209],[16,176,1210],[15,136,1211],[16,196,1218],[15,175],[16,176],[15,549,136],[16,571],[15,572,552],[16,570,553],[15,574],[16,192],[15,193],[16,176],[15,155,1209],[16,156,1189],[15,176,1190],[16,176,1191],[15,155,1192],[16,156,1193],[15,155,1194],[16,156,1195],[15,175,1196],[16,176,1197],[558,156,1076],[559,155,1077],[558,175,1169],[559,175,1170],[558,175,1171],[559,176,1149],[558,155,293],[559,156,294],[558,552,155,295],[559,553,175,296],[558,552,136],[11,1644,553],[12,1645,552],[559,552],[558,553,134,1158],[559,553,175,1027],[558,1644,552,155,314],[559,1645,553,156,315],[558,552,155],[559,553,156],[558,552,155],[559,553,156],[558,552,155],[559,553,156],[558,155,1031],[559,156,1032],[176,1033],176,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,572,573,480,573,552,553,[552,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,1378,1379,1378,1379,1378,1378,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,[35,175],[36,176,1019],[35,175,1020],[36,552,176],[35,553,116],[36,552,192],[35,553,155],[36,156],[35,175],[36,33,176,1093],[35,34,175,1210],[36,176,1211],[35,175,1098],[36,136],35,36,35,[36,133],[35,196],[36,175,1093],[35,175,1096],[36,155,1097],[35,156,1152],[36,155,1153],[35,155,989],[36,156,990],[35,175,1218],[36,136],[35,33],[36,34],[35,192],[36,193],[35,175],[36,176],[35,174],[36,175],[35,176],[36,197],35,36,[35,192],[36,197],[35,569],[36,551],[35,552,572],[36,553,573],[35,574],36,35,[36,11,134],[35,12,176],[36,176,1209],[35,155,1210],[36,156,1211],[35,175,1212],[36,1213],[35,175,1214],[36,176,1215],[35,1216],[36,175,1217],[578,176,1096],[579,175,1097],[578,175,1189],[579,176,1190],[578,176,1191],[579,175,1169],[578,175,1054],[579,155,1055,314],[578,552,156,1056,315],[579,553,136,1057],[578,572,1054,7],8,9,[579,572,1057,10],[578,573,1178],[579,573,155,1047],[578,155],[579,196],[578,196],[579,196],[578,572,155],[579,573,155],[578,572,156],[579,573,176],[578,175,1051],[579,176,1052],[156,1012],176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],573,552,553,552,553,572,573,[552,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1358,1359,1358,1359,1358,[1359,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,[15,134,1057],[16,176,1039],[15,155,1040],[16,572,156],[15,573,177],[16,459],[15,460,134],[16,176],[15,175],[16,193],[15,194],[16,194],[15,136],16,15,16,15,16,15,[16,192],[15,193],[16,193],[15,194],[16,195],[15,196],[16,196],[15,136],16,15,16,15,16,[15,134],[16,193],[15,193],[16,196],[15,197],16,15,16,15,16,[15,509],[16,571],[15,459],[16,460],[15,514],16,15,[16,31],[15,32,134],[16,175],[15,175],[16,176],[15,136],16,[15,192],[16,197],15,[16,192],[558,196],[559,156],[558,156,1209],[559,175,1210],[558,176,1211],[559,155,1189],[558,156,1074],[559,175,1075],[558,572,176,1076],[559,573,155,1077],[558,156,1074,7],8,9,[559,156,1077,63,10],[558,155,1198],[559,175,1067],[558,197],559,558,559,[558,192],[559,175],[558,552,155],[559,553,156],[558,155],[559,156,1011],[155,1012],155,156,155,156,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],572,573,572,460,[552,1222],[553,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[1378,1248],[1379,1228],1378,1378,1379,1378,[1379,1222],[1378,1261],[1379,1262],[4,1263],4,4,4,4,4,4,4,4,0,0,[35,1077],[36,134,1059],[35,175,1060],[36,176],[35,552,175],[36,459,116],[35,460,113],[36,553,176],[35,135],36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,[35,529],[36,551],[35,479],[36,480],[35,534],36,35,36,35,[36,192],[35,193],[36,197],35,36,35,36,35,36,578,[579,134],[578,193],[579,194],[578,195],[579,196,1209],[578,1094],[579,1095],[578,1096],[579,1097],[578,1094,7],8,9,[579,1097,83,10],[578,192,1218],[579,197],578,579,578,579,578,[579,192],[578,193],[579,194],[578,195],[579,196,1031],[175,1053],[155,1054],[156,1055],[155,1056],[156,1057],[155,1056],[156,1057],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[1358,1248],[1359,1228],[1358,1163],[1359,1164],[1358,1165],[1359,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,0,0,[15,1097],[16,113,1098],[15,155],[16,156],[15,155],[16,156],[15,155],[16,156],[15,116],16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,[15,549],[16,460],[15,572],[16,573],[15,554],16,15,16,15,16,15,[16,114],[15,93],[16,93],[15,94],[16,95],[15,96],[16,97],558,559,558,559,558,559,558,559,558,559,[558,7],8,9,[559,83,10],558,559,558,559,558,559,558,559,558,559,558,[559,1051],1073,1074,1075,1076,1077,1076,1077,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[1358,1183],[1359,1184],[1378,1185],[1379,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,[35,409],[36,153,409],[35,154,409],[36,155,409],[35,156,410,7],8,9,[36,155,448,63,10],[35,156,449],[36,450],[35,451],[36,407],[35,408],[36,409],[35,449],[36,450],[35,451],[36,407],[35,407],[36,407],[35,451],[36,407],[35,408],[36,409],[35,410],[36,411],[35,447],[36,448],[35,449],[36,450],[35,451],[36,407],[35,407],[36,407],[35,407],[36,407],[35,407],[36,407],[35,407],[36,407],[35,407],[36,408,7],9,[480,9],9,8,9,[36,449,63,10],[35,409],[36,409],[35,409],[36,410],[35,114,411],[36,200,411],[35,155,411],[36,156,411],[35,155,411],[36,156,411],[35,155,411],[36,156,411],[578,448],[579,449],[578,450],[579,451],[578,407],[579,407],[578,407],[579,407],[578,407],[579,407],[578,407,7],8,9,[579,407,83,10],[578,408],[579,409],[578,410],[579,411],[578,447],[579,448],[578,409],[579,409],[578,409],[579,410],[578,411],[579,411],[411,1093],[406,1094],[406,1095],[406,1096],[406,1097],[406,1096],[406,1097],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,0,0,[175,406],[176,406],[175,406],[176,406],[155,406,7],8,9,[156,406,83,10],[155,406],[156,1001],[155,1021],[156,406],[155,406,213],[156,406,214],[175,406,215],[176,406,216],[156,406],[155,406],726,406,406,406,406,406,406,406,[155,406],[156,406],[176,406],[155,406],[156,406],[155,406],[156,1001],[156,1021],[175,406,44],[155,406,45],[156,406,46],[155,406,47],[155,406,48],[156,406,49],[156,406,50],[156,406,51,7],9,9,8,8,9,[175,406,83,10],[155,406],[156,406],[155,406],[156,406],[155,406],[156,406],[176,406],[153,726],[153,406],[153,406],[173,406],[173,406],406,406,406,406,406,1001,1021,406,406,406,[406,7],8,9,[406,83,10],406,406,406,406,406,406,726,406,406,406,406,406,406,406,406,406,406,406,406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[155,406],[156,406],[176,406],[176,406],[175,406,7],8,9,[176,406,83,10],[155,406],[156,1041],[175,1061],[176,406],[175,406,233],[176,406,234],[175,406,235],[175,406,236],[176,406],406,406,406,406,406,[406,18],[406,19],[406,20],406,[175,406],[176,406],[156,748],[155,406,213],[176,406,214],[175,406,215],[155,1041,216],[155,1061],[156,406,64],[155,65],[156,66],[175,67],[175,68],[176,69],[176,70],[155,406,71,7],9,9,9,9,9,[175,406,83,10],[155,406],[156,406],[175,406],[176,406],[155,406],[156,406],[173,406,213],[173,406,214],[173,406,215],[173,406,216],406,406,406,748,406,406,406,1041,1061,406,406,406,[406,7],8,9,[406,83,10],406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[155,427],[156,427],[155,428],[155,429],[156,469,7],8,9,[155,469,103,10],[175,470],[176,471],[156,219,427],[156,220,428],[155,160,429,253],[156,469,254],[155,470,255],[155,471,256],[156,427],[155,427],[175,427],[176,427],[156,471],[155,427],[155,428,38],[156,429,39],[156,430,40],[155,467],[155,468],[175,469],[176,470],[175,471,233],[176,427,234],[156,427,235],[175,427,236],[175,427],[176,428,84],[175,429,85],[176,430,86],[156,431,87],[155,467,88],[156,468,89],[155,469,90],[175,470,91,7],9,9,8,9,9,[155,429,103,10],[156,429],[176,429],[155,429],[156,430],[175,431],[176,431],[155,431,233],[156,431,234],[155,431,235],[156,431,236],[155,431],[156,468],[175,469],[176,470],[175,471],[176,427],[175,427],[176,427],[175,427],[176,428],[175,429],[176,430],[175,431,7],8,9,[176,469,83,10],[175,470],[176,471],[175,427],[176,427],[175,427],[176,428],[175,429],[176,429],[175,429],[176,430],[156,431],[156,467],[156,467],[156,467],[156,467],[156,468],[156,469],[156,470],[156,471],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1346],[4,1347],[4,1725],[4,1726],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1724],[4,1725],[4,1726],[4,1344],[4,1724],[4,1725],[4,1726],[4,1344],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,0,0,[155,937],[156,959],[175,159,960],175,176,176,175,175,155,156,[176,239],[176,240],[175,273],[176,274],[175,275],[156,276],176,175,176,175,153,154,[175,58],[176,59],[155,60],155,156,156,176,[175,253],[175,254],[176,255],[175,256],155,[156,159,104],[176,105],[175,106],[176,107],[175,108],[155,109],[156,110],[36,117,111],[35,509],[36,551],[35,459],[36,460],[35,534],[36,192],176,156,155,[156,219],[175,220],176,[175,253],[176,254],[175,255],[176,951,256],[175,952],[176,934],[155,937],[156,937],[155,937],[156,938],155,156,155,156,155,156,[155,933,7],8,9,[156,938,83,10],155,156,155,156,155,156,[155,931],[156,932],[155,933],[156,934],[155,934],[156,934],[155,934],[156,934],[155,934],[156,934],[156,934],[155,934],[156,934],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1367],[552,1747],[553,1744],[552,1745],[553,1746],[4,1747],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1747],[4,1744],[552,1745],[553,1746],[552,1747],[553,1744],[4,1745],[4,1746],[4,1747],[4,1744],[4,1745],[4,1746],[4,1322],[4,1323],4,4,4,4,0,0,[155,957],[156,979],[155,980],156,155,156,155,156,175,176,155,156,[155,293],[155,294],[156,295],[176,296],156,155,156,155,173,[16,174],[15,195,78],[16,195,79],[15,175,80],175,176,176,156,[155,273],[155,274],[156,275],[155,276],[155,5],[156,124],[156,125],[155,126],[156,127],[155,128],[175,397,129],[177,398,130],[16,137,131],[15,529],[16,459],[15,479],[16,480],[15,554],16,[15,133],176,175,[176,239],[155,240],156,[155,273],[156,274],[155,275],[156,971,276],[155,972,213],[156,954,214],[175,957,215],[176,957,216],[175,957],[176,958],[175,934],[176,934],[175,934],[176,934],[175,934],[176,934],[175,953,7],[176,8],[175,9],[176,958,103,10],[175,937],[176,938],153,154,153,154,[153,951],[154,952,931],[153,953],[154,954],[156,954],[156,954],[156,954],[156,954],[156,954],[156,954],[156,954],[156,954],[156,954],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1348],[553,1368],[552,1386],[553,1387],[572,1767],[573,1764],[572,1765],[573,1766],[552,1767],[553,1387],[552,1342],[4,1343],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1348],[553,1368],[552,1767],[553,1764],[572,1765],[573,1766],[572,1767],[573,1764],[552,1765],[553,1766],[459,1767],[460,1764],[552,1765],[553,1766],[4,1342],[4,1282],4,4,4,4,0,0,[175,977],[176,999],[155,1000],155,156,155,156,[176,159],175,176,175,176,175,[175,314],[176,315],[175,316],176,175,176,175,176,[36,135],35,36,[35,714,134],[715,175],176,175,176,[175,293],[175,294],[176,295],[175,296],[175,25],[155,144],[155,413,145],[156,414,146],[176,415,147],[175,416,148],[176,417,149],[136,418,150],[36,157,151],[35,549],[36,479],[35,480],[36,553],[35,574],36,[35,204],[36,112,205],[175,206],[155,207],[156,208],[155,209],[156,210,293],[176,294],[175,295],[176,991],[175,992,233],[176,974,234],[155,235],[156,236],[155,977],[156,978],[174,954],[155,954],[156,954],[155,954],[156,954],[155,954],[156,973],[155,974],[156,977],[155,978],[156,957],[153,958],[154,937],[174,937],[173,937],[174,937],[173,937],[174,972,932],[173,973,933],[174,974,934],[174,974,937],[156,937],[558,156,934],[559,156,937],[558,156,937],[559,156,934],[558,156,934],[559,156,937],[558,156,937],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1367],[572,1368],[573,1388],572,573,552,553,552,553,572,573,[572,1362],[573,1363],[4,1366],[4,1367],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1367],[572,1368],[573,1388],479,459,552,553,552,553,572,573,479,480,572,573,[552,1281],[4,1282],4,4,4,4,0,0,[155,997],[156,1019],[175,1120],175,176,175,176,156,155,156,155,[156,44],[155,45],[156,46],[155,47],[199,48],[176,49],[176,50],[155,51],156,[15,177],16,15,16,[15,734],[16,735],[15,134],154,155,154,[155,314],[156,315],[155,316],156,[175,164],[175,433,165],[176,434,166],[156,435,167],[155,436,168],[136,437,169],[176,438,170],[16,177,171],[15,569],[16,571],[15,572],[16,573],[15,533],16,[15,224],[16,132,225],[155,226],[175,227],[176,228],[175,229],[176,230],[156,314],[155,951,315],[156,1011],[155,1012,253],[156,254],[175,255],[176,256],175,176,[175,974,257],[175,974,258],[176,974],[175,974],[176,974],[175,974],176,175,176,175,[176,977],[173,978],[174,957,225],[176,957,207],[176,957,208],[153,957],[153,957],[154,973,952],[578,953,837],[579,954,838],[578,974,957,839],[579,957,840],[578,954],[579,957],[578,957],[579,954],[578,954],[579,957],[578,957],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1309],[4,1368],[552,1386],[553,1387],[552,1388],553,552,553,572,573,572,573,552,553,[552,1382],[553,1383],[552,1386],[553,1387],[4,1363],[4,1302],4,4,4,4,4,4,4,4,4,[4,1309],[4,1368],[552,1386],[553,1387],[552,1388],553,552,553,572,573,572,573,552,553,[552,1382],553,552,553,[552,1281],[4,1282],4,4,4,4,0,0,175,[176,1019],[175,1140],176,175,176,175,176,175,176,175,[176,64],[175,65],[176,66],[175,67],[180,68],[97,69],70,[175,71],176,[35,135],36,35,36,35,36,35,[36,134],175,174,175,176,175,155,[156,184],[176,413,185],[175,414,186],[176,415,187],[175,416,188],[176,417,189],[35,196,418,190],[36,197,191],[35,531],[36,573],[35,573],[36,574],35,36,[35,244],[36,152,245],[175,246],[176,247],[175,248],[176,249],[175,250],176,[175,971],[176,953],[175,973,273],[176,274],[155,275],[156,276],174,175,[176,277],[155,278],156,155,[35,13,156],[36,14,155],156,155,156,155,156,[155,225],[156,226],[176,227],[176,228],[173,229],173,[174,991],[558,992,857],[559,993,858],[558,994,859],[559,860],558,559,[558,114],[559,93],[558,94],[559,95],[558,96],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,[4,1288],[4,1289],[552,1290],[572,1163],[573,1164],[572,1165],573,572,573,552,553,479,553,572,573,552,[553,1163],[572,1164],[573,1165],[552,1301],[4,1302],4,4,4,4,4,4,4,4,[4,1288],[4,1289],[552,1290],459,460,572,573,572,573,552,553,552,553,572,573,552,553,572,573,[552,1301],[4,1302],4,4,4,4,0,0,[15,134,1038],[16,174,1039],[179,1040],180,[179,160],180,179,155,153,154,153,[154,84],85,86,87,88,89,[155,90],[156,91],[16,197,5],15,16,15,16,[15,204],[16,1453],[15,1454],16,[15,192],[179,1457],[179,1458],[199,1459],200,175,176,[199,433],[199,434],[175,435],[176,436],[136,437],[15,438],[16,72],15,[16,509],[15,553],[16,514],15,16,[15,264],[16,172,265],[154,266],[155,267],[154,159,268],[155,269],[154,270],[155,271],[154,991],[155,992],[154,293],[175,294],[176,295],[153,281,296],[153,282],154,173,175,[16,176],[15,175],[15,33,176],[16,34,135],[16,134],[15,175],[16,176],175,[176,225],[175,245],[176,246],[175,247],[176,248],[13,175,249],[14,176,250],[175,1011],[578,1012,877],[579,1013,878],[578,879],[579,880],578,[579,92],[578,156],[579,156],[578,156],[579,156],[578,156],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1268],[4,1269],[552,1183],[553,1184],[552,1185],[553,1228],460,553,572,573,572,573,[552,1222],[553,1223],[572,1227],[573,1183],[572,1184],[573,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[479,1249],480,552,553,552,553,572,460,572,573,[552,1222],[553,1223],[572,1227],[573,1227],[572,1227],[573,1224],[4,1262],[4,1263],4,4,4,4,0,0,[35,999],[36,112,1059],[199,1180],178,179,200,199,200,173,174,173,[174,104],105,106,107,108,109,[175,110],[35,177,111],[36,25],35,36,35,36,[35,204],[36,205],[35,206],[36,207],[35,208],[36,112,209],[180,210],[159,1479],180,175,176,175,[175,454],[36,176,455],[35,197,456],[36,457],[35,458],36,35,[36,529],[35,573],[36,534],35,36,[35,284],[36,192,285],[174,286],[175,287],[174,288],[175,219,289],[174,220,290],[175,291],[174,1011],[175,1012],174,[153,314],[154,315],[153,301,316],[173,302],174,173,174,[36,173],[35,155],[36,177],35,36,[35,134],[36,195],174,[154,264],[155,265],[156,266],[155,267],[156,268],[33,155,269],[34,156,270],[155,1031,271],[558,1032,897],[559,1033,898],[558,899],[559,900],578,[579,112],[578,155],[579,155],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1248],[572,1227],[573,1227],[553,1228],[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1247],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1249],553,[552,1163],[572,1164],[573,1165],553,[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1247],[4,1247],[4,1247],[4,1244],[4,1263],4,4,4,4,4,0,0,[15,1019],[16,132,1120],179,198,199,[180,259],[179,260],180,179,180,153,[154,124],125,126,127,128,[397,129],[398,130],[15,177,131],16,15,16,15,16,[15,224],[16,225],[15,226],[16,139,227],[15,228],[16,132,229],[55,200,230],[56,199,1499],200,[175,213],[176,214],[199,378,215],[200,216],[16,117,475],[15,476],[16,477],[15,478],16,15,[16,549],[15,460],[16,554],15,16,[15,55,304],[16,56,134,305],[154,306],[155,307],[154,397,308],[155,398,239,309],[154,240,310],[155,311],[156,1031],[155,1012],154,173,174,[153,321],[153,322],[154,323],153,154,[16,174],[15,175],[16,176],[15,116],16,13,14,[15,134],[174,284],[579,175,285],[578,176,286],[579,175,287],[578,176,288],[579,175,289],[578,176,290],[579,175,1051,291],[578,176,1052],[579,1053],[578,1033],579,558,[559,132],[558,175],[559,175],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1267],[4,1268],[4,1247],[4,1247],[4,1269],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,[4,1267],[4,1267],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1224],[572,1183],[553,1184],[553,1185],[553,1224],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,[35,978],[36,152,958],[199,937],[200,938],199,[200,279],[178,280],160,199,200,173,[174,144],[413,145],[414,146],[415,147],[416,148],[417,149],[36,418,150],[35,177,151],36,35,36,35,[36,13],[35,14,244],[36,245],[35,246],[36,247],[35,248],[36,152,249],[75,180,250],[76,179],180,[179,233],[180,234],[160,235],[180,236],[36,137],35,36,35,36,35,[36,569],[35,480],[36,574],35,36,[35,75,413,324],[36,76,414,325],[133,415,326],[193,416,327],[174,417,328],[175,418,329],[174,118,330],[175,331],[176,1051],[175,1053,313],[174,1033],153,[558,135],[559,341],[558,342],[559,133,343],173,174,[36,174],[35,155],[36,173],[35,177],36,33,34,35,[558,172,304],[559,155,305],[558,156,306],[559,155,307],[558,156,308],[559,155,309],[558,156,310],[559,155,1071,311],[558,156,1072],[559,155,1073],[558,1032],[559,1033],578,[579,152],[578,155],[579,155],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1244],[4,1203],[4,1204],[4,1205],[4,1244],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,4,0,0,[15,96],[16,173,978],[15,179,957],[178,958],[179,937],[180,937],[198,937],[199,118,938],179,180,179,[16,117,164],[15,433,165],[16,434,166],[15,435,167],[16,436,168],[15,437,169],[16,438,170],[15,197,171],16,15,16,15,[16,33],[15,34,264],[16,265],[15,266],[16,267],[15,268],[16,173,269],[200,270],199,200,[199,253],[200,254],[199,255],[200,256],[16,157],15,16,15,16,15,[16,589],[15,591],[16,594],15,16,[15,433,344],[16,434,345],[435,1661],[436,1662],[192,437,1663],[155,438,349],[154,350],[155,351],[154,1071],[155,1052],[154,992],173,[578,116],[579,361],[578,362],[579,113,363],153,154,176,[15,175],[16,153],[35,197],36,15,16,[15,114],[154,324],[175,325],[176,326],[175,327],[176,328],[175,329],[176,330],[175,1091,331],[176,1092,5],[175,1093],1052,[579,992],558,[559,172],[558,175],[559,175],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[174,213],[180,214],[199,977,215],[198,978,216],[199,957],[200,957],[199,957],[200,958],[199,980],200,199,[36,137,184],[35,413,185],[36,414,186],[35,415,187],[36,416,188],[35,417,189],[36,418,190],[35,191],36,35,36,35,36,[35,284],[36,285],[35,286],[36,287],[35,133,288],[36,193,289],[15,194,290],[16,179],180,[179,273],[180,274],[179,275],[180,276],[36,177],35,36,35,36,35,36,35,36,35,36,[35,433,364],[36,434,365],[35,435,1681],[36,436,1682],[35,437,1683],[36,192,438,369],[35,193,370],[36,193,371],[35,174],[36,175,1011],[35,155,1012],[36,173],[578,174],[579,93],[578,96],[579,173],173,174,156,155,[36,177],15,16,35,[36,113],[36,174],[154,344],[155,345],[156,1661],[155,1662],[156,1663],[155,349],[156,350],[155,351],[156,25],155,1011,[579,1012],[578,113],[579,156],[578,155],[579,155],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[174,233],[200,234],[179,235],[180,236],178,160,[160,998],[178,999],[179,1160],180,179,[16,157],[15,433],[16,434],[15,13,435],[16,14,436],[15,437],[16,438],15,16,15,16,15,16,[15,304],[16,305],[15,306],[16,307],[15,308],[16,397,309],[15,398,310],[16,134],200,[159,293],[200,294],[199,295],[200,296],[16,136],[15,11],[16,12],15,16,15,16,15,16,15,16,[15,453,384],[16,454,385],[15,455,386],[16,456,387],[15,457,388],[16,458,389],[15,390],[16,391],[15,53,134],[16,54,174,1052],[155,992],175,176,175,176,175,176,175,176,175,176,[36,97],35,36,[15,172],173,[174,364],[175,365],[176,1681],[175,1682],[176,1683],[175,369],[176,370],[175,371],176,[175,971],[176,972],[156,973],156,156,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1724],[4,1725],[4,1726],[4,1346],[4,1724],[4,1725],[4,1726],[4,1346],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1724],[4,1725],[4,1726],[4,1344],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[174,253],[199,254],[200,255],[200,256],198,199,[199,281],[198,978,282],[199,979,283],[200,980],199,[36,177],35,[36,454],[35,33,455],[36,34,456],[35,457],[36,458],35,36,35,36,35,36,[35,596,324],[36,413,325],[35,414,326],[36,415,327],[35,416,328],[36,417,329],[35,418,330],36,[35,112],179,[180,646,314],[179,315],[35,117,316],36,[35,31],[36,32],35,36,35,36,35,36,35,[36,11],[35,12,473],[36,474],[35,475],[36,476],[35,477],[36,478],35,36,[35,73],[36,74,112,1011],[175,1012],155,[156,1035],[155,1036],[156,1037],[154,1038],[155,1056],[156,1057],[156,1033],[155,1034],[156,1035],[36,177,955],13,14,[35,112,1008],155,[156,384],[155,385],[156,386],[155,387],[156,388],[155,389],[156,390],[155,391],156,[155,1011],[175,1012],[176,1013],156,156,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1744],[4,1745],[4,1746],[552,1366],[553,1744],[552,1745],[553,1746],[4,1366],[4,1744],[4,1745],[4,1746],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1744],[552,1745],[553,1746],[552,1747],[553,1744],[4,1745],[4,1746],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,[174,273],[200,274],[180,275],[180,276],179,180,[179,301],[180,998,302],[179,999,303],[180,1000],[15,179],[16,136],[15,378],16,[15,475],[16,476],[15,477],[16,478],15,16,15,16,15,16,[15,344],[16,433,345],[15,434,1661],[16,435,1662],[15,436,1663],[16,437,349],[15,438,350],16,[15,152],199,200,199,[15,137],16,15,16,15,16,15,16,15,16,15,[16,31],[15,32],16,15,[16,213],[15,214],[16,215],[15,216],16,15,[16,132,1011],[155,1053],[175,1054],[176,1055],[175,1056],[176,1057],[154,1058],[175,155,1076],[176,156,1077],[176,1053],[175,1110],[176,1111],[16,177,975],33,34,[15,132,1028],[175,1033],[176,1034],[175,1035],176,175,176,175,176,175,176,[175,1031],[155,1032],[156,1033],155,156,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,[4,1328],[4,1348],[4,1368],[552,1386],[553,1764],[552,1765],[553,1766],[572,1386],[573,1764],[572,1765],[573,1766],[552,1386],[553,1764],[552,1765],[552,1766],[4,1363],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1349],[553,1764],[572,1765],[573,1766],[572,1767],[573,1764],[552,1765],[553,1766],[552,1342],[4,1302],4,4,4,4,4,4,4,4,0,0,[174,293],[199,294],[200,295],[200,296],199,[200,118],[199,321],[200,998,322],[199,999,323],[200,1000],[35,117],[36,478],35,36,35,36,35,36,35,[36,53],[35,54],36,35,[36,714],[35,715,364],[36,596,413,365],[35,414,1681],[36,415,1682],[35,416,1683],[36,417,369],[35,418,370],[36,113],180,179,155,156,[35,157,474],36,35,36,35,36,35,36,35,36,35,36,[35,92],[36,93],[35,94],[36,96,233],[35,116,234],[36,235],[35,236],36,35,[36,1072],[35,175,1073],[36,176,1074],[175,1075],[176,1076],[153,1077],[153,1078],[192,175,1096],[155,176,1097],[156,1073],[155,1130],[35,156,1131],[36,177,995],55,56,[35,152,1048],[155,1053],[156,1110],[155,1111],[156,1112],[155,1113],[156,1831],[155,1351],[156,1352],[155,1353],[156,1033],[155,1034,1051],[175,1052],[176,1053],175,176,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1328],[4,1348],[4,1368],[552,1388],572,573,572,573,552,553,552,553,572,573,572,573,[552,1383],[4,1363],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],573,552,553,552,553,572,573,[572,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,174,[179,314],[178,315],[179,119,316],179,[180,119],[179,341],[180,1018,342],[156,1019,343],[156,1020],[15,157],[16,52],[15,11,53],[16,12],15,16,15,16,15,[16,73],[15,74],16,15,[16,734],[15,735,384],[16,433,385],[15,596,434,386],[16,92,435,387],[15,94,436,388],[16,96,437,389],[15,93,438,390],199,200,199,175,176,[15,154],[16,96],[15,116],16,15,16,15,16,15,16,15,[16,113],179,180,179,[180,253],[15,179,254],[16,115,255],[15,256],16,15,[16,1092],[15,1093],[16,1094],[15,1095],[16,1096],[15,1097],[16,173,1098],174,153,[154,1093],[175,1150],[15,153,1151],[16,197,1067],75,76,[15,172,1068],[154,1073],[176,1130],[175,1131,18],[176,1132,19],[175,1133,20],[176,1851],[16,175,1371],[176,1372],[175,1373],[176,1053],[175,1054,1071],[155,1033,1072],[156,1073],[155,1032],[156,1033],155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1309],[4,1368],[552,1388],553,552,553,552,460,572,573,572,573,552,553,[552,1382],553,552,[553,1383],[4,1363],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,572,573,572,459,460,553,[552,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,174,199,198,199,200,199,[199,361],[156,1038,362],[156,1039,363],[156,1160],[35,177],[36,72],[35,31,73],[36,32],35,36,35,36,35,36,35,36,35,36,35,36,[35,114,454],[596,179,455],[180,456],[178,457],[179,458],179,159,179,155,156,173,[156,626],173,[36,115],35,36,35,36,35,36,35,[36,112],199,200,199,[200,273],[35,199,274],[36,200,275],[35,93,276],[36,116],[35,11],[36,12],35,36,35,36,35,[36,133],154,173,174,155,[35,135],36,35,36,[35,192],[36,174,1093],[156,1210],[155,1211,38],[156,1152,39],[155,1153,40],[35,156,1871],[13,1391],[14,1392],[36,1393],[156,1073],[155,1133,1091],[175,1053,1092],[176,1033,1093],[175,1052],[176,1053],[175,1033],175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,[4,1288],[4,1289],[552,1290],572,480,573,573,572,573,552,553,552,553,572,573,479,573,572,573,[552,1301],[4,1302],4,4,4,4,4,4,4,4,[4,1288],4,4,4,4,4,[4,1289],[572,1290],573,552,553,552,479,480,573,[552,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,174,159,180,179,[179,1158],[179,949],[180,950],[156,1058],1059,[156,1218],[15,714,136],[16,715],15,16,15,16,15,16,15,16,15,16,15,16,15,[16,113,378],[15,200],[199,475],[200,476,139],[198,477],[199,478],199,155,156,175,176,156,154,153,[16,177],15,16,15,16,15,16,15,[16,132],[179,478,18],[180,19],[178,20],[179,179,293],[15,179,179,294],[180,295],[179,296],180,[15,31,97],[16,32],15,16,15,16,13,14,[15,112],153,154,175,[15,116],16,15,16,15,[16,134],[15,176],[16,175,58],[176,59],[175,60],[15,176],[33,116],34,[16,113],[176,1188],[175,1213],[155,1073],[156,992],[155,1072],[156,1073],[155,1032],[155,1033],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1268],[4,1269],[552,1227],[553,1227],[552,1227],[553,1228],552,553,572,573,572,573,[552,1222],[553,1223],[572,1227],[573,1227],[572,1227],[573,1227],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],572,573,572,573,[552,1222],[553,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,0,0,174,199,200,[179,1158],[200,1159],[199,969],[200,970],[117,1078],[35,156,1079],[36,136,1080],[35,734],[36,735],35,36,35,36,35,36,35,36,35,36,35,[36,92],[35,96,478],[36,179],[35,180],158,180,179,180,179,175,176,175,175,176,155,156,[36,177],35,36,35,36,35,36,35,[36,152],[199,38],[200,39],[55,198,40],[56,199],[179,178,314],[179,179,315],[199,316],200,[35,199],[36,96],[35,97],36,[35,1453],[36,1454],[33,1455],[34,1456],[35,132,1457],[173,1458],[174,1459],155,156,[36,97],35,[36,92],[35,116],36,[35,172],[36,155,78],[156,79],[155,80],[35,156],[36,153],[35,93],[36,155],156,155,[175,991],[176,992],[175,1092],[176,1093],[175,1052],[175,992],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,[4,1268],[4,1247],[4,1247],[4,1247],[4,1248],[572,1227],[573,1227],[553,1228],[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1247],[4,1247],[4,1247],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,0,0,174,179,[180,1158],[179,1178],[180,1179],[160,989],[180,990],[156,1098],[15,197,1099],[16,1100],15,[16,44],[15,45],[16,46],[15,47],[16,48],[15,375,49],[16,376,50],[15,51],[16,378],15,16,[15,113],[16,199],200,[199,259],[200,260],199,[200,213],[199,214],[196,215],[16,195,216],176,[13,174],[14,154],173,[15,193],[53,175],[54,176],[16,197],15,16,15,16,[15,92],[16,94],[15,96],173,[179,58],[16,180,59],[75,179,60],[76,180],198,199,179,180,179,173,[15,117],16,[15,1473],[16,1474],[15,1475],[16,1476],[15,152,1477],[173,1478],[174,1479],156,155,[16,177],55,[56,133],[15,197],[16,92],174,154,155,156,155,156,155,156,[155,951],[156,952],[155,953],[156,973],155,156,[155,1011],[155,1012],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1267],[4,1268],[4,1247],[4,1247],[4,1269],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,[4,1267],[4,1267],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1267],4,4,[4,1268],[4,1269],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,[4,1267],[4,1267],4,4,4,4,4,4,4,0,0,[35,174],[36,199,1118],[200,1119],[199,1198],[200,1199],199,200,[36,177],35,[36,53],[35,54],[36,374,64],[35,65],[36,66],[35,67],[36,68],[35,375,69],[36,376,70],[35,377,71],[36,378],[35,11,92],[36,12,96],[35,180],[36,179],[180,139],[179,279],[180,280],179,[180,233],[135,234],235,[36,236],[35,192],[36,33,194],[35,34,194],[36,135],35,[36,73,134],[35,74,197],36,35,36,35,[36,114],179,180,179,[36,180],[35,199,78],[200,79],[199,80],200,[199,118],200,199,200,199,156,[35,157],[36,1492],[35,1493],[558,1494],1495,1496,[172,1497],[176,1498],[175,1499],176,175,[36,176],[75,116],76,35,[36,172],173,174,175,176,175,176,175,176,[175,971],[176,972],[175,973],176,175,[176,971],[175,972],[175,973],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,0,0,[15,174],[16,179,1138],[15,180,1019],[16,179,1020],180,179,180,[16,177],15,[16,73],[15,74,393],[16,394,84],[15,85],[16,86],[15,87],[16,88],[15,395,89],[16,396,90],[15,397,91],[16,398],[15,31,172],[16,32,199],[15,200],[16,199],200,158,200,199,[174,253],[115,254],255,[16,256],15,[16,44],[15,45],[16,46],[15,47],[16,48],[15,49],[16,50],[15,51],16,[15,114],153,199,200,199,200,[15,178],179,179,180,179,180,178,179,179,156,[15,177],[16,1512],[16,1513],1514,1515,1516,[192,1517],[155,1518],[156,1519],156,155,156,[15,155],[16,94],[15,95],[16,156],155,156,155,156,155,156,155,156,[155,991],[156,992],[155,993],156,155,[156,991],[155,992],155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],0,0,[35,174],[36,180,1158],[35,179,1039],[159,406,1040],[200,649],[180,669],[179,747],175,[35,116],36,[35,413],[36,414,104],[35,105],[36,106],[35,107],[36,108],[35,109],[36,110],[35,417,111],[36,418],[35,134],[36,196],[35,180],[36,179],180,179,180,154,[155,273],[200,274],[93,275],[36,116,276],35,[36,64],[35,65],[36,66],[35,67],[36,68],[35,69],[36,70],[35,71],[36,113],153,179,180,179,179,199,198,199,199,200,199,200,[198,139],199,199,176,[35,197],[36,1532],[35,1533],1534,1535,1536,1537,[175,1538],[176,1539],176,175,153,154,153,154,153,154,[176,213],[175,214],[176,215],[175,216],176,175,176,[175,1011],[176,1012],[175,1013],176,175,[176,1011],[175,1012],155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],0,0,[15,174],[16,200,1019],[15,489,199,1059],[494,406,1060],406,748,[15,199,648],200,175,[16,116],[15,433],[16,434,124],[15,125],[16,126],[15,127],[16,128],[15,129],[16,130],[15,437,131],[16,438],15,16,[15,134],[16,199],200,199,200,174,[175,293],[180,294],[179,295],[180,296],[15,97],[16,84],[15,85],[16,86],[15,87],[16,88],[15,89],[16,90],[15,91],[16,172],179,199,200,199,199,200,180,180,[15,179,179,257],[180,258],179,180,179,180,179,[16,136],15,[16,1552],1553,1554,1555,[16,1556],[397,1557],[192,398,1558],[155,1559],156,155,173,174,173,174,173,174,[156,233],[155,234],[156,235],[155,236],156,155,156,[155,1031],[156,1032],[155,1033],156,155,[156,1031],[155,1032],[175,1033],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1345],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1345],[4,1344],[4,1345],[4,1344],[4,1345],[4,1344],[4,1345],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[35,174,1118],[36,180,999],[35,589,406,1000],[514,406],406,[180,628],179,180,179,180,[35,97,413],[36,414,144],[35,145],[36,146],[35,147],[36,148],[35,149],[36,150],[35,417,151],[36,418],35,36,35,[36,172],199,200,199,200,199,[200,314],[199,315],[200,316],[35,199],[36,115,104],[35,105],[36,106],[35,107],[36,108],[35,109],[36,110],[35,111],[36,112],155,199,179,158,200,199,178,179,[179,199,277],[200,278],199,200,199,[36,200],[35,135],36,35,[36,1572],[413,1573],[414,1574],[415,1575],[416,1576],[417,1577],[418,1578],[35,133,1579],176,175,156,156,153,154,153,154,[176,253],[175,254],[176,255],[175,256],176,175,176,[175,1051],[176,1052],[175,1053],[176,1033],175,[176,1051],[175,1052],[155,1053],[156,1033],155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[573,1364],[572,1365],[573,1747],[573,1367],[573,1364],[4,1365],[4,1747],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1364],[4,1365],[4,1364],[4,1365],[573,1747],[572,1365],[573,1364],[572,1365],[573,1747],[573,1365],[573,1366],[552,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,[15,174,1138],[16,200,999],[15,406,1000],406,406,[200,668],199,[200,18],[178,19],[179,20],[199,433],[16,115,434,164],[15,165],[16,166],[15,167],[16,168],[15,169],[16,170],[15,437,171],[16,438],[15,92],[16,94],[15,96],[16,173],179,180,179,180,179,180,179,[16,180,5],[15,179,5],[16,117,124],[15,413,125],[16,414,126],[15,415,127],[16,416,128],[15,417,129],[16,418,130],[15,131],[16,132],179,179,180,179,180,179,178,179,179,180,179,180,[15,196],[16,136],15,[16,52],[15,53],[16,1592],[433,1593],[434,1594],[435,1595],[436,1596],[437,1597],[438,1598],[15,1599],[16,112],155,173,174,173,174,173,174,[156,273],[155,274],[156,275],[155,276],[156,141],[155,142],[156,143],[155,1071],[156,1072],[155,1052],[156,1012],155,156,[155,1051],[175,1052],[176,1012],175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[552,1368],[553,1384],[553,1385],[552,1767],[572,1387],[552,1384],[553,1385],[552,1767],[553,1387],[552,1342],[4,1343],[4,1344],[4,1345],[4,1346],[4,1347],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1348],[553,1349],[552,1384],[553,1385],[552,1384],[553,1385],[553,1767],[552,1385],[553,1384],[553,1385],[552,1767],[572,1385],[573,1386],[572,1387],[573,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,0,0,[174,1158],[180,1039],[406,1040],[198,629,628],[199,629],180,179,[180,38],[198,39],[199,40],179,[36,117,454,184],[35,415,185],[36,416,186],[35,416,187],[36,415,188],[35,455,189],[36,456,190],[35,457,191],[36,114,458],[35,179],[36,180,213],[35,179,214],[36,180,215],[199,216],200,199,200,199,200,199,[36,200,119,25],[35,199,25],[36,137,144],[35,433,145],[36,434,146],[35,435,147],[36,436,148],[35,437,149],[36,438,150],[35,151],[36,132],179,199,200,178,179,199,198,199,200,199,199,[36,136],35,36,35,[36,72],[35,73],[36,1612],[413,1613],[414,1614],[415,1615],[55,416,1616],[56,417,1617],[418,1618],[35,1619],[36,132],175,173,[174,160],153,154,176,175,[176,293],[175,294],[176,295],[175,296],[176,161],[175,162],[176,163],175,[176,1010],[175,991],[176,992],175,176,175,[155,1011],[156,1012,213],[155,214],[156,215],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[573,1349],[572,1388],573,553,553,572,572,480,572,573,[572,1362],[573,1363],[4,1747],[4,1365],[4,1366],[4,1367],[4,1366],[4,1367],[4,1364],[4,1365],[4,1747],[4,1367],[572,1368],[573,1369],572,573,572,573,573,572,573,553,553,572,480,552,[553,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,0,0,[174,1019],[200,1059],[199,1060],[200,257],[199,258],178,179,[178,58],[179,59],[200,60],199,[16,137,474],[15,475],[16,454],[15,11,455],[16,12,456],[15,457],[16,476],[15,114,477],153,199,[178,233],[179,234],[200,235],[179,204,236],[180,205],[179,206],[180,207],[179,208],[180,209],[179,210],[16,180,211],[15,179],[16,157,164],[15,413,165],[16,414,166],[15,415,167],[16,416,168],[15,417,169],[16,418,170],[15,171],[16,132],155,179,180,[198,213],[199,214],[159,215],[180,216],179,179,179,180,[16,97],15,16,15,16,15,[16,1632],[15,433,1633],[16,434,1634],[435,1635],[75,436,1636],[15,76,437,1637],[16,438,1638],[15,1639],[16,152],155,156,155,173,174,156,155,156,[155,314],[156,315],[155,316],[156,181],[153,182],[154,183],155,156,[155,1011],[156,1012],155,156,[155,952],[175,953],[176,973,233],[175,234],[176,235],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],552,572,573,573,552,552,553,552,553,552,[553,1383],[552,1767],[553,670,1385],[406,573,650,1386],[406,1387],[406,1386],[406,1387],[406,1384],[553,648,1385],[552,1767],[553,1387],[552,1388],[553,1389],552,553,552,553,572,552,572,573,573,552,553,572,573,[573,1362],[4,1342],[4,1322],[4,1323],4,4,4,4,4,0,0,[200,1119],[199,1120],[179,1200],[180,277],[179,278],198,199,[198,78],[199,79],[180,80],179,[36,157],35,[36,474],[35,31,475],[36,32,476],[35,92,477],[36,11,95],[35,12,153],179,180,[198,253],[199,254],[199,255],[200,224,256],[200,225],[199,226],[200,227],[199,228],[200,229],[199,230],[36,200,231],[35,199],[36,177,184],[35,433,185],[36,434,186],[35,435,187],[36,436,188],[35,437,189],[36,438,190],[35,191],[36,152],175,179,200,[199,233],[200,139,234],[199,235],[200,236],179,200,199,[200,5],[36,117],35,[36,11],[35,12],36,35,36,35,[36,454],[35,455],[36,456],[35,457],[36,458],35,[36,172],175,176,155,156,175,153,154,176,175,176,[175,241],[176,201],[173,202],[174,203],175,[176,952],[175,953],[176,973],175,[176,971],[175,972],[155,973],[156,253],[155,254],[156,255],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[573,1290],572,573,573,[572,1221],[572,1241],[572,1242],[573,1224],[572,1228],573,572,573,572,[573,746,1420],[406,573,690,1420],[406,1420],[406,1420],[406,1420],[406,1420],[573,648,1420],572,573,572,573,572,573,479,573,573,572,573,573,572,572,573,552,553,552,[553,1362],[4,1342],[4,1302],4,4,4,4,4,0,0,[180,1119],[179,1120],[199,1220,213],[178,214],[179,215],[200,216],199,[200,119],199,200,199,[16,177],15,16,15,[16,113],179,[31,180],[32,179],199,200,[199,273],[199,274],[200,275],[180,244,276],[180,245],[179,246],[180,247],[179,248],[180,249],[179,250],[16,180,251],[15,179],[16,136],15,[16,454],[15,13,455],[16,14,456],[15,457],[16,458],15,[16,133],173,173,[173,139],[179,253],[15,180,254],[178,255],[179,256],179,180,160,[180,25],[16,137],15,[16,31],[15,32],16,15,16,[15,378],16,[15,475],[16,476],[15,477],[16,478],15,[16,192],[15,193],[16,194],[15,175],176,[155,158],173,174,154,153,154,[155,261],156,[155,746],[156,649,951],[155,690,971],[156,972],[155,973],156,155,[156,991],[155,992],175,[176,273],[175,274],[176,275],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[553,1270],573,573,552,[553,1261],[4,1262],[4,1244],[4,1248],[553,1228],552,553,552,[553,670,1440],1460,1440,1460,1440,1440,[553,1460],552,553,[552,1223],[553,1224],[552,1224],[553,1224],[552,1227],[553,1228],573,553,573,[573,1223],[552,1224],[553,1227],[552,1228],572,573,572,573,[4,1281],[4,1282],4,4,4,4,4,0,0,[174,1139],[180,1020],[179,233],[198,234],[199,235],[180,236],179,180,179,180,179,[36,136],35,36,35,[36,112],199,200,155,199,179,[158,293],[200,294],[199,295],[158,264,296],[200,265],[199,266],[200,267],[200,268],[178,269],[179,270],[36,199,271],[35,200],36,[35,378],36,[35,33,475],[36,34,476],[35,477],[36,478],35,36,[35,134],[36,194],173,[173,273],[200,274],[198,275],[199,276],199,200,199,[200,213],[36,157,214],[35,215],[36,216],35,36,35,[36,478],35,36,35,36,35,36,35,36,35,36,[35,134],176,175,176,173,174,173,174,[175,746],[176,649],[175,690],[176,406],[175,406,991],[176,992],[175,158],176,[175,933],[176,972],[175,973],155,[156,293],[155,294],[156,295],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1270],573,572,[573,1281],[4,1282],[4,1264],[4,1268],[4,1248],[572,1227],[573,1228],572,[573,670,1480],[406,1480],[406,1480],[406,1480],[406,1480],[406,1480],[406,573,688,1480],[406,573,669],[573,747,1223],[4,1243],[4,1244],[4,1244],[4,1244],[4,1247],[4,1248],[573,1227],[573,1227],[573,1227],[4,1243],[4,1244],[4,1247],[4,1248],[553,1249],552,553,552,[553,1281],[4,1282],4,4,4,4,4,0,0,[174,1119],[174,1120],[199,253],[200,254],[199,255],[200,256],[15,199],200,199,200,[15,135],15,16,15,16,[16,132],179,180,179,179,180,179,[180,314],[179,315],[179,284,316],[179,180,285],[179,179,286],[180,287],[179,138,288],[198,289],[199,290],[16,179,291],[15,180],16,15,[16,11],[15,12],16,15,16,15,16,15,16,[15,133],[16,193,293],[15,194,294],[179,295],[180,296],179,180,179,[180,233],[16,507,177,234],[15,235],[16,236],15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,[16,192],[15,193],[16,194],[15,155],[16,156],[15,155,746],[155,649],[156,690],406,406,[406,971],[175,972],[156,973,952],[155,937],[156,937],[155,953],[156,973],155,155,156,[155,314],[156,315],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[573,1290],573,552,[553,1301],[4,1302],[4,1284],4,[4,1268],[4,1247],[4,1248],[4,1227],[4,1227],[406,1227],[406,1227],[406,1227],[406,1227],[406,1227],[406,1227],[406,1227],[4,1243],[4,1263],4,4,4,[4,1267],[4,1268],[4,1247],[4,1247],[4,1247],[4,1263],[4,1264],[4,1267],[4,1289],[573,1290],572,573,572,[573,1281],[4,1282],4,4,4,4,4,0,0,[180,1139],[174,1020],[178,273],[179,274],[179,275],[180,276],[35,179],180,[35,196],[36,136],35,[35,52],36,35,36,[36,152],199,200,179,199,200,179,179,199,[179,304],[179,305],[199,306],[200,307],[199,308],[200,309],[199,310],[36,199,311],[35,136],[36,72],35,[36,31],[35,32],36,35,36,35,36,35,36,35,36,[35,314],[36,134,315],[200,316],159,200,199,[200,253],[36,507,197,254],[35,508,255],[36,256],[35,13],[36,14,92],[35,93],[36,94],[35,95],[36,96],[35,97],36,35,36,35,36,35,36,35,36,35,36,[35,192],[36,193,952],[35,194,934],[406,934],[406,934],[406,934],[406,934],[175,953],[175,973,933],[176,972],[175,957],[176,957],[175,973],176,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[553,1310],573,572,[573,1301],[4,1302],4,4,4,4,[4,1268],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[553,1330],552,[479,1241],[552,1242],[4,1243],[4,1263],4,4,4,4,4,0,0,[179,1159],[199,1040],[198,293],[178,294],[179,295],[199,296],[15,199],[16,136],15,16,15,[53,72],[54,92],[16,94],[15,96],173,179,180,[155,219],[179,220],180,179,180,159,[179,324],[180,325],[159,326],[180,327],[179,328],[179,329],[179,330],[180,331],[15,97],16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,[15,112],179,180,179,[550,117,273],[16,551,274],[15,550,275],[16,494,276],[15,33],[16,34,112],175,176,[156,160],155,156,[16,93],[15,116],16,15,16,15,16,15,16,[15,974],[16,977],[15,971],[16,175,972],[15,175,954],[175,954],[175,954],[175,954,931],[175,954,932],[175,973],[155,991],[156,992],155,156,155,156,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[553,1310],480,553,[552,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[572,1349],[573,1350],572,[572,1261],[4,1262],[4,1263],4,4,4,4,4,4,0,0,[174,1059],[159,406,1060],[180,688],[198,747,314],[199,315],[179,316],[35,180],[36,97],35,36,35,[73,114],179,180,179,180,199,200,[175,239],[179,240],200,199,200,[199,119],[199,344],[200,345],[199,346],[200,347],[179,348],[200,349],[199,350],[200,351],[35,117],36,35,36,35,36,35,[36,55],[35,56],36,35,36,35,36,35,36,[35,152],199,200,199,[35,570,137,293],[36,550,294],[35,551,295],[36,594,296],[35,11],[36,12,152],156,175,176,175,176,175,176,[36,93],[35,93],[36,116],35,36,35,36,35,36,[35,991],[36,175,992],[35,175],175,175,[175,951],[175,933],[176,934],[175,972],[176,973],175,176,175,176,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[553,1330],572,573,[572,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1346],[4,1347],[4,1348],[4,1368],[552,1350],553,552,[553,1281],[4,1282],4,4,4,4,4,4,4,0,0,[406,1079],[406,1200],406,[179,688],[200,669],[199,747],[15,200],[16,117],15,16,[15,114],153,199,200,199,200,179,180,173,173,173,179,180,179,[179,433,364],[179,180,434,365],[179,435,366],[180,436,367],[179,437,368],[180,438,369],[160,370],[180,371],[15,137],16,15,16,15,16,15,[16,75],[15,76],16,[15,114],[16,115],15,16,15,[16,113,44],[15,180,45],[179,46],[180,47],[179,48],[593,157,49,313],[593,50,314],[15,594,51,315],[16,316],[15,31],[16,32,133],176,155,156,155,156,155,156,155,156,155,[15,97],16,15,16,[15,974],[16,977],[15,991],[155,992],156,155,156,[155,971],[156,953],[155,954],[156,973],155,155,156,155,156,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[572,1349],[573,1350],552,553,[553,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[552,1367],[553,1747],[552,1367],[553,1368],[553,1388],572,[573,1241],[572,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,0,0,406,406,406,406,406,[160,648],[35,180],[36,137],35,[36,113],153,[179,141],[180,142],[179,139,143],179,199,199,200,199,178,179,173,200,199,[173,453,384],[200,454,385],[179,199,455,386],[200,456,387],[199,457,388],[200,458,389],[199,390],[200,391],[35,157],36,35,36,35,36,35,36,[35,92],[36,93],155,156,[35,96],[36,96],[35,96],[36,199,64],[200,65],[199,66],[200,67],[199,68],[570,136,69],[571,70],[35,71],36,35,36,[35,192],175,[176,44],[175,45],[176,46],[175,47],[176,159,48],[175,49],[176,50],[175,51],[35,177],36,35,36,35,36,[35,991],[175,992],176,175,176,[175,991],[176,992],[175,158,974],[176,1035],[175,1036],[175,1037],176,175,176,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[572,1310],573,572,573,[573,1321],[4,1322],[4,1323],[4,1324],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[553,1368],[573,1386],[572,1387],[573,1767],[572,1387],[573,1388],573,573,[552,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,0,0,406,406,406,406,[200,628],199,[15,200],[16,157],15,[16,172],179,[199,161],[200,162],[199,163],199,200,178,179,179,198,199,[180,139],174,179,[180,473],[174,474],[179,475],[180,476],[179,477],[180,478],179,180,[15,177],16,15,16,15,16,15,[16,114],179,155,155,156,180,179,180,[179,84],[159,85],[179,86],[196,87],[197,88],89,90,[15,91],16,15,[16,11],[15,12],[16,134],[15,155,64],[16,156,65],[155,66],[156,67],[156,68],[155,69],[156,70],[155,71],[15,117],16,15,16,15,16,[15,991],[155,992],[156,993],155,[156,1071],[155,1011],[156,1032],[175,1054],[176,1441],[155,1056],[156,1033],156,155,156,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[552,1310],553,553,552,[572,1341],[573,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[572,1368],[573,1388],553,552,553,553,552,[572,1241],[573,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,0,0,406,406,406,406,[180,668],179,[35,180],[36,177],35,[36,112],155,[199,181],[179,182],[158,183],200,199,198,199,199,200,199,200,[199,213],[200,214],[200,215],[199,216],200,199,159,200,199,[36,200],[35,197],36,35,36,[35,18],[36,13,19],[35,14,113,20],[36,200],200,175,154,155,219,[199,220],200,[199,104],[200,105],[197,106],107,108,109,110,[35,111],36,35,[36,31],[35,32],36,[15,112,84],[16,176,85],[175,86],[155,87],[156,88],[155,89],[156,90],[155,91],[35,137],36,35,36,35,36,[35,1011],[155,1012],[156,1013],175,[176,1091],[175,1072],[176,1073],[175,1461],[176,1501],[175,1462],[176,1032],[176,1033],175,176,175,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[572,1310],[573,1250],553,553,572,[573,1341],[552,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[552,1330],553,573,572,573,553,553,[572,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,406,406,406,406,[175,688],[199,669],[15,200,747],[16,153],[15,116],16,[15,134],[179,201],[180,202],[179,203],[180,139],178,179,179,179,180,179,180,[179,233],[180,234],[180,235],[179,236],180,179,179,180,179,[16,117],15,16,15,16,[15,92,38],[16,33,96,39],[15,34,179,40],[16,180],155,156,174,175,[179,179,239],[179,240],180,[179,124],[135,125],126,127,128,129,130,[15,131],16,[15,213],[16,214],[15,215],[16,216],[15,132,104],[16,155,105],[156,106],[155,107],[156,108],[155,397,109],[155,398,110],[156,111],[15,157],16,15,16,15,16,[15,1011],[175,1012],155,[156,1034],156,[155,1092],[156,1093],[155,1481],[156,1521],[155,1482],[155,1052],[156,1032],[155,1033],156,155,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[572,1270],573,573,552,553,[572,1362],[573,1342],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[553,1349],[572,1350],573,572,552,572,573,573,[552,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,0,0,[406,213],[406,214],[406,215],[406,216],406,406,[35,155,648],[36,156],[35,155],[36,115],[35,113],[36,199],[200,241],179,179,198,199,199,[200,257],[178,258],179,200,[199,253],[200,254],[200,255],[199,256],200,199,199,200,199,[36,137],35,36,35,[36,113],[154,58],[155,59],[199,60],200,175,176,[154,139],155,199,199,[35,196,5],[36,136,144],145,146,147,148,149,150,[35,151],36,[35,233],[36,234],[35,235],[36,236],[15,152,124],[16,175,413,125],[176,414,126],[155,415,127],[156,416,158,128],[175,417,129],[155,418,130],[156,131],[15,177],16,15,16,15,16,[15,1031],[175,1032],[175,1054],[176,1442],[176,1057],[155,1033],156,175,176,175,[175,1072],[176,1052],[175,1012],176,175,155,[156,213],[155,214],[156,215],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[4,1290],573,572,572,479,552,[553,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[573,1310],552,553,480,572,573,573,572,[572,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,0,0,[406,937,233],[406,938,234],[406,235],[406,236],[406,932],[406,933],[15,175,934],[16,11,176,938],[15,12,175],[16,176],[15,155],[16,179,164],[180,261],179,180,159,180,179,[179,277],[198,278],199,180,[179,273],[180,274],[180,275],[179,276],180,179,179,180,179,[16,157,785],15,[16,92],[15,96],[16,199],[174,78],[175,79],[179,80],154,155,176,154,155,180,[16,135],[15,25],[16,164],165,166,167,168,169,170,[15,171],16,[15,253],[16,254],[15,255],[16,114,256],[35,155,144],[36,155,433,145],[155,434,146],[175,435,147],[176,436,148],[155,437,149],[156,438,150],[176,151],[35,135],36,35,36,35,36,[35,1051],[36,1052],1463,1721,1464,[175,1032],[155,1033],156,155,156,155,[156,1011],[155,1012],156,155,175,[176,233],[175,234],[176,235],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[573,1310],573,552,553,552,572,[573,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[572,1270],573,573,553,573,573,552,[553,1321],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,[155,957,253],[156,958,254],[406,937,255],[406,937,256],[406,937],[176,953],[35,177,954],[36,31,979],[32,155,980],156,175,179,200,199,200,199,200,179,200,200,199,200,[199,293],[199,294],[200,295],[199,296],199,200,[13,199],[14,200],199,[36,136,805],35,[36,175],[35,199],[36,179],154,[155,206],[155,207],[174,208],175,158,174,175,[35,177],36,35,[36,184],[35,185],[36,186],[35,187],[36,55,188],[35,56,189],[36,190],[35,191],36,[35,92,273],[36,93,274],[35,93,275],[36,155,276],[15,155,914,164],[16,155,413,165],[175,414,140,166],[176,415,167],[155,416,168],[156,417,169],[176,418,170],[16,177,171],15,16,15,16,15,16,15,[16,1093],[15,175,1483],[16,176,1741],[15,156,1484],1052,[156,1032],[176,1033],175,176,175,[176,1011],[175,1012],176,175,155,[156,253],[155,254],[156,255],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[573,1330],573,572,573,572,552,[553,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,573,573,573,573,572,[573,1341],[572,1342],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,[175,273],[176,978,274],[156,957,275],[155,957,276],[156,957],[176,973],[15,177],[16,999],[175,1000,213],[155,214],[156,215],[173,119,216],173,179,180,179,180,180,179,180,180,179,180,[179,314],[179,315],[180,316],179,159,[33,179],[16,34,196],[15,197],16,15,[16,134],[15,196,933],[16,180,934],[174,934,225],[175,934,226],[175,934,227],[154,934,228],[155,934,229],[179,937],[154,938],155,[15,117],16,15,16,15,16,15,[16,75],[15,76],16,15,16,[16,172,293],[176,294],[155,295],[156,296],[35,175,184],[36,175,433,185],[176,434,186],[155,435,187],[35,156,436,188],[36,176,437,189],[35,196,438,190],[36,197,191],35,15,16,15,16,15,16,15,[16,192],[15,175],[16,176],[15,156,1072],[16,1052],[15,155,1053],[156,1170],[155,1171],[156,1033],[156,1031],[155,1032],[156,1033],155,156,[176,273],[175,274],[176,275],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[553,1349],[573,1350],573,552,553,572,[572,1223],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1227],[573,1228],553,573,573,552,[553,1222],[572,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,[155,293],[156,294],[176,295],[175,296],176,176,[35,177],[36,999],[155,1000,233],[175,234],[176,235],[153,236],173,155,156,155,156,200,155,156,200,155,155,156,155,155,156,200,[35,197],36,35,36,35,[36,971],[35,953],[36,134,954,244],[35,199,954,245],[36,199,954,246],[35,200,954,247],[36,954,248],[35,954,249],[36,957,250],[35,958],[36,507,175,980],[35,157],36,35,36,35,36,35,36,35,36,35,[36,113],[175,313],[175,314],[175,315],[176,316],155,156,[155,454],[156,455],[15,176,456],[16,135,457],[15,458],16,15,35,36,35,36,35,36,35,36,[35,133],[36,175],[35,176],[36,156,1072],[35,175,1073],[176,1190],[175,1191],[176,1053],[176,1033,1051],[175,1052],[176,1032],[175,1033],[176,1034],[156,293],[155,294],[156,295],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[552,1310],[553,1370],[573,1164],[572,1165],573,[552,1223],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1248],[552,1228],[553,1163],[573,1164],[572,1165],[573,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,175,[155,314],[156,315],[176,316],176,176,[15,136,1018],[16,1019],[175,1020,253],[176,254],[155,255],[156,256],155,175,155,156,155,156,156,176,156,155,156,154,155,156,154,[16,135],15,16,15,16,[15,113],[16,156,991],[15,992],[16,993,264],[15,172,265],[16,15,173,266],[15,16,180,267],[16,16,176,268],[15,176,269],[16,270],[15,999,271],[176,1000],[15,176],[16,116],15,16,15,16,15,16,15,16,[15,113],[16,176],176,176,176,176,175,[155,378,977],156,[176,475],[35,197,476],[36,477],[35,478],36,35,15,16,15,16,15,16,15,16,15,[16,192],[15,175],[16,176],[15,155,1093],[156,1210],[176,1211],1073,[156,1012],[155,1072],[156,1073],[155,1053],[156,1054],[176,1033],[175,1034,314],[176,315],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[573,1183],[573,1184],[573,1185],[553,1227],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[573,1183],[573,1184],[573,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,0,0,156,175,176,[176,44],[196,1036,45],[15,197,1037,46],[16,1038,47],[36,1039,48],[175,1040,273,49],[176,274,50],[175,275,51],[176,276],179,176,176,[36,195],[35,196],176,154,174,154,175,176,156,155,156,[35,177],36,35,36,35,[36,92],156,[156,1011],[35,1012],[36,284],[35,15,192,285],[36,16,193,286],[35,16,176,287],[36,36,176,288],[35,16,289],[36,290],[35,999,291],[176,1000],[35,176],[36,176],[35,93],[36,97],35,36,35,36,[35,92],[36,93],[35,155],[36,155],156,176,176,155,[156,1013],175,176,[16,135],15,16,15,16,15,35,36,35,36,35,36,[35,204],[36,205],[35,206],[36,207],[35,172,208],[36,155,209],[35,175,281,210],[176,282,211],[176,283],[176,1011],[176,1012],175,[176,1093],[175,1073],[176,1074],[156,1053],[155,1054],[156,1033],1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,0,0,176,155,156,[155,1038,64],[1176,65],[1177,66],[1058,67],[155,1059,68],[156,1060,69],[155,294,70],[156,295,71],[155,296],200,155,[15,135],16,15,[16,134],156,155,[15,156,140],155,156,155,175,155,156,[16,97],15,16,15,[16,112],156,[176,1011],[15,1012],[16,304],[15,305],[16,306],[36,307],[35,308],[36,156,309],[15,310],[16,999,311],[155,1000],156,155,155,[15,177],16,[16,92],[16,96],[16,96],[16,175],175,175,175,176,153,153,175,176,156,[35,117],36,35,36,35,36,35,15,16,15,16,15,16,[15,224],[16,225],[15,226],[16,227],[155,228],[175,118,229],[176,301,230],[156,302,231],[155,303],[156,1011],[156,1012],155,[156,1092],[155,1093],[156,1094],[155,1073],[156,1074],1053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,175,[155,1158],[156,1159,84],[176,1196,85],[156,1197,86],[176,1078,87],[175,1079,88],[176,1080,89],[175,314,90],[199,315,91],[179,118,316],[35,180],[36,135],35,36,35,36,[35,133],173,173,[173,746],[179,649],[180,669],[178,747],155,156,[36,177],35,36,35,[36,132],156,[156,1011],[35,1012],[36,324],[15,325],[15,176,326],[16,327],[35,155,328],[36,156,329],[35,330],[36,999,331],[175,1000],176,175,[175,158],[35,136],[36,113],[36,175],[36,175],[36,176],[36,156],153,153,154,155,173,173,174,175,176,[15,137,378],16,15,16,15,16,15,35,36,35,36,35,36,[35,244],[36,245],[35,246],[36,247],[175,248],[176,249],[175,321,250],[176,322,251],[175,323],[176,1011],[176,1012],175,176,175,176,[175,1093],[176,1094],1073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,[156,1158],[175,1178],[176,1179,104],[155,1216,105],[156,1217,106],[155,1098,107],[156,108],[155,109],[155,110],[199,111],199,[15,136],[16,72],15,16,15,16,15,[16,134],[15,194,746],[173,690],[173,406],[200,406],[198,688],[175,747],176,[16,136],15,16,15,[16,152],176,[176,1011],[15,1012],[16,344],[35,345],[15,1661],[15,1662],[16,175,1663],[36,176,349],[15,350],[16,1019,351],[156,1020],153,[15,154],[16,136],[15,113],[16,153],[154,213],[155,214],[156,215],[153,216],154,[154,119],155,156,[176,393],153,[154,611],[155,612],[156,613],[35,157],36,35,36,35,36,35,15,16,[15,92],[16,93],[15,94],[16,95],[15,96,264],[16,265],[15,266],[16,267],268,269,[155,341,270],[156,342,271],[155,343],[156,1011],[156,1012],155,156,155,155,156,155,[156,1093],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,[200,1139],[155,1198],[156,1199,124],[175,125],[176,126],[175,127],[176,128],[155,129],[175,130],[179,131],180,[16,97],15,16,15,35,36,35,[36,746],[35,690],[133,406],[193,406,748],[194,406],[179,406],[180,688],[35,117,747],36,35,36,35,[36,112],156,[156,1011],[35,1012],[36,364],[35,365],[35,1681],[35,1682],[36,1683],[36,369],[35,370],[36,1019,371],[156,1020],173,[35,177,139],36,[35,172],[36,175],[174,233],[175,234],[175,235],[173,236],174,174,175,153,154,155,[156,631],[175,406],[176,633],[15,177],16,15,16,15,16,15,[299,35],[300,36,113],[299,175],[300,176],[299,155],[300,156,160],[175,284],285,286,287,288,289,[175,361,290],[176,362,291],[175,363],[176,1011],[176,1012],175,176,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,[15,200,1119],[16,196,1120],[15,176,1219,144],[16,155,145],[15,156,146],[16,199,147],[200,148],[179,149],[200,150],[199,151],200,[36,117],35,36,35,15,16,15,[16,650,213],[15,406,214],[406,215],[406,216],406,[134,406],[200,406],[15,137,648],16,15,16,15,[16,132],176,[176,1011],[15,1012],[16,384],[16,385],[15,35,386],[16,36,387],[15,388],[16,389],[15,390],[16,1019,391],[176,1020],153,[15,136],[16,113],175,153,[154,253],[155,254],[175,255],[153,256],154,154,155,173,174,175,[153,631],[154,406,748],[155,633],156,[36,116],35,36,35,[36,92],[35,93],[319,15,93],[320,175],[319,176],[320,196],[319,175],[320,155],[156,304],305,306,307,308,309,[155,310],[156,311],155,[156,1011],[152,1012],[300,155],[300,156],[319,193],[320,194],[300,195],[319,196],[320,193],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,[15,156,1019],[16,1020],[35,134,164],[36,196,165],[35,176,166],[36,179,167],[180,168],[179,169],[180,170],[160,171],180,[16,137],15,16,15,35,36,35,[36,650,233],[35,406,234],[36,406,235],[35,406,236],[36,406],[35,406,748],[36,112,406],[35,157,648],36,35,36,35,[36,152],156,[156,1031],[35,1032],[36,1054],[36,1055],[35,1056],[36,1832],[35,1054,1170],[36,1055,1171],[35,1056],[36,1039],[154,1040,1160],[15,177],16,[36,172],175,175,[174,273],[175,274],[175,275],[173,276],174,174,175,153,154,155,[156,651],[174,652],[175,653],176,155,[15,93],[299,16,94],[300,15,96],[299,175],[300,176],[299,175],[300,176],[299,135],300,[299,133],[300,175],[299,176,324],[300,325],[299,326],[300,327],328,329,[155,330],[156,159,331],155,[156,1011],[156,1012],[320,155],[320,135],299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,[15,154,1019],[16,1020],[15,184],[16,185,5],[15,133,186,5],[16,176,187],[200,188],[199,189],[200,190],[199,191],200,[36,157],35,36,35,15,16,15,[16,253],[15,630,254],[16,406,255],[15,406,256],[16,406],[15,406],[16,152,628],[15,177],16,15,16,15,[16,172],176,[176,1051],[156,1052],[156,1074],1075,[173,1076],[174,1852],[175,1074,1190],[176,1075,1191],[173,1076,1197],[174,1059,1198],[154,1060,1218],[35,177],15,[16,172],[175,257],[175,258],[154,293],[155,294],[175,295],[154,296],155,155,156,173,[174,453,18],[175,19],[176,20],154,155,156,175,155,[299,175],[300,176],[319,196],[320,193],[319,175],[320,177],319,[320,1008],319,[320,172],[319,175,344],[320,345],[319,346],[320,347],348,[155,349],[175,350],[176,351,5],175,[36,176,1011],[35,176,1012],[300,135],300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,[15,156,978],[16,200,979],[15,980],[16,25],[35,25],[36,172],180,179,180,179,180,[16,177],15,16,15,35,36,35,[36,114,273],[35,115,274],[36,630,275],[35,406,276],[36,406],[35,113,628],155,156,[36,116],35,36,[35,113],[36,156],[155,158],156,[176,1072],[176,1094],[156,1095],[153,1096],[16,1872],[155,1094,1210],[156,1095,1211],[153,1096],[154,1079],174,[16,197],[35,113],[36,175],[176,277],[173,278],174,[175,314],[173,315],[174,316],175,175,176,153,[154,38],[155,474,39],[153,40],154,[155,118],156,[299,175],[300,175],[319,176],[320,136],299,300,[299,192],[299,197],300,[299,1028],[300,1033],[299,192],[300,175,364],[299,175,365],[300,175,366],[299,367],[300,368],[299,175,369],[300,176,370],[155,371,25],175,[16,176,1038,1011],[15,1012],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,[35,176],[15,156,999],[35,1000],36,15,[16,112],199,159,200,199,200,[36,197],35,36,35,15,[16,92],[15,93],[16,155,293],[15,156,294],[16,96,295],[15,96,629,296],[16,96,629],[15,199],175,155,[16,156],[15,155],[16,156],[15,155],[16,156],175,176,156,156,176,[15,177],16,[35,172],[36,156],153,154,[35,197],[36,113],176,175,[176,159],173,174,175,173,174,175,175,176,153,[154,58],[155,59],[153,60],154,155,156,[319,175],[320,196],[319,197],320,319,320,299,300,320,[319,1048],[320,1032],[319,1033],[320,192,384],[319,196,385],[320,197,386],[319,387],[320,192,388],[319,193,389],[320,194,390],[36,175,391],[35,155,1038],[36,156,1058,1011],[35,1012],300,300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,[15,174],[35,154,1019],[35,177,1020],36,35,[36,152],179,179,180,179,[15,177],16,15,16,15,[16,114],179,155,155,[156,314],[155,315],[156,316],175,176,175,175,176,155,156,175,176,[175,140],[299,176],[300,176],176,156,[35,173],[36,116],[15,192],[15,193],[16,196],[15,197],16,[16,172],154,175,156,153,154,155,156,154,155,155,156,[319,173],[320,174,78],[319,153,79],[320,173,80],[319,174],[320,175],[319,176],[320,177],[319,955],[320,1100],319,320,319,319,320,320,[299,1068],[300,1052],[319,16,1053],[320,1054],[319,1055],[320,1116],[299,1117],[320,1056],[299,1057],[300,1056],[299,134,1057],[300,15,175,1058],[299,16,176,1078,1011],[300,15,1012],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,153,[35,155],[35,156,1019],[36,1020],16,[15,113],[16,200],199,199,200,199,[35,176],[36,116],35,36,[35,113],200,200,175,154,155,175,176,155,156,155,156,[175,932],175,176,155,175,176,[319,194],[320,193],175,155,156,153,[35,115],35,36,16,[36,92],[36,156],174,175,176,153,154,155,156,174,175,175,176,[320,155],[319,156],[320,173],[319,174],[320,175],[319,176],[320,176],[300,135,1038],[299,975],300,299,300,299,300,299,300,299,[300,1072],[299,1073],[300,1074],[299,1075],[300,1136],[299,1137],[300,1076],[299,1077],[300,1076],[299,1077],[300,1078],[319,1098,1011],[320,1099,1012],300,300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,156,175,[35,176,1019],[36,1020],[36,113],[35,179],[36,180],179,179,[180,974],179,[15,155,974],[16,156],[15,93],[16,96],[15,179],180,155,[156,139],174,175,155,156,175,[299,176],[300,15,175],176,[299,194],[300,175],[299,176],[300,175],[300,176],[299,135],300,299,[300,192],[300,175],176,173,174,[35,94],[36,95],[36,96],153,154,155,156,155,156,[319,173],[320,174],[319,175],[320,176],[319,154],[319,155],[320,156],[319,156],[319,176],[320,176],[319,175,736],[320,195,738],[319,196,739],[320,135,1038,740],[320,1058],[319,995],320,319,320,319,320,319,320,319,320,[319,1093],[339,1094],[339,1095],[339,1156],[339,1157],[339,1096],[319,1097],[320,1096],[319,1097],[320,1098],[299,1011,1099],[300,1012],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1345],[4,1346],[4,1347],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,176,154,[155,978],[179,958],[179,938],[199,939],[199,940],200,199,200,199,175,176,154,155,199,200,175,176,154,155,175,176,[299,193],[300,194],[320,195],[300,136],300,[320,192],[319,193],[320,194],[320,136],319,320,319,320,[320,133],[319,153],[320,154],[319,155],[320,156],[319,154,160],[320,155],[319,156],[319,174],[320,175],[319,176],[320,175],[319,176],[320,194],[319,196],[320,173],[319,174],[320,175],[320,175],[319,176],[320,176],[299,193],[300,195],[299,135,1038],[300,1056],[299,1057],[300,1058],[300,1078],[299,1015],300,299,300,299,300,299,300,299,300,299,400,359,359,359,359,340,300,299,300,[319,1011],[320,1012],299,299,300,320,299,300,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1364],[4,1365],[4,1747],[4,1367],[4,1366],[4,1367],[4,1747],[4,1365],[4,1366],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[28,1829],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,153,154,155,[155,978],[156,958],[180,959],[179,960],159,[299,179],[300,196],[299,196],[300,196],199,174,175,[299,179],[300,193,736],[299,194,738],[300,193,739],[299,194,738],[299,195,738],[300,196,740],[299,197],319,320,319,320,320,299,299,300,[300,955],299,300,299,300,320,[320,133],[319,174],[320,175,956],[319,176],[320,174],[319,175],[320,176,736],[320,193,737],[319,194,737],[320,195,738],[319,196,739],[320,197,1038,740],[300,1831],[299,1115],[300,134,1033,736],[299,193,739],[300,194,737],[299,194,738],[300,195,739],[299,135,1038,740],[300,1056],[319,1057],[320,1058],[319,1076],[320,1077],[319,1078],[335,1098],[336,1099],320,319,320,319,[320,312],[335,313],336,319,339,339,400,359,359,359,359,360,340,319,320,[299,1011],[300,1012],319,319,320,300,319,320,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1289],[552,1349],[553,1384],[552,1385],[553,1767],[552,1387],[553,1386],[552,1387],[553,1767],[552,1385],[553,1386],[1715,1387],[1716,1363],[4,1282],4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[572,1364],[573,1849],[572,1366],[573,1367],[573,1364],[572,1365],[573,1366],[572,1367],[573,1304],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,153,154,155,155,[156,978],[155,979],[156,980],200,[319,197],320,299,[300,956],[299,133],154,[300,155],[319,136,1038],[320,1054],[319,1055],[320,1056],[319,1057],[319,1054],[320,1055],[319,1033],[320,1034],[300,1035],299,300,300,319,[319,1018],[320,1038],[320,975],319,320,319,320,319,320,319,[320,976],[319,133,1033],[320,193,1036],[319,193,1037],[320,136,1038],[319,1056],[320,1057],[319,1056],[339,1057],[339,1058],[339,1851],[339,1135],[339,1053],[319,1054],[320,1055],[319,1056],[320,1057],[319,1058],[320,1076],[299,1077],[300,1078],[299,1096],[300,1097],[299,1098],355,356,300,299,300,299,300,355,356,339,400,359,359,359,359,359,359,359,360,299,300,[319,1011],[320,1012],320,320,319,320,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[572,1310],573,572,573,572,573,572,573,572,573,552,[553,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,[4,1289],[553,1349],[552,1384],[553,1869],[552,1386],[553,1387],[553,1384],[552,1385],[553,1386],[552,1387],[553,1387],[553,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,173,174,175,175,176,[177,999],[176,1000],[319,135],319,320,319,[320,976],[319,1033],[319,192],[320,136,1038],[339,1039],[400,1074],[359,1075],[359,1076],[359,1077],[359,1074],[359,1075],[359,1053],[319,1054],[320,1033],319,320,[320,1036],[299,1037],[300,1038],[299,1039],[300,995],299,300,299,300,299,300,299,[300,996],[299,1053],[300,1054],[299,1055],[300,1058],[299,1076],[300,1077],[299,312,1076],[400,313,1077],[359,1078],[359,1871],[359,1155],[359,1073],[340,1074],[300,1075],[299,1076],[300,1077],[299,1078],[300,1096],[319,1097],[320,1098],319,320,319,320,319,320,319,339,339,339,339,339,400,359,359,359,359,359,359,359,359,359,360,320,[299,1011],[300,1012],299,299,300,300,299,300,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[572,1310],573,572,573,572,573,572,573,572,573,572,[573,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,[4,1309],[4,1310],572,479,572,573,573,572,573,572,573,[573,1362],[572,1363],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,174,175,176,176,[299,176],[300,135,1019],[299,1020],300,339,339,339,[400,996],[359,1053],[359,1057],[359,1058],[359,1059],[359,1094],[359,1095],[359,1096],[359,1097],[359,1094],[359,1095],[359,1073],[359,1014],[359,1053],[359,1054],[359,1055],[340,1056],[319,1057],[320,1058],[319,1059],[320,1015],319,320,319,335,336,320,319,[320,1016],[319,1073],[320,1074],[335,1075],[336,1078],[319,1096],[339,1097],[339,1096],[400,1097],[359,1098],359,359,[359,1093],[360,1094],[340,1095],[319,1096],[320,1097],[319,1098],320,[299,312],[300,313],299,300,299,300,[339,1821],[339,1822],[339,1823],400,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[340,971],[319,972],[320,973],319,319,320,320,319,320,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[552,1322,1310],[553,1323],553,553,552,553,552,553,552,553,[552,1328],[553,1329,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,[4,1309],[552,1310],553,552,553,552,553,552,553,552,553,553,[552,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,[299,175],[300,195],[319,196],[320,196],[319,135,1038],[339,1039],[319,1040],320,359,359,359,[359,1016],[359,1073],[359,1193],[359,1078],[359,1079],[359,1080],359,359,359,359,359,[359,1093],[359,1094],[359,1073],[359,1074],[359,1075],[340,1076],[299,1077],[300,1078],[299,1079],[300,1080],299,300,299,355,356,300,299,300,[299,1093],[300,1094],[355,1095],[356,1098],339,400,359,359,359,359,359,359,359,360,299,300,299,300,319,320,319,339,319,320,[359,1841],[359,1842],[359,1843],359,359,359,[359,1036],[359,1037],359,359,359,359,359,359,359,359,359,359,359,[340,991],[299,992],[300,993],299,299,300,300,299,300,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[572,1342,1310],[573,1343,7],8,[573,1345,10],[572,1346],[553,1347],[552,1346],[573,1347],[572,1346,7],[573,9],[572,1348,10],[573,1349,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[573,1227],[572,1227],[573,1227],[572,1227],[573,1228],553,573,572,460,573,572,[573,1362],[4,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[319,135],320,299,[300,1038],[299,1058],[359,1059,1078],[359,1060],359,359,359,359,359,[359,1093],[359,1097],[359,1098],[359,1099],[359,141,1100],[359,142],[359,143],359,359,359,359,359,[359,1093],[359,1094],[359,1095],[340,1096],[319,1097],[320,1098],319,320,319,320,319,320,319,320,319,339,339,339,339,339,400,359,359,359,359,359,359,359,359,359,360,320,319,320,299,300,299,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864,1036],[359,1865,1037],[359,1038],[359,1056],[359,1057],[359,1116],[359,1117],[359,1033],359,359,359,359,[359,955],359,359,359,[340,1011],[319,1012],[320,1013],319,319,320,320,319,320,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1362,1310],[4,1363,7],8,[4,1365,10],[4,1366],1367,1366,[4,1367],[4,1366,7],9,[4,1368,10],[4,1369,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1247],[4,1247],[4,1247],[572,1269],[460,1270],552,553,552,553,552,553,[552,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,299,300,[319,1038],[320,1058],[359,1078],[359,1079,1098],[359,1080],359,359,359,359,359,359,359,359,359,[359,161],[359,162],[359,163],359,359,359,359,359,359,359,359,340,299,300,299,300,299,300,299,300,339,339,339,400,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,299,300,319,320,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885,1038],[359,1058],[359,1076],[359,1077],[359,1136],[359,1137],[359,1032],[359,1033],359,359,[359,1038],[359,975],359,359,359,[340,1031],[299,1032],[300,1033],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1382,1310],[4,1383],[4,1384],[4,1385],[4,1386],[4,1387],[4,1386],[4,1387],[4,1386,7],9,[4,1388,10],[4,1389,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[572,1270],573,572,573,572,573,572,[573,1362],[4,1342],[4,1282],4,4,4,4,4,4,4,4,0,0,319,[320,1038],[359,1039],[359,1078],[359,1098],359,359,359,359,359,359,400,359,359,359,359,[359,181],[359,182],[359,183],359,359,359,359,359,359,359,[359,933],[299,934],[300,937],[320,938],319,320,319,339,319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,319,320,359,359,359,359,[359,956],359,[359,1901],[359,1902],[359,1903],[400,1038],[359,1058],[359,1078],[359,1096],[359,1097],[359,1156],[359,1157],[359,1052],[359,1053],[359,1056],[359,1057],[359,1058],[359,995],359,359,359,[340,1051],[319,1052],[320,992],300,300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],4,4,4,4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[553,1227],[552,1228],553,552,479,572,[573,1222],[4,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,319,[320,1019],[319,1059],[320,1060],319,400,359,359,340,300,400,359,359,340,300,300,[299,201],[300,202],[319,203],320,319,320,299,[320,951],[299,952],[299,937],[300,15,953],[319,16,954],[320,15,957],[300,16,958],[299,937],[300,938],[299,939],[359,940],359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,299,300,359,400,400,400,[400,976],[400,1033],[400,1036],[400,1037],[400,1038],[400,1058],[400,1078],[400,1098],400,400,359,359,[400,1072],[400,1073],[400,1076],[400,1077],[400,1078],[400,1015],400,400,400,340,[299,991],[300,992],300,300,299,300,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1248],[573,1228],[572,1163],[573,1164],[552,1165],[553,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,0,0,320,[319,1019],[320,1020],319,320,380,359,359,340,300,380,359,359,340,300,300,299,300,299,300,299,300,299,[300,971],[299,15,972],[319,16,957],[320,35,973],[300,36,974],[319,35],[299,36,978],[300,15,957],[320,16,979],[359,980],[359,960],359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,319,320,400,359,359,340,[300,996],[320,1053],[319,1056],[320,1057],[299,1058],[300,1078],[319,1098],320,[400,141],[359,142],[359,143],340,300,[320,1093],[319,1096],[320,1097],[299,1098],300,299,300,299,300,[319,991],[320,992],320,320,319,320,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1183],[553,1184],[572,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,0,0,320,[319,1019],[320,1020],319,320,320,379,379,319,320,320,379,379,319,320,320,319,320,319,339,339,339,339,[339,991],[319,35,992],[320,36],[319,15],[320,16],[299,15],[319,16],[320,35],[359,36,1019],[359,1020],359,359,359,359,359,359,400,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,320,319,380,359,359,340,[300,1016],[320,1073],[319,1076],[320,1077],[319,1078],[320,1098],319,320,[380,161],[359,162],[359,163],340,300,339,339,339,339,339,319,320,319,320,[299,991],[300,992],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,300,[299,1019],[300,1020],299,300,300,299,300,299,300,300,299,300,299,300,300,299,300,299,400,359,359,359,[359,1011],[340,35,1012],[300,36],[299,35],[300,36],[319,35],[320,36],[359,35,1038],[300,36,1039],[299,1040],300,299,300,300,400,400,400,400,400,400,400,359,359,400,400,400,400,400,400,400,400,359,359,340,300,320,379,379,319,320,[300,1093],[299,1096],[300,1097],[299,1098],300,299,300,[320,181],[379,182],[379,183],319,320,400,359,359,359,359,340,300,299,300,[319,991],[320,992],300,300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,299,[300,1019],[319,1020],320,319,320,319,335,336,[320,1821],[319,1822],[320,1823],319,320,335,336,319,[339,312],[339,313],400,359,359,359,[359,1031],[360,15,1032],[299,16,1033],[300,16],[320,15],[299,16],[300,15,1038],[319,16,1058],[320,1059],[319,1060],320,319,320,319,320,319,320,319,320,319,320,299,300,319,320,319,320,299,320,299,380,359,359,340,300,300,[299,1821],[300,1822],[299,1823],300,335,336,320,319,320,319,320,[300,201],[299,202],[300,203],299,300,400,359,359,359,359,360,[340,1846],319,320,[299,991],[300,992],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,1019],[299,1020],300,299,300,299,355,356,[300,1841],[299,1842],[300,1843],299,300,355,356,339,400,359,359,359,359,359,[359,1051],[359,35,1052],[319,36,1012],[320,36],[300,35],[319,36,1038],[320,35,1058],[320,36,1059],[319,1060],320,319,320,[300,1821],[299,1822],[300,1823],299,300,299,300,299,300,299,300,299,300,299,300,299,300,299,320,379,379,319,320,299,[300,1841],[299,1842],[300,1843],299,355,356,300,299,300,299,300,355,356,339,400,359,359,359,359,359,359,359,360,299,[300,971],[319,972],[320,973],300,319,320,300,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,299,[300,1019],[319,1020],320,319,320,319,320,319,[320,1861],[319,1862],[339,1863],[339,1864],[339,1865],339,339,400,359,359,359,359,359,359,[359,1071],[359,1011],[359,15,1012],[360,16],[320,15],[299,16,1019],[300,1059],[320,1060],319,320,319,320,[320,1841],[319,1842],[320,1843],319,320,319,320,319,320,[319,955],320,319,339,339,339,339,339,319,300,299,300,299,300,319,[320,1861],[319,1862],[320,1863],[319,1864],[320,1865],319,320,[319,312],[339,313],339,339,339,339,400,359,359,359,359,359,[359,1821],[359,1822],[359,1823],359,[360,952],[320,972],[299,973],300,320,299,300,320,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,1019],[299,1020],300,299,300,299,300,339,[339,1881],[339,1882],[400,1883],[359,1884],[359,1885],359,359,359,359,359,359,[359,1821],[359,1822],[359,1823],359,[359,1031],[359,35,1053],[359,36,1056],[340,35,1057],[319,36,1039],[320,1040],300,299,300,299,300,[300,1861],[299,1862],[300,1863],[299,1864],[300,1865],299,[300,1036],[299,1037],[300,1038],[299,975],300,299,400,359,359,359,359,340,300,299,300,319,320,299,[300,1881],[299,1882],[300,1883],[299,1884],[300,1885],339,339,339,400,359,359,359,359,359,359,359,359,359,359,[359,1841],[359,1842],[359,1843],359,[359,991],[340,992],319,320,300,319,320,300,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1222,1310],[4,1223,7],8,[4,1228,10],[4,1229],[4,1230],[4,1221],[4,1222],[4,1223,7],9,[4,1228,10],[4,1229,1301],[4,1230,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,299,[300,978],[319,979],[320,980],319,339,319,320,359,[359,1901],[359,1902],[359,1903],359,359,359,359,359,359,359,359,[359,1841],[359,1842],[359,1843],359,[359,1051],[359,1073],[359,1076],[340,1077],[299,1059],[300,1060],319,320,319,[320,956],319,[335,1881],[336,1882],[320,1883],[319,1884,1036],[320,1885,1037],[319,1038],[320,1056],[335,1057],[336,1058],[319,995],339,339,400,359,359,359,359,360,340,319,320,299,300,319,[320,1901],[319,1902],[339,1903],319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865,1011],[340,1012],299,300,320,299,300,320,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[552,1242,1310],[553,1243,7],8,[552,1248,10],[4,1249],[4,1250],[4,1241],[4,1242],[553,1243,7],9,[572,1248,10],[573,1249,1301],[4,1250,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,998],[299,999],[300,1000],299,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865],[359,1093],[359,1096],[340,1097],[319,1079],[320,1080],299,300,299,[300,976],[299,1033],[355,1901,1036],[356,1902,1037],[300,1903,1038],[299,1056],[300,1057],[299,1058],[300,1076],[355,1077],[356,1078],[339,1015],400,359,359,359,[359,1821],[359,1822],[359,1823],359,360,299,300,319,320,299,300,299,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885,991],[340,992],319,320,300,319,320,300,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[572,1262,1310],[573,1263],[573,1267],[572,1268],[573,1269],[4,1270],[4,1261],[552,1262],[573,1263],[572,1264],[552,1268],[553,1269,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,299,[300,1018],[319,1019],[320,1020],359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885],359,359,340,299,300,319,320,319,[320,996],[319,1053],[320,1056],[319,1057],[320,1058],[319,1076],[339,1077],[339,1078],[339,1096],[339,1097],[339,1098],400,359,359,359,359,[359,1841],[359,1842],[359,1843],359,359,360,320,299,300,319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,400,359,359,[340,1901],[300,1902],[359,1903],359,[359,1011],[340,1012],299,300,320,299,300,320,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],552,[553,1287],[552,1288],[553,1289],[4,1290],[4,1281],[553,1282],[552,1283],[552,1284],552,[553,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,1038],[359,1039],[359,1040],359,359,[359,312],[359,313],359,359,359,400,359,359,359,359,359,359,359,359,[359,1901],[359,1902],[359,1903],359,359,359,359,340,319,320,299,300,299,[300,1016],[299,1073],[300,1076],[339,1077],[339,1078],[339,1096],[400,1097],[359,1098],359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865],359,340,319,320,359,359,359,359,359,359,359,359,359,400,359,359,359,359,359,359,359,380,359,359,340,300,359,[359,971],[299,972],[300,973],319,320,300,319,320,300,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[552,1310],572,[573,1163],[572,1164],[573,1289,1165],[4,1290],[4,1281],[573,1282,1163],[572,1164],[572,1165],572,[573,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,1019],[319,1059],[400,1060],359,359,340,300,319,400,359,359,340,300,400,359,359,340,300,320,319,320,299,320,299,300,299,300,299,300,319,320,319,339,[319,1093],[320,1096],[359,1097],[359,1098],359,359,359,359,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885],359,340,299,300,359,400,359,359,340,300,400,400,400,400,400,400,400,400,[359,1821],[359,1822],[400,1823],320,379,379,319,320,[400,952],[299,972],[300,973],320,299,300,320,299,300,320,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[573,1227],[573,1183],[573,1184],[573,1289,1185],[4,1290,1227],[4,1281,1227],[573,1282,1183],[573,1184],[573,1185],[573,1227],[4,1243],[4,1263],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,320,[319,1019],[320,1020],380,359,359,340,300,299,380,359,359,340,300,380,359,359,340,300,300,299,300,299,300,299,300,299,300,319,320,299,300,299,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1901],[359,1902],[359,1903],359,359,359,340,319,320,319,380,359,359,340,300,400,359,359,340,300,320,319,320,[299,1841],[300,1842],[319,1843],300,299,300,299,300,[299,991],[319,992],320,300,319,320,300,319,320,299,299,300,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1203],[4,1204],[4,1205],[4,1247],[4,1247],[4,1203],[4,1204],[4,1205],[4,1247],[4,1263],4,4,4,4,4,4,4,[4,4],[4,4],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,320,[319,1019],[320,1020],320,379,379,319,320,319,320,379,379,319,320,320,[379,955],379,319,320,339,339,339,339,339,319,320,319,320,299,300,319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,400,359,359,340,300,320,319,320,320,379,379,319,320,380,359,359,340,300,320,319,320,[319,1861],[320,1862],[319,1863],[339,1864],[339,1865],339,339,339,[319,1011],[320,1012],319,320,299,300,320,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,4],[4,4],4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1447],[4,1448],[4,1449],[4,1446],[4,1447],[4,1446],[4,1447],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,0,0,300,[299,1019],[300,1020],300,299,300,299,[300,956],299,300,299,300,[299,1036],[300,1037],[300,1038],[299,975],300,299,300,400,359,359,359,359,340,300,299,300,319,320,359,359,359,359,359,359,359,359,359,400,359,359,359,359,359,359,359,359,359,299,300,380,359,359,340,300,300,299,300,300,299,300,299,300,320,379,379,319,320,300,299,300,[299,1881],[300,1882],[299,1883],[400,1884],[359,1885],359,359,359,[340,991],[300,992],[299,312],[300,313],319,320,300,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1466,1467,1467,1468,1467,1468,1467,1468,1467,1468,1469,[4,1470],4,4,4,4,4,4,4,4,0,0,299,[300,1019],[319,1020],320,319,320,319,[335,976],[336,1033],[320,1036],[319,1037],[320,1038],[319,1056],[320,1057],[335,1058],[336,995],319,339,339,400,359,359,359,359,360,340,319,320,299,300,359,400,400,400,400,400,400,400,400,400,400,400,400,359,359,340,[300,1846],400,400,319,320,320,379,379,319,320,299,300,319,320,319,320,319,335,300,299,300,299,300,320,335,336,[319,1901],[339,1902],[339,1903],400,359,359,359,359,[360,1011],[340,1012],319,320,299,300,320,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,1488,1487,1488,1487,1488,1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,0,0,319,[320,1019],[299,1020],300,299,300,[299,1036],[355,996],[356,1053],[300,1056],[299,1057],[300,1058],[299,1076],[300,1077],[355,1078],[356,1015],339,400,359,359,359,359,359,359,359,360,299,300,319,320,319,320,400,359,359,340,300,320,299,300,319,320,380,359,359,340,300,320,319,320,299,300,299,300,299,300,319,320,299,300,299,[300,312],[299,313],355,356,300,299,300,299,300,355,356,339,400,359,359,[359,955],359,359,359,[359,991],[299,992],300,300,319,320,300,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,[1507,1609],[1508,1610],[1507,1610],[1508,1610],[1507,1610],[1508,1610],[1507,1611],1508,1509,[4,1510],4,4,4,4,4,4,4,4,0,0,299,[300,1019],[319,1020],320,319,320,319,[320,1016],[319,1073],[320,1076],[319,1077],[339,1078],[339,1096],[339,1097],[339,1098],339,[400,1821],[359,1822],[359,1823],359,359,359,359,359,359,359,360,320,299,300,319,320,380,359,359,340,300,320,319,320,319,320,320,379,379,319,320,320,319,320,299,320,299,300,299,300,299,300,319,320,319,320,319,320,319,320,319,[339,1846],339,339,339,339,[400,736],[359,738,1036],[359,739,1037],[359,740,1038],[359,975],359,359,359,[359,1011],[319,1012],320,320,299,300,320,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1525],1486,1487,[1487,1629],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1631],1488,1489,[4,1530],4,4,4,4,4,4,4,4,0,0,319,[320,1019],[299,1020],300,299,300,299,300,[339,1093],[339,1096],[339,1097],[400,1098],359,359,359,359,[359,1841],[359,1842],[359,1843],359,359,359,[359,312],[359,313],359,359,359,340,319,320,320,319,320,379,379,319,320,300,[299,1821],[300,1822],[299,1823],300,300,299,300,299,300,300,299,300,299,300,299,300,299,300,319,320,299,300,299,300,299,300,339,[339,956],339,400,359,[359,736],[359,737,1036],[359,738,1037],[359,740,1038],[359,1056],[359,1057],[359,1058],[359,995],359,359,359,[359,991],[299,992],300,299,300,320,300,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1506,1507,[1507,1629],[1508,1630],[1507,1630],[1508,1630],[1507,1630],[1508,1630],[1507,1631],1508,1509,[4,1470],4,4,4,4,4,4,4,4,0,0,299,[300,1019],[319,1020],320,319,339,360,360,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865],359,359,359,359,359,359,340,299,300,319,320,300,299,300,299,300,320,[319,1841],[320,1842],[319,1843],320,319,320,299,300,[319,312],[320,313],319,320,299,320,299,300,299,300,299,300,319,320,319,339,319,320,359,[359,976],[359,736,1033],[359,739,1036],[359,738,1037],[359,740,1038],[359,1056],[359,1057],[359,1058],[359,1076],[359,1077],[359,1078],[359,1015],359,359,359,[359,1011],[319,1012],320,319,320,300,320,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,[1487,1629],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1631],1488,1489,[4,1490],4,4,4,4,4,4,4,4,0,0,319,[320,1019],[299,1020],300,380,359,359,359,359,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885],359,359,359,[359,933],[359,934],[359,937],[340,938],319,320,320,319,320,319,320,300,299,300,[299,1861],[300,1862],[299,1863],[300,1864],[299,1865],300,299,300,299,300,299,300,299,300,299,300,299,300,319,320,299,300,299,359,359,359,359,[359,996],[359,1053],[359,1054],[359,1057],[359,1058],[359,1076],[359,1077],[359,1078],[359,1096],[359,1097],[359,1098],359,359,359,359,[359,1031],[359,1032],[320,1033],320,319,320,299,300,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1506,1507,[1507,1649],[1508,1650],[1507,1650],[1508,1650],[1507,1650],[1508,1650],[1507,1651],1508,1509,[4,1470],4,4,4,4,4,4,4,4,0,0,319,[320,978],[319,979],[320,980],319,400,400,359,[359,1826],340,300,379,379,400,359,359,[340,1901],[300,1902],[319,1903],320,319,[320,951],[299,952],[320,937],[299,15,953],[300,16,954],[299,16,957],[300,15,958],[299,16,937],[300,938],[319,939],[320,940],319,320,319,320,319,320,[319,1881],[320,1882],[319,1883],[320,1884],[319,1885],320,299,300,319,320,319,320,299,320,299,300,[299,933],[300,937],[299,938],300,319,320,359,359,359,359,359,[359,1016],[359,1073],[359,1074],[359,1077],[359,1078],[359,1096],[359,1097],[359,1098],359,359,359,359,359,359,359,[359,1051],[359,1052],[359,1032],[299,1033],300,300,319,320,300,300,320,300,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,1508,[1507,1606],[1508,1607],[1507,1608],1508,1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,0,0,320,319,[320,1019],[319,1020],320,319,380,359,359,340,300,300,299,380,359,359,340,300,299,300,299,[300,971],[299,972],[300,16,957],[299,35,973],[300,36,974],[299,36],[300,35,978],[319,15,957],[320,16,958],[320,959],[319,960],320,319,320,300,299,300,[299,1901],[300,1902],[299,1903],300,299,300,299,300,299,300,299,300,299,[300,951],[299,952],[300,937],[299,15,953],[300,16,957],[319,958],[320,937],[359,938],[359,939],[359,1821],[359,1822],[359,1823],359,359,359,[359,1093],[400,1094],[359,1097],[359,1098],359,359,359,359,359,359,359,359,359,359,359,[359,1051],[359,1052],[319,1012],320,320,320,319,320,320,300,320,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1525],1526,1527,1527,1528,[1487,1626],[1488,1627],[1487,1628],1528,1527,1528,1529,[4,1530],4,4,4,4,4,4,4,4,0,0,320,319,[320,1019],[319,1020],320,319,320,379,379,319,320,320,319,320,379,379,319,320,319,339,339,[339,991],[339,15,992],[339,36],[319,15],[320,16],[319,15],[320,16],[299,35,977],[300,15,978],[320,16,979],[319,980],320,319,320,320,319,320,319,320,319,320,319,320,319,320,319,339,339,339,339,[339,971],[319,15,972],[320,16,957],[319,35,973],[320,36,974],[299,15,978],[300,15,957],[359,16,979],[400,980],[400,1841],[400,1842],[400,1843],400,400,400,400,400,400,400,400,400,359,359,400,400,400,400,400,400,400,400,[400,1011],[299,1012],300,300,299,300,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547],[4,1547],[4,1548],[4,1646],[4,1647],[4,1648],[4,1548],[4,1547],[4,1548],[4,1549],[4,1550],4,4,4,4,4,4,4,4,0,0,300,299,[300,1019],[299,1020],300,299,300,299,300,299,300,300,299,300,299,300,299,300,299,400,359,[359,1011],[359,35,1012],[359,16],[340,35],[300,36],[299,35],[300,36],[319,15],[320,35],[300,36,1019],[299,1020],300,299,300,300,299,300,299,300,299,300,299,300,299,300,299,400,359,359,359,[359,991],[340,35,992],[300,36],[299,35],[300,36],[319,15],[320,35],[319,36,1019],[320,1020],[319,1861],[320,1862],[400,1863],[359,1864],[359,1865],340,300,300,319,320,319,320,299,300,319,320,319,320,299,300,299,300,[299,1011],[319,1012],320,320,319,320,320,300,300,300,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,299,300,[319,978],[320,979],[319,980],320,319,335,336,320,319,320,319,320,335,336,319,339,339,400,359,[359,1031],[359,1032],[359,36,1033],[360,15],[340,16],[319,15],[320,16],[299,15],[300,35,1038],[319,36,1039],[320,1040],319,320,319,335,336,320,319,320,319,320,335,336,319,339,339,400,359,359,359,[359,1011],[360,15,1012],[340,16],[319,15],[320,16,1038],[299,35,1056],[300,35,1057],[319,36,1039],[320,1040],[319,1881],[320,1882],[380,1883],[359,1884],[359,1885],340,300,320,319,320,335,336,319,339,339,400,359,359,359,359,360,[340,971],[319,972],[320,973],299,300,299,300,300,320,320,320,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1447],[4,1448],[4,1449],[4,1446],[4,1447],[4,1446],[4,1447],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,319,320,[299,998],[300,999],[299,1000],300,299,355,356,300,299,300,299,300,355,356,339,400,359,359,359,[359,1051],[359,1052],[359,35,1012],[359,35],[360,36],[299,35],[300,36],[319,35,1038],[320,36,1058],[299,312,1059],[300,313,1060],299,300,299,355,356,300,299,300,299,300,355,356,339,400,359,359,359,359,359,[359,1031],[359,35,1053],[360,36,1056],[299,35,1057],[300,36,1039],[319,1076],[320,1077],[299,1059],[300,1060],[299,1901],[300,1902],[320,1903],379,379,319,320,300,299,300,355,356,339,400,359,359,359,359,359,359,359,[360,1011],[299,1012],300,319,320,319,320,320,300,300,300,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1466,1467,1467,1468,1467,1468,1467,1468,1467,1468,1469,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,299,300,319,[320,1019],[319,1020],320,319,320,319,320,319,339,339,339,339,[339,312],[400,313],359,359,359,359,[359,1071],[359,1011],[359,16,1012],[359,15,1833],[359,16,1834],[299,15,1835],[300,16],[299,36,1019],[300,1059],[319,1060],320,319,320,319,320,319,320,319,339,339,339,339,339,400,359,359,359,359,359,359,[359,1051],[359,1073],[359,1076],[360,1077],[320,1059],[299,1096],[300,1097],[319,1060],320,319,320,300,299,300,299,300,339,339,339,339,339,400,359,359,359,359,359,359,359,359,[359,1011],[299,1012],300,299,300,320,299,300,320,320,320,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,1488,1487,1488,1487,1488,1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1448],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,4,0,0,319,320,299,[300,999],[299,1000],300,299,300,339,339,339,400,359,359,359,359,359,359,359,359,359,359,[359,1011],[359,36,1012],[359,35,1853],[359,36,1854],[319,35,1855],[320,36],[319,16,1019],[320,1020],299,[300,1846],299,300,299,300,339,339,339,400,359,359,359,359,359,359,359,359,359,359,359,[359,1071],[359,1093],[359,1096],[359,1097],[340,1079],[319,1080],320,299,300,299,300,299,300,339,339,339,400,359,359,359,359,359,359,359,359,359,[359,481],[359,482],359,359,[359,1011],[319,1012],320,319,320,300,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,[1507,825],[1508,826],[1507,826],[1508,826],[1507,826],[1508,826],[1507,827],1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],[4,1466],[4,1467],[4,1468],[4,1468],[4,1469],[4,1470],4,4,4,4,4,4,4,4,4,4,0,0,299,300,319,[320,1019],[319,1020],339,319,320,359,359,359,359,359,359,359,359,359,359,359,[359,1821],[359,1822],[359,1823],[359,1011],[359,16,1012],[359,15,1034],[359,16,1035],[299,15,1036],[300,16,1037],[299,36,1019],[300,1020],319,320,319,339,319,320,359,359,359,359,359,359,359,[359,1821],[359,1822],[359,1823],359,359,359,359,359,359,359,359,359,340,299,300,319,320,319,339,319,320,359,[359,1826],359,359,359,359,359,359,359,359,359,359,359,[359,501],[359,502],359,359,[359,1011],[319,1012],320,[299,312],[300,313],300,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1525],1486,1487,[1487,845],[1488,846],[1487,846],[1488,846],[1487,846],[1488,846],[1487,847],1488,1489,[4,1530],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],[4,1486],1487,1487,1488,[4,1489],[4,1490],4,4,4,4,4,4,4,4,4,4,0,0,319,320,[299,1038],[300,1039],[299,1040],359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1841],[359,1842],[359,1843],[359,1031],[359,36,1053],[359,35,1054],[359,36,1351],[319,35,1352],[320,36,1353],[319,36,1058],[320,1040],299,300,299,359,359,359,359,359,359,359,359,359,359,[359,1841],[359,1842],[359,1843],359,[359,312],[359,313],359,359,359,359,359,359,340,319,320,299,300,299,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1031],[299,1032],[300,1033,1033],[319,1034],[320,1035],320,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1506,1507,[1507,845],[1508,846],[1507,846],[1508,846],[1507,846],[1508,846],[1507,847],1508,1509,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],[4,1506],1487,1488,1488,[4,1509],[4,1510],4,4,4,4,4,4,4,4,4,4,0,0,299,[300,1038],[319,1058],[320,1059],[359,1060],359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864,1051],[359,1865,1073],[359,1074],[359,1371],[359,1372],[340,1373],[299,1078],[300,1060],319,320,359,359,359,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865],359,359,[359,1826],359,359,359,359,340,299,300,319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1051],[319,1052],[320,1053,1053],[299,1054,1054],[300,1055],[320,1054],[299,1055],[300,1054],[319,1055],[320,1054],[319,1055],[320,1056],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,[1487,865],[1488,866],[1487,866],[1488,866],[1487,866],[1488,866],[1487,867],1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],[4,1506],1507,1508,1508,[4,1509],[4,1510],4,4,4,4,4,4,4,4,4,4,0,0,[319,1038],[320,1039],[359,1078],[359,1079],359,359,359,359,359,359,359,400,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885,1093],[359,1094],[359,1391],[359,1392],[340,1393],[319,1098],320,359,359,359,359,359,359,359,359,359,400,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885],359,359,359,359,359,359,359,340,319,320,359,359,359,359,359,359,359,[359,312],[359,313],400,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1071],[359,1072],[340,1073,1073],[319,1074,1074],[320,1075],[300,1074],[319,1075],[320,1074],[299,1075],[300,1074],[299,1075],[300,1076],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1506,1507,1507,1508,1507,1508,1507,1508,1507,1508,1509,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1525],[4,1526],[4,1626],[1488,1627],[1487,1628],[1487,1529],[4,1530],4,4,4,4,4,4,4,4,4,4,0,0,[299,999],[300,1059],[359,1098],400,400,400,400,400,400,400,400,400,400,400,400,400,359,359,400,[400,1901],[400,1902],[400,1903],400,400,400,400,400,340,299,300,359,400,400,400,400,400,400,400,400,400,400,400,400,[400,1901],[359,1902],[359,1903],400,400,400,400,400,400,400,400,400,340,299,300,359,400,400,400,400,400,400,400,400,400,400,400,400,400,359,359,400,400,400,400,400,400,400,[400,1091],[400,1092],[340,1093,1093],[299,1094,1094],[300,1095],[320,1094],[299,1095],[300,1094],[319,1095],[320,1094],[319,1095],[320,1096],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,1488,1487,1488,1487,1488,1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1646],[4,1647],[4,1648],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,4,0,0,[319,1019],[320,1020],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1826,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[299,1781],[300,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[299,1781],[300,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[299,1781],[300,1781],[299,1781],[300,1781],[319,1781],[320,1781],1781,1781,1781,1781,1781,1781,1781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,1508,[1507,1606],[1508,1607],[1507,1608],1508,1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[299,999],[1800,1000],1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1525],1526,1527,1527,1528,[1487,1626],[1488,1627],[1487,1628],1528,1527,1528,1529,[4,1530],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[300,1019],[1820,1800,1020],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547],[4,1547],[4,1548],[4,1646],[4,1647],[4,1648],[4,1548],[4,1547],[4,1548],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[300,1039],[1820,1040],1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[406,1059],[1820,1060],1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1820,1079],1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1304],[4,1747],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[552,1368],[552,1385],[552,1767],[552,1387],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1368],[572,1388],552,572,552,[552,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[553,1349],[552,1388],553,460,572,572,552,[552,1362],[553,1342],[4,1302],4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[573,1290],572,573,553,552,553,480,572,[573,1301],[4,1302],4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],572,573,572,573,[552,1222],[553,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1228],[553,1163],[460,1164],[553,1165],[572,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1183],[572,1184],[573,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],\"high\":[5,18,19,20,44,45,46,47,48,49,50,51,61,62,64,65,70,71,82,84,85,90,91,101,102,104,105,110,111,122,131,141,142,143,151,163,171,183,206,207,208,213,214,215,216,225,226,227,228,229,233,234,235,236,244,245,246,247,248,249,250,253,254,255,256,264,265,266,267,268,269,270,271,273,274,275,276,281,282,285,290,291,293,296,301,302,305,310,311,324,325,330,331,332,333,345,350,351,352,353,371,382,401,402,403,481,482,602,618,619,621,622,623,637,638,639,640,657,658,659,660,677,678,679,680,685,701,702,703,704,705,721,722,723,724,725,741,742,743,744,745,757,758,759,765,781,783,784,795,801,804,814,815,816,834,835,836,854,855,856,885,886,887,1102,1105,1122,1184,1204,1443,1444,1455,1456,1474,1475,1476,1477,1493,1494,1495,1496,1497,1498,1512,1513,1514,1515,1516,1517,1518,1519,1532,1533,1538,1539,1552,1553,1558,1559,1561,1562,1563,1572,1579,1581,1582,1583,1584,1599,1601,1602,1603,1604,1605,1619,1622,1623,1624,1627,1647,1666,1667,1669,1670,1671,1678,1679,1680,1698,1699,1700,1718,1719,1720,1821,1822,1823,1841,1842,1843,1857,1858,1859,1861,1862,1863,1864,1865,1881,1882,1883,1884,1885,1903],\"animated\":{\"1\":{\"l\":3},\"241\":{\"l\":3},\"606\":{\"d\":500,\"l\":3},\"626\":{\"d\":500,\"l\":2},\"646\":{\"d\":500,\"l\":2},\"706\":{\"l\":4},\"726\":{\"l\":4},\"748\":{\"d\":500,\"l\":2},\"1001\":{\"l\":4},\"1021\":{\"l\":4},\"1041\":{\"l\":4},\"1061\":{\"l\":4},\"1236\":{\"d\":200,\"l\":5},\"1237\":{\"l\":4},\"1251\":{\"l\":6},\"1257\":{\"l\":4},\"1271\":{\"l\":6},\"1291\":{\"l\":4},\"1311\":{\"l\":4},\"1331\":{\"l\":4},\"1401\":{\"l\":10},\"1411\":{\"l\":7},\"1418\":{\"d\":200,\"l\":3},\"1421\":{\"l\":7},\"1428\":{\"l\":8},\"1501\":{\"l\":3},\"1521\":{\"l\":3},\"1586\":{\"l\":4},\"1721\":{\"l\":3},\"1741\":{\"l\":3},\"1747\":{\"l\":3},\"1781\":{\"l\":19},\"1801\":{\"l\":19},\"1886\":{\"l\":8},\"1906\":{\"l\":8},\"1914\":{\"l\":7},\"1921\":{\"l\":15}},\"blocking\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,55,56,57,58,59,60,61,62,63,64,65,68,69,70,71,72,73,74,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,110,111,112,113,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,199,200,201,202,203,204,205,206,207,208,209,210,211,212,221,222,226,227,228,234,235,236,237,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,284,285,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,376,377,378,379,438,439,449,450,452,457,516,517,518,527,528,574,575,599,618,619,620,621,622,623,625,626,627,629,688,689,715,716,724,730,731,743,744,745,746,751,752,757,758,760,761,771,772,778,779,780,799,801,875,876,896,897,907,923,924,938,939,940,941,942,971,1046,1062,1063,1099,1112,1113,1142,1143,1271,1277,1314,1315,1317,1399,1400,1489,1570,1571,1572,1573,1612,1613,1625,1626,1656,1661,1743,1744,1783,1784,1785,1786,1796,1797,1798,1799,1828,1833,1955,1956,1957,1958,1967,1968,1969,1970,1971,1999,2000,2005,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2171,2172,2176,2177,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2343,2344,2348,2349,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2514,2515,2518,2521,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2686,2690,2693,2752,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2858,2862,2863,2865,2924,2925,2975,2976,2991,2992,2993,2994,2995,2996,2997,2998,2999,3034,3035,3037,3096,3097,3146,3147,3148,3149,3163,3164,3165,3166,3167,3168,3169,3170,3171,3206,3207,3209,3268,3269,3319,3320,3336,3337,3338,3339,3340,3341,3342,3369,3370,3378,3379,3381,3440,3441,3540,3541,3542,3543,3547,3552,3553,3612,3713,3714,3719,3720,3724,3725,3784,3891,3892,3893,3897,3956,4064,4065,4066,4069,4128,4237,4238,4241,4300,4410,4413,4472,4582,4585,4644,4754,4757,4816,4929,4988,5101,5249,5250,5251,5252,5273,5358,5370,5371,5420,5421,5422,5423,5424,5425,5444,5445,5527,5541,5542,5593,5594,5595,5596,5616,5617,5698,5789,5959,5961,6129,6130,6131,6133,6301,6302,6303,6305,6473,6474,6476,6477,6645,6646,6648,6649,6817,6818,6820,6821,6992,6993,7052,7061,7159,7163,7164,7165,7224,7233,7239,7240,7241,7242,7243,7244,7332,7335,7336,7337,7396,7411,7412,7413,7414,7415,7508,7509,7568,7680,7681,7740,7741,7850,7852,7853,7912,7913,8022,8024,8025,8084,8085,8194,8196,8197,8366,8368,8369,8396,8397,8398,8399,8422,8423,8424,8425,8540,8541,8568,8569,8570,8595,8596,8597,8600,8711,8712,8713,8740,8741,8768,8769,8883,8884,8885,8912,8913,8940,8941,9056,9057,9084,9085,9112,9113,9215,9216,9228,9229,9256,9257,9284,9285,9387,9388,9400,9401,9428,9429,9456,9457,9483,9484,9572,9573,9600,9601,9628,9629,9660,9661,9662,9744,9745,9772,9773,9799,9800,9801,9804,9805,9806,9807,9808,9890,9891,9900,9901,9902,9915,9916,9917,9944,9945,9946,9971,9972,9973,9980,9981,10062,10063,10071,10072,10085,10086,10087,10088,10089,10116,10117,10118,10119,10143,10144,10145,10148,10149,10150,10153,10154,10234,10235,10246,10247,10248,10249,10255,10256,10257,10258,10259,10260,10261,10288,10289,10290,10315,10316,10317,10320,10321,10322,10323,10326,10327,10405,10406,10407,10411,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,10430,10431,10432,10433,10460,10461,10462,10487,10488,10489,10492,10493,10494,10495,10496,10498,10499,10500,10577,10580,10581,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10632,10633,10634,10659,10660,10661,10664,10665,10666,10667,10668,10670,10671,10672,10749,10750,10751,10755,10756,10804,10805,10806,10830,10831,10832,10833,10836,10837,10838,10839,10842,10843,10844,10921,10922,10923,10924,10925,10926,10927,10928,10976,10977,10978,11002,11003,11004,11005,11008,11009,11010,11014,11015,11016,11093,11096,11097,11098,11099,11100,11148,11149,11150,11175,11176,11177,11185,11186,11187,11269,11270,11271,11272,11320,11321,11322,11347,11348,11349,11356,11357,11358,11438,11439,11440,11441,11442,11443,11444,11492,11493,11494,11519,11520,11521,11524,11525,11526,11527,11609,11610,11611,11612,11613,11614,11615,11616,11664,11665,11666,11691,11692,11693,11696,11697,11698,11781,11782,11783,11784,11785,11786,11787,11788,11836,11837,11838,11863,11864,11865,11953,11954,11955,11956,11957,11958,11959,11960,12008,12009,12010,12035,12036,12037,12125,12126,12127,12128,12129,12130,12131,12132,12180,12181,12182,12207,12208,12209,12212,12297,12298,12299,12300,12301,12302,12303,12304,12352,12353,12354,12379,12380,12381,12469,12470,12471,12472,12473,12474,12475,12476,12524,12525,12526,12527,12528,12529,12530,12537,12538,12539,12540,12541,12547,12548,12549,12550,12551,12552,12553,12641,12642,12643,12644,12645,12646,12647,12648,12696,12697,12698,12699,12704,12705,12706,12707,12708,12709,12710,12711,12712,12713,12714,12715,12716,12717,12720,12721,12722,12723,12724,12725,12813,12814,12815,12816,12817,12818,12819,12820,12984,12985,12986,12987,12988,12989,12990,12991,12992,13156,13157,13158,13159,13160,13161,13162,13163,13164,13328,13329,13330,13331,13332,13333,13334,13335,13336,13500,13501,13502,13503,13504,13505,13506,13507,13508,13588,13672,13673,13674,13675,13676,13677,13678,13679,13680,13760,13845,13846,13847,13848,13849,13850,13851,13852,13932,14017,14018,14019,14020,14021,14022,14023,14024,14104,14105,14189,14190,14191,14192,14193,14194,14195,14196,14276,14277,14361,14362,14363,14364,14365,14366,14367,14368,14448,14449,14533,14534,14535,14536,14537,14538,14539,14540,14620,14621,14705,14706,14707,14708,14709,14710,14711,14712,14792,14793,14794,14876,14877,14878,14879,14880,14881,14882,14883,14884,14964,14965,14966,15048,15049,15050,15051,15052,15053,15054,15055,15056,15136,15137,15138,15219,15220,15221,15222,15223,15224,15225,15226,15227,15228,15308,15309,15310,15390,15391,15392,15393,15394,15395,15396,15397,15398,15399,15400,15480,15481,15482,15562,15563,15564,15565,15566,15567,15568,15569,15570,15571,15572,15652,15653,15654,15655,15734,15735,15736,15737,15738,15739,15740,15741,15742,15743,15744,15824,15825,15826,15827,15828,15906,15907,15908,15909,15910,15911,15912,15913,15914,15915,15916,15996,15997,15998,15999,16000,16078,16079,16080,16081,16082,16083,16084,16085,16086,16087,16088,16168,16169,16170,16171,16249,16250,16251,16252,16253,16254,16255,16256,16257,16258,16259,16260,16340,16341,16342,16343,16421,16422,16423,16424,16425,16426,16427,16428,16429,16430,16431,16432,16512,16513,16514,16515,16593,16594,16595,16596,16597,16598,16599,16600,16601,16602,16603,16604,16684,16685,16686,16687,16766,16767,16768,16769,16770,16771,16772,16773,16774,16775,16776,16856,16857,16858,16859,16939,16940,16941,16942,16943,16944,16945,16946,16947,16948,17028,17029,17030,17031,17114,17115,17116,17117,17118,17119,17120,17200,17201,17202,17203,17286,17287,17288,17289,17290,17291,17292,17372,17373,17374,17375,17456,17461,17462,17463,17464,17544,17545,17546,17547,17548,17629,17630,17716,17717,17718,17719,17720,17721,17801,17802,17803,17804,17888,17889,17890,17891,17892,17893,17973,17974,17975,17976,17977,17978,17979,17980,18060,18061,18062,18063,18064,18065,18145,18146,18147,18148,18149,18150,18151,18152,18232,18233,18234,18235,18236,18237,18238,18317,18318,18319,18320,18321,18322,18323,18324,18404,18405,18406,18407,18408,18409,18410,18411,18489,18490,18491,18492,18493,18494,18495,18496,18576,18577,18578,18579,18580,18581,18582,18583,18584,18660,18661,18662,18663,18664,18665,18666,18667,18668,18748,18749,18750,18751,18752,18753,18754,18755,18756,18832,18833,18834,18835,18836,18837,18838,18839,18840,18920,18921,18922,18923,18924,18925,18926,18927,18928,19004,19005,19006,19007,19008,19009,19010,19011,19012,19092,19093,19094,19095,19096,19097,19098,19099,19176,19177,19178,19179,19180,19181,19182,19183,19184,19264,19265,19266,19267,19268,19269,19348,19349,19350,19351,19352,19353,19354,19355,19356,19394,19395,19436,19437,19438,19439,19440,19441,19520,19521,19522,19523,19524,19525,19526,19527,19528,19608,19609,19610,19611,19612,19613,19692,19693,19694,19695,19696,19697,19698,19699,19700,19780,19781,19782,19783,19784,19864,19865,19866,19867,19868,19869,19870,19871,19872,19952,19953,19954,19955,19956,20036,20037,20038,20039,20040,20041,20042,20043,20044,20124,20125,20126,20127,20128,20207,20208,20209,20210,20211,20212,20213,20214,20215,20216,20296,20297,20298,20299,20300,20378,20379,20380,20381,20382,20383,20384,20385,20386,20387,20388,20468,20469,20470,20471,20549,20550,20551,20552,20553,20554,20555,20556,20557,20558,20559,20560,20640,20641,20642,20643,20721,20722,20723,20724,20725,20726,20727,20728,20729,20730,20731,20732,20812,20813,20814,20815,20894,20895,20896,20897,20898,20899,20900,20901,20902,20903,20904,20984,20985,20986,20987,21067,21068,21069,21070,21071,21072,21073,21074,21075,21076,21156,21157,21158,21159,21240,21241,21242,21243,21244,21245,21246,21247,21248,21328,21329,21330,21331,21412,21413,21414,21415,21416,21417,21418,21419,21420,21500,21501,21502,21503,21584,21585,21586,21587,21588,21589,21590,21591,21592,21672,21673,21674,21675,21756,21757,21758,21759,21760,21761,21762,21763,21764,21844,21845,21846,21847,21928,21929,21930,21931,21932,21933,21934,21935,21936,22016,22017,22018,22019,22020,22101,22102,22103,22104,22105,22106,22107,22108,22188,22189,22190,22191,22192,22273,22274,22275,22276,22277,22278,22279,22280,22360,22361,22362,22363,22364,22445,22446,22447,22448,22449,22450,22451,22452,22532,22533,22534,22535,22617,22618,22619,22620,22621,22622,22623,22624,22704,22705,22706,22707,22789,22790,22791,22792,22793,22794,22795,22796,22876,22877,22878,22879,22960,22961,22962,22963,22964,22965,22966,22967,22968,23048,23049,23050,23051,23131,23132,23133,23134,23135,23136,23137,23138,23139,23140,23220,23221,23222,23223,23303,23304,23305,23306,23307,23308,23309,23310,23311,23312,23392,23393,23394,23395,23475,23476,23477,23478,23479,23480,23481,23482,23483,23484,23564,23565,23566,23567,23647,23648,23649,23650,23651,23652,23653,23654,23655,23656,23736,23737,23738,23739,23819,23820,23821,23822,23823,23824,23825,23826,23827,23828,23908,23909,23910,23911,23991,23992,23993,23994,23995,23996,23997,23998,23999,24000,24080,24081,24082,24083,24084,24164,24165,24166,24167,24168,24169,24170,24171,24172,24252,24253,24254,24255,24256,24337,24338,24339,24340,24341,24342,24343,24344,24424,24425,24426,24427,24428,24596,24597,24598,24599,24768,24769,24770,24852,24853,24854,24855,24856,24857,24858,24859,24860,24940,24941,25025,25026,25027,25028,25029,25030,25031,25032,25197,25198,25199,25200,25201,25202,25203,25204,25287,25369,25370,25371,25372,25373,25374,25375,25376,25456,25457,25458,25459,25541,25542,25543,25544,25545,25546,25547,25548,25628,25629,25630,25631,25713,25714,25715,25716,25717,25718,25719,25720,25800,25801,25802,25803,25884,25885,25886,25887,25888,25889,25890,25891,25892,25972,25973,25974,26056,26057,26058,26059,26060,26061,26062,26063,26064,26144,26145,26146,26229,26230,26231,26232,26233,26234,26235,26236,26316,26317,26318,26401,26402,26403,26404,26405,26406,26407,26408,26488,26489,26490,26573,26574,26575,26576,26577,26578,26579,26580,26660,26661,26745,26746,26747,26748,26749,26750,26751,26752,26832,26833,26917,26918,26919,26920,26921,26922,26923,26924,27004,27089,27090,27091,27092,27093,27094,27095,27096,27176,27261,27262,27263,27264,27265,27266,27267,27268,27348,27432,27433,27434,27435,27436,27437,27438,27439,27440,27520,27604,27605,27606,27607,27608,27609,27610,27611,27612,27692,27693,27777,27778,27779,27780,27781,27782,27783,27784,27864,27865,27949,27950,27951,27952,27953,27954,27955,27956,28036,28121,28122,28123,28124,28125,28126,28127,28128,28208,28293,28294,28295,28296,28297,28298,28299,28300,28380,28465,28466,28467,28468,28469,28470,28471,28472,28552,28637,28638,28639,28640,28641,28642,28643,28644,28724,28809,28810,28811,28812,28813,28814,28815,28816,28896,28981,28982,28983,28984,28985,28986,28987,28988,29068,29069,29153,29154,29155,29156,29157,29158,29159,29160,29240,29241,29242,29324,29325,29326,29327,29328,29329,29330,29331,29332,29412,29413,29414,29415,29495,29496,29497,29498,29499,29500,29501,29502,29503,29504,29584,29585,29586,29587,29667,29668,29669,29670,29671,29672,29673,29674,29675,29676,29756,29757,29758,29759,29839,29840,29841,29842,29843,29844,29845,29846,29847,29848,29928,29929,29930,29931,30010,30011,30012,30013,30014,30015,30016,30017,30018,30019,30020,30100,30101,30102,30182,30183,30184,30185,30186,30187,30188,30189,30190,30191,30192,30272,30273,30355,30356,30357,30358,30359,30360,30361,30362,30363,30364,30444,30445,30527,30528,30529,30530,30531,30532,30533,30534,30535,30536,30616,30617,30699,30700,30701,30702,30703,30704,30705,30706,30707,30708,30788,30789,30871,30872,30873,30874,30875,30876,30877,30878,30879,30880,30960,30961,31044,31045,31046,31047,31048,31049,31050,31051,31052,31132,31133,31216,31217,31218,31219,31220,31221,31222,31223,31224,31304,31305,31306,31388,31389,31390,31391,31392,31393,31394,31395,31396,31476,31477,31478,31560,31561,31562,31563,31564,31565,31566,31567,31568,31648,31649,31733,31734,31735,31736,31737,31738,31739,31740,31820,31821,31905,31906,31907,31908,31909,31910,31911,31912,31992,31993,32078,32079,32080,32081,32082,32083,32084,32164,32165,32250,32251,32252,32253,32254,32255,32256,32336,32422,32423,32424,32425,32426,32427,32428,32594,32595,32596,32597,32598,32599,32600,33595,33596,33597,33604,33605,33606,33607,33608,33609,33613,33614,33615,33616,33617,33618,33619,33620,33621,33622,33712,33768,33787,33788,33789,33790,33791,33792,33795,33796,33797,33798,33799,33800,33801,33802,33803,33804,33884,33885,33970,33971,33972,33973,33974,33975,33976,34056,34057,34139,34140,34141,34142,34143,34144,34145,34146,34147,34148,34228,34229,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34400,34482,34483,34484,34485,34486,34487,34488,34489,34490,34491,34492,34572,34655,34656,34657,34658,34659,34660,34661,34662,34663,34664,34744,34828,34829,34830,34831,34832,34833,34834,34835,34836,34916,35001,35002,35003,35004,35005,35006,35007,35008,35088,35089,35090,35173,35174,35175,35176,35177,35178,35179,35180,35260,35261,35262,35263,35264,35265,35266,35345,35346,35347,35348,35349,35350,35351,35352,35432,35433,35434,35435,35436,35437,35438,35439,35517,35518,35519,35520,35521,35522,35523,35524,35604,35605,35606,35607,35608,35609,35610,35611,35688,35689,35690,35691,35692,35693,35694,35695,35696,35776,35777,35778,35779,35780,35781,35782,35783,35784,35861,35862,35863,35864,35865,35866,35867,35868,35948,35949,35950,35951,35952,35953,35954,35955,35956,36031,36034,36035,36036,36037,36038,36039,36040,36120,36121,36122,36123,36124,36125,36126,36127,36128,36203,36206,36207,36208,36209,36210,36211,36212,36292,36293,36294,36295,36296,36297,36298,36299,36378,36379,36380,36381,36382,36383,36384,36464,36465,36466,36467,36468,36469,36470,36549,36550,36551,36552,36553,36554,36555,36556,36636,36637,36638,36639,36721,36722,36723,36724,36725,36726,36727,36728,36808,36809,36810,36893,36894,36895,36896,36897,36898,36899,36900,36980,36981,36982,37064,37065,37066,37067,37068,37069,37070,37071,37072,37152,37153,37154,37235,37236,37237,37238,37239,37240,37241,37242,37243,37244,37324,37325,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37496,37497,37580,37581,37582,37583,37584,37585,37586,37587,37588,37668,37669,37753,37754,37755,37756,37757,37758,37759,37760,37840,37841,37925,37926,37927,37928,37929,37930,37931,37932,38012,38097,38098,38099,38100,38101,38102,38103,38104,38184,38269,38270,38271,38272,38273,38274,38275,38276,38356,38441,38442,38443,38444,38445,38446,38447,38448,38528,38612,38613,38614,38615,38616,38617,38618,38619,38620,38700,38783,38784,38785,38786,38787,38788,38789,38790,38791,38792,38872,38957,38958,38959,38960,38961,38962,38963,38964,39044,39128,39129,39130,39131,39132,39133,39134,39135,39136,39297,39299,39300,39301,39302,39303,39304,39305,39306,39307,39308,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39641,39642,39643,39644,39645,39646,39647,39648,39649,39650,39651,39652,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,39996,40161,40162,40163,40164,40165,40166,40167,40168,40334,40335,40336,40337,40338,40339,40340,40506,40507,40508,40509,40510,40511,40512,40678,40679,40680,40681,40682,40683,40684,40764,40770,40850,40851,40852,40853,40854,40855,40856,40936,40937,40938,40939,40940,40941,40942,40943,41022,41023,41024,41025,41026,41027,41028,41108,41109,41110,41111,41112,41113,41114,41115,41193,41194,41195,41196,41197,41198,41199,41200,41280,41281,41282,41283,41284,41285,41286,41287,41365,41366,41367,41368,41369,41370,41371,41372,41452,41453,41454,41455,41456,41457,41458,41459,41537,41538,41539,41540,41541,41542,41543,41544,41624,41625,41626,41627,41709,41710,41711,41712,41713,41714,41715,41716,41796,41797,41798,41881,41882,41883,41884,41885,41886,41887,41888,41968,41969,42053,42054,42055,42056,42057,42058,42059,42060,42140,42141,42225,42226,42227,42228,42229,42230,42231,42232,42312,42313,42397,42398,42399,42400,42401,42402,42403,42404,42484,42485,42569,42570,42571,42572,42573,42574,42575,42576,42656,42657,42741,42742,42743,42744,42745,42746,42747,42748,42828,42829,42913,42914,42915,42916,42917,42918,42919,42920,43000,43001,43002,43085,43086,43087,43088,43089,43090,43091,43092,43172,43173,43174,43257,43258,43259,43260,43261,43262,43263,43264,43344,43345,43346,43429,43430,43431,43432,43433,43434,43435,43436,43516,43517,43518,43601,43602,43603,43604,43605,43606,43607,43608,43688,43689,43690,43773,43774,43775,43776,43777,43778,43779,43780,43860,43861,43862,43863,43945,43946,43947,43948,43949,43950,43951,43952,44032,44033,44034,44035,44036,44117,44118,44119,44120,44121,44122,44123,44124,44204,44205,44206,44207,44208,44209,44289,44290,44291,44292,44293,44294,44295,44296,44376,44377,44378,44379,44380,44381,44461,44462,44463,44464,44465,44466,44467,44468,44548,44549,44550,44551,44552,44632,44633,44634,44635,44636,44637,44638,44639,44640,44720,44721,44722,44723,44804,44805,44806,44807,44808,44809,44810,44811,44812,44892,44893,44894,44977,44978,44979,44980,44981,44982,44983,44984,45064,45065,45149,45150,45151,45152,45153,45154,45155,45156,45236,45237,45263,45264,45321,45322,45323,45324,45325,45326,45327,45328,45408,45409,45433,45434,45435,45436,45437,45438,45493,45494,45495,45496,45497,45498,45499,45500,45580,45581,45604,45605,45606,45607,45608,45609,45610,45611,45665,45666,45667,45668,45669,45670,45671,45672,45752,45753,45776,45777,45778,45779,45780,45781,45782,45837,45838,45839,45840,45841,45842,45843,45844,45924,45925,45949,45950,45951,45952,45953,46009,46010,46011,46012,46013,46014,46015,46016,46096,46097,46121,46122,46123,46124,46181,46182,46183,46184,46185,46186,46187,46188,46268,46269,46293,46294,46295,46296,46352,46353,46354,46355,46356,46357,46358,46359,46360,46440,46441,46466,46467,46523,46524,46525,46526,46527,46528,46529,46530,46531,46532,46612,46613,46695,46696,46697,46698,46699,46700,46701,46702,46703,46704,46784,46785,46786,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46956,46957,46958,47039,47040,47041,47042,47043,47044,47045,47046,47047,47048,47128,47129,47211,47212,47213,47214,47215,47216,47217,47218,47219,47220,47300,47301,47382,47383,47384,47385,47386,47387,47388,47389,47390,47391,47392,47472,47473,47553,47554,47555,47556,47557,47558,47559,47560,47561,47562,47563,47564,47644,47645,47725,47726,47727,47728,47729,47730,47731,47732,47733,47734,47735,47736,47816,47817,47897,47898,47899,47900,47901,47902,47903,47904,47905,47906,47907,47908,47988,47989,48069,48070,48071,48072,48073,48074,48075,48076,48077,48078,48079,48080,48160,48161,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48332,48333,48413,48414,48415,48416,48417,48418,48419,48420,48421,48422,48423,48424,48504,48505,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48596,48676,48677,48757,48758,48759,48760,48761,48762,48763,48764,48765,48766,48767,48768,48848,48849,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,49020,49021,49103,49104,49105,49106,49107,49108,49109,49110,49111,49112,49192,49193,49194,49247,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49364,49365,49366,49417,49418,49419,49420,49421,49447,49448,49449,49450,49451,49452,49453,49454,49455,49456,49536,49537,49538,49588,49589,49590,49591,49592,49593,49594,49619,49620,49621,49622,49623,49624,49625,49626,49627,49628,49708,49709,49710,49760,49761,49762,49763,49764,49765,49791,49792,49793,49794,49795,49796,49797,49798,49799,49800,49880,49881,49882,49883,49933,49934,49962,49963,49964,49965,49966,49967,49968,49969,49970,49971,49972,50052,50053,50054,50055,50134,50135,50136,50137,50138,50139,50140,50141,50142,50143,50144,50224,50225,50226,50227,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50396,50397,50398,50399,50478,50479,50480,50481,50482,50483,50484,50485,50486,50487,50488,50568,50569,50570,50650,50651,50652,50653,50654,50655,50656,50657,50658,50659,50660,50740,50741,50823,50824,50825,50826,50827,50828,50829,50830,50831,50832,50912,51084,51256,51341,51342,51343,51344,51345,51346,51347,51348,51428,51600],\"plateau\":[587,759,931,1103,1275,1447,1616,1617,1618,1619,1620,1621,1622,1788,1789,1790,1791,1792,1793,1794,1963,2933,3104,3105,3106,3275,3276,3277,3278,3279,3447,3448,3449,3450,3451,3620,3621,3622,6958,7129,7130,7131,7302,7303,7304,7474,7475,7476,7646,7647,7648,7819,9036,9205,9206,9207,9208,9209,9210,9211,9377,9378,9379,9380,9381,9382,9383,9551,9552,9553,9554,9555,9724,12582,12583,12584,12585,12586,12753,12754,12755,12756,12757,12758,12759,12924,12925,12926,12927,12928,12929,12930,12931,12932,12953,12954,12955,12956,13087,13095,13096,13097,13098,13099,13100,13101,13102,13103,13104,13124,13125,13126,13127,13128,13129,13258,13259,13260,13263,13266,13267,13268,13269,13270,13271,13272,13273,13274,13275,13297,13298,13299,13300,13301,13302,13303,13429,13430,13431,13432,13433,13434,13435,13436,13437,13438,13439,13440,13441,13442,13443,13444,13445,13446,13470,13471,13472,13473,13474,13475,13476,13600,13601,13602,13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618,13644,13645,13646,13647,13648,13649,13772,13773,13774,13775,13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13818,13819,13820,13943,13944,13945,13946,13947,13948,13949,13950,13951,13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13976,13977,13978,14114,14115,14116,14117,14118,14119,14120,14121,14122,14123,14124,14125,14126,14127,14128,14129,14130,14131,14132,14133,14147,14148,14149,14150,14151,14287,14288,14289,14290,14291,14292,14293,14294,14295,14296,14297,14298,14299,14300,14301,14302,14303,14304,14318,14319,14320,14321,14322,14323,14324,14325,14464,14465,14466,14467,14490,14491,14661,14662,14663,14665,14666,14667,14668,14669,14670,14671,14833,14834,14836,14837,14838,14839,14840,14841,14842,14843,14844,15005,15007,15008,15009,15010,15011,15012,15013,15014,15015,15016,15017,15177,15179,15180,15181,15182,15183,15184,15185,15186,15187,15188,15189,15348,15349,15351,15352,15353,15354,15355,15356,15357,15358,15359,15360,15361,15520,15521,15524,15525,15526,15527,15528,15529,15530,15531,15532,15533,15691,15692,15693,15697,15698,15699,15700,15701,15702,15703,15705,15861,15862,15863,15864,15865,15866,15871,15876,16032,16033,16034,16035,16036,16037,16038,16039,16043,16047,16048,16059,16060,16204,16205,16206,16207,16208,16209,16210,16211,16212,16213,16214,16215,16216,16217,16218,16219,16230,16231,16232,16233,16376,16377,16378,16379,16380,16381,16382,16383,16384,16385,16386,16387,16388,16389,16390,16402,16403,16404,16405,16406,16548,16549,16550,16551,16552,16553,16554,16555,16556,16557,16572,16573,16574,16575,16576,16577,16578,16721,16722,16723,16724,16725,16726,16727,16728,16743,16744,16745,16746,16747,16748,16749,16750,16896,16897,16898,16899,16914,16915,16916,16917,16918,16919,16920,16921,16922,17085,17086,17087,17088,17089,17090,17091,17092,17093,17256,17257,17258,17259,17260,17261,17262,17263,17264,17265,17428,17429,17430,17431,17432,17433,17434,17600,17601,17602,17603,17604,17605,39292,39293,39294,39295,39296,39463,39464,39465,39466,39467,39635,39636,39637,39638,39807,39808,39809,39810,39979,39980,39981,39982,40151,40152,40153,40154,40323,40324,40325,40326,40327,40330,40496,40497,40498,40499,40500,40501,40502,40503,40672,40673,40674,40675,40676,40845,40846,40847,40848,41018,41019,41020,45359,45531,45703,45875,46047,46219,46391,46563,46735,46906,46907,46908,47078,47079,47080,47081,47250,47251,47252,47253,47424,49045,49046,49216,49217,49218,49219,49220,49386,49387,49388,49389,49390,49391,49392,49393,49558,49559,49560,49561,49562,49563,49564,49565,49566,49731,49732,49733,49734,49735,49736,49737,49903,49904,49905,49906,49907,49908,50075,50076,50077,50078,50079,50080,50247,50248,50249,50250,50251,50252,50419,50420,50421,50422,50423,50424,50592,50593,50594,50595],\"musicAreas\":[{\"x\":4,\"y\":145,\"w\":81,\"h\":36,\"id\":\"forest\"},{\"x\":1,\"y\":195,\"w\":84,\"h\":58,\"id\":\"village\"},{\"x\":112,\"y\":193,\"w\":58,\"h\":50,\"id\":\"cave\"},{\"x\":110,\"y\":104,\"w\":60,\"h\":20,\"id\":\"cave\"},{\"x\":2,\"y\":265,\"w\":84,\"h\":37,\"id\":\"beach\"},{\"x\":1,\"y\":1,\"w\":113,\"h\":60,\"id\":\"lavaland\"},{\"x\":140,\"y\":48,\"w\":29,\"h\":25,\"id\":\"boss\"},{\"x\":4,\"y\":71,\"w\":81,\"h\":62,\"id\":\"desert\"},{\"x\":110,\"y\":81,\"w\":60,\"h\":20,\"id\":\"lavaland\"},{\"x\":140,\"y\":24,\"w\":30,\"h\":16,\"id\":\"desert\"},{\"x\":112,\"y\":156,\"w\":30,\"h\":16,\"id\":\"beach\"},{\"x\":113,\"y\":250,\"w\":57,\"h\":27,\"id\":\"desert\"},{\"x\":150,\"y\":14,\"w\":10,\"h\":8,\"id\":\"desert\"},{\"x\":145,\"y\":156,\"w\":20,\"h\":16,\"id\":\"lavaland\"},{\"x\":146,\"y\":176,\"w\":20,\"h\":16,\"id\":\"lavaland\"}],\"tilesize\":16}"
  },
  {
    "path": "client/maps/world_client.json",
    "content": "{\"width\":172,\"height\":314,\"collisions\":[51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51445,51446,51447,51448,51449,51450,51451,51452,51453,51454,51455,51456,51457,51458,51459,51460,51461,51462,51463,51464,51465,51466,51467,51468,51469,51470,51471,51472,51473,51474,51475,51476,51477,51478,51479,51480,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,51500,51501,51502,51503,51504,51505,51506,51507,51508,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680,51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,51774,51775,51776,51777,51778,51779,51780,51781,51782,51783,51784,51785,51786,51787,51788,51789,51790,51791,51792,51793,51794,51795,51796,51797,51798,51799,51800,51801,51802,51803,51804,51805,51806,51807,51808,51809,51810,51811,51812,51813,51814,51815,51816,51817,51818,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51837,51838,51839,51840,51841,51842,51843,51844,51845,51846,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51864,51946,51947,51948,51949,51950,51951,51952,51953,51954,51955,51956,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51976,51977,51978,51979,51980,51981,51982,51983,51984,51985,51986,51987,51988,51989,51990,51991,51992,51993,51994,51995,51996,51997,51998,51999,52000,52001,52002,52003,52004,52005,52006,52007,52008,52009,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52033,52034,52035,52036,52117,52118,52119,52120,52121,52122,52123,52124,52125,52126,52127,52128,52129,52130,52131,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52152,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52180,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,52192,52193,52194,52195,52196,52197,52198,52199,52200,52201,52202,52203,52204,52205,52206,52207,52208,52288,52289,52290,52291,52292,52293,52294,52295,52296,52297,52298,52299,52300,52301,52302,52303,52304,52305,52306,52307,52308,52309,52310,52311,52312,52313,52314,52315,52316,52317,52318,52319,52320,52321,52322,52323,52324,52325,52326,52327,52328,52329,52330,52331,52332,52333,52334,52335,52336,52337,52338,52339,52340,52341,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,52372,52373,52374,52375,52376,52377,52378,52379,52380,52460,52461,52462,52463,52464,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,52478,52479,52480,52481,52482,52483,52484,52485,52486,52487,52488,52489,52490,52491,52492,52493,52494,52495,52496,52497,52498,52499,52500,52501,52502,52503,52504,52505,52506,52507,52508,52509,52510,52511,52512,52513,52514,52515,52516,52517,52518,52519,52520,52521,52522,52523,52524,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52537,52538,52539,52540,52541,52542,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52632,52633,52634,52635,52636,52637,52638,52639,52640,52641,52642,52643,52644,52645,52646,52647,52648,52649,52650,52651,52652,52653,52654,52655,52656,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52676,52677,52678,52679,52680,52681,52682,52683,52684,52685,52686,52687,52688,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,52706,52707,52708,52709,52710,52711,52712,52713,52714,52715,52716,52717,52718,52719,52720,52721,52722,52723,52724,52804,52805,52806,52807,52808,52809,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52824,52825,52826,52827,52828,52829,52830,52831,52832,52833,52834,52835,52836,52837,52838,52839,52840,52841,52842,52843,52844,52845,52846,52847,52848,52849,52850,52851,52852,52853,52854,52855,52856,52857,52858,52859,52860,52861,52862,52863,52864,52865,52866,52867,52868,52869,52870,52871,52872,52873,52874,52875,52876,52877,52878,52879,52880,52881,52882,52883,52884,52885,52886,52887,52888,52889,52890,52891,52892,52893,52894,52895,52896,52976,52977,52978,52979,52980,52981,52982,52983,52984,52985,52986,52987,52988,52989,52990,52991,52992,52993,52994,52995,52996,52997,52998,52999,53000,53001,53002,53003,53004,53005,53006,53007,53008,53009,53010,53011,53012,53013,53014,53015,53016,53017,53018,53019,53020,53021,53022,53023,53024,53025,53026,53027,53028,53029,53030,53031,53032,53033,53034,53035,53036,53037,53038,53039,53040,53041,53042,53043,53044,53045,53046,53047,53048,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,53061,53062,53063,53064,53065,53066,53067,53068,53148,53149,53150,53151,53152,53153,53154,53155,53156,53157,53158,53159,53160,53161,53162,53163,53164,53165,53166,53167,53168,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53188,53189,53190,53191,53192,53193,53194,53195,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53216,53217,53218,53219,53220,53221,53222,53223,53224,53225,53226,53227,53228,53229,53230,53231,53232,53233,53234,53235,53236,53237,53238,53239,53240,53320,53321,53322,53323,53324,53325,53326,53327,53328,53329,53330,53331,53332,53333,53334,53335,53336,53337,53338,53339,53340,53341,53342,53343,53344,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53356,53357,53358,53359,53360,53361,53362,53363,53364,53365,53366,53367,53368,53369,53370,53371,53372,53373,53374,53375,53376,53377,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53412,53492,53493,53494,53495,53496,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,53509,53510,53511,53512,53513,53514,53515,53516,53517,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53552,53553,53554,53555,53556,53557,53558,53559,53560,53561,53562,53563,53564,53565,53566,53567,53568,53569,53570,53571,53572,53573,53574,53575,53576,53577,53578,53579,53580,53581,53582,53583,53584,31429,31431,31432,31433,31599,31600,31601,31602,31604,31605,31606,31607,31771,31772,31773,31777,31778,31779,31943,31951,32115,32123,32287,32295,32459,32460,32466,32467,32632,32633,32637,32638,32805,32806,32808,32809,33662,33663,33664,33665,33666,33667,33668,33669,33670,33671,33691,33692,33693,33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33833,33834,33835,33836,33837,33838,33840,33841,33842,33843,33844,33862,33863,33864,33865,33867,33868,33869,33871,33872,33873,33875,33876,34002,34003,34004,34005,34006,34015,34016,34017,34018,34019,34031,34032,34033,34034,34035,34048,34174,34175,34176,34177,34188,34189,34190,34191,34203,34204,34205,34206,34220,34346,34363,34375,34392,34518,34519,34521,34522,34530,34531,34532,34534,34535,34547,34548,34559,34560,34561,34562,34563,34564,34694,34695,34696,34697,34701,34702,34720,34721,34730,34731,34869,34870,34872,34873,34893,34894,34895,34897,34898,34899,34901,34902,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35756,35757,35758,35759,35760,35761,35762,35763,35764,35895,35896,35897,35898,35900,35901,35902,35904,35905,35906,35908,35909,35910,35928,35929,35931,35932,35933,35935,35936,36066,36067,36068,36081,36082,36083,36100,36108,36238,36239,36254,36255,36272,36280,36410,36427,36444,36452,36582,36583,36584,36585,36586,36594,36595,36596,36597,36598,36599,36616,36617,36623,36624,36758,36759,36760,36761,36765,36766,36789,36790,36794,36795,36933,36934,36936,36937,36962,36963,36965,36966,31072,31073,31074,31075,31076,31077,31078,31079,31080,31081,31082,31083,31084,31085,31086,31087,31088,31089,31090,31091,31092,31093,31094,31095,31096,31097,31098,31099,31100,31101,31102,31129,31244,31245,31246,31247,31248,31249,31250,31251,31252,31253,31254,31255,31256,31257,31258,31259,31260,31261,31262,31263,31264,31265,31266,31267,31268,31269,31270,31271,31272,31273,31274,31301,31416,31417,31418,31419,31420,31421,31422,31423,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31435,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31446,31473,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31598,31599,31600,31605,31606,31607,31608,31609,31610,31611,31612,31613,31614,31615,31616,31617,31618,31645,31760,31761,31762,31763,31764,31765,31766,31767,31768,31769,31770,31780,31781,31782,31783,31784,31785,31786,31787,31788,31789,31790,31817,31932,31933,31934,31935,31936,31937,31938,31939,31940,31941,31942,31952,31953,31954,31955,31956,31957,31958,31959,31960,31961,31962,31989,32104,32105,32106,32107,32108,32109,32110,32111,32112,32113,32114,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32161,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32333,32448,32449,32450,32451,32452,32453,32454,32455,32456,32457,32458,32459,32467,32468,32469,32470,32471,32472,32473,32474,32475,32476,32477,32478,32505,32620,32621,32622,32623,32624,32625,32626,32627,32628,32629,32630,32631,32632,32638,32639,32640,32641,32642,32643,32644,32645,32646,32647,32648,32649,32650,32677,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32809,32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32849,32964,32965,32966,32967,32968,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978,32979,32980,32981,32982,32983,32984,32985,32986,32987,32988,32989,32990,32991,32992,32993,32994,33021,33136,33137,33138,33139,33140,33141,33142,33143,33144,33145,33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33156,33157,33158,33159,33160,33161,33162,33163,33164,33165,33166,33193,33308,33309,33310,33311,33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324,33325,33326,33327,33328,33329,33330,33331,33332,33333,33334,33335,33336,33337,33338,33339,33340,33341,33342,33343,33344,33345,33346,33347,33348,33349,33350,33351,33352,33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365,33480,33481,33482,33483,33484,33485,33486,33487,33488,33489,33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502,33503,33504,33505,33506,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516,33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33527,33528,33529,33530,33531,33532,33533,33534,33535,33536,33537,33652,33653,33654,33655,33656,33657,33658,33659,33660,33661,33662,33663,33664,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679,33680,33681,33682,33683,33684,33685,33686,33687,33688,33689,33690,33691,33692,33693,33698,33699,33700,33701,33702,33703,33704,33705,33706,33707,33708,33709,33824,33825,33826,33827,33828,33829,33830,33831,33832,33833,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853,33854,33855,33856,33857,33858,33859,33860,33861,33862,33876,33877,33878,33879,33880,33881,33996,33997,33998,33999,34000,34001,34002,34003,34004,34017,34018,34019,34020,34021,34022,34023,34024,34025,34026,34027,34028,34029,34030,34031,34032,34033,34049,34050,34051,34052,34053,34168,34169,34170,34171,34172,34173,34174,34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34203,34221,34222,34223,34224,34225,34340,34341,34342,34343,34344,34345,34364,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34393,34394,34395,34396,34397,34512,34513,34514,34515,34516,34517,34518,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34564,34565,34566,34567,34568,34569,34684,34685,34686,34687,34688,34689,34690,34691,34692,34693,34694,34702,34703,34704,34705,34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717,34718,34719,34720,34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34866,34867,34868,34869,34873,34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885,34886,34887,34888,34889,34890,34891,34892,34893,34902,34903,34904,34905,34906,34907,34908,34909,34910,34911,34912,34913,35028,35029,35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041,35042,35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053,35054,35055,35056,35057,35058,35059,35060,35061,35062,35063,35064,35065,35066,35067,35068,35069,35070,35071,35072,35073,35074,35075,35076,35077,35078,35079,35080,35081,35082,35083,35084,35085,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35591,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755,35756,35757,35762,35763,35764,35765,35766,35767,35768,35769,35770,35771,35772,35773,35888,35889,35890,35891,35892,35893,35894,35895,35896,35909,35910,35911,35912,35913,35914,35915,35916,35917,35918,35919,35920,35921,35922,35923,35924,35925,35926,35927,35937,35938,35939,35940,35941,35942,35943,35944,35945,36060,36061,36062,36063,36064,36065,36066,36067,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36109,36110,36111,36112,36113,36114,36115,36116,36117,36232,36233,36234,36235,36236,36237,36238,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36281,36282,36283,36284,36285,36286,36287,36288,36289,36404,36405,36406,36407,36408,36409,36428,36429,36430,36431,36432,36433,36434,36435,36436,36437,36438,36439,36440,36441,36442,36443,36453,36454,36455,36456,36457,36458,36459,36460,36461,36576,36577,36578,36579,36580,36581,36582,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36748,36749,36750,36751,36752,36753,36754,36755,36756,36757,36758,36766,36767,36768,36769,36770,36771,36772,36773,36774,36775,36776,36777,36778,36779,36780,36781,36782,36783,36784,36785,36786,36787,36788,36789,36795,36796,36797,36798,36799,36800,36801,36802,36803,36804,36805,36920,36921,36922,36923,36924,36925,36926,36927,36928,36929,36930,36931,36932,36933,36937,36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36948,36949,36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36961,36962,36966,36967,36968,36969,36970,36971,36972,36973,36974,36975,36976,36977,37092,37093,37094,37095,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105,37106,37107,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117,37118,37119,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37145,37146,37147,37148,37149,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,25698,25706,25356,25360,758,760,930,932,1102,1104,1274,1276,1446,1448,1618,1620,4513,4516,4685,4688,4857,4860,5029,5032,5092,5094,5201,5204,5264,5266,5373,5376,5436,5438,5545,5548,5608,5610,5780,5782,5952,5954,6124,6126,6296,6298,6468,6470,6549,6551,6640,6642,6721,6723,6812,6814,6893,6895,6984,6986,7065,7067,7156,7158,7237,7239,7328,7330,7409,7411,7581,7583,7672,7674,7844,7846,8016,8018,8188,8190,8360,8362,8532,8534,8676,8679,8704,8706,8814,8817,8848,8851,8876,8878,8986,8989,9020,9023,9048,9050,9132,9135,9158,9161,9192,9195,9304,9307,9330,9333,9355,9358,9364,9367,9476,9479,9502,9505,9527,9530,9536,9539,9648,9651,9674,9677,9699,9702,9708,9711,9820,9823,9846,9849,9871,9874,9992,9995,10043,10046,10215,10218,32234,32237,32406,32409,32578,32581,32750,32753,32856,32859,32893,32899,32922,32925,33028,33031,33065,33071,33094,33097,33200,33203,33237,33243,33266,33269,33372,33375,33409,33415,33438,33441,33610,33613,33782,33785,44670,44672,44677,44679,44842,44844,44849,44851,45021,45023,45193,45195,45358,45360,45365,45367,45530,45532,45537,45539,45702,45704,45709,45711,45874,45876,45881,45883,46046,46048,46053,46055,46218,46220,46225,46227,46390,46392,46397,46399,46562,46564,46569,46571,46734,46736,46741,46743,24461,24462,24633,24634,24800,24801,24972,24973,25161,25162,25297,25298,25333,25334,25366,25367,25469,25470,25475,25477,25538,25539,25647,25649,25667,25668,25839,25840,26007,26008,26160,26161,26179,26180,26204,26205,26322,26323,26332,26333,26376,26377,26494,26495,26517,26518,26537,26538,26554,26555,26566,26567,26689,26690,26700,26701,26709,26710,26726,26727,26738,26739,26872,26873,27356,27357,27528,27529,27535,27536,27707,27708,27710,27711,27738,27739,27752,27753,27772,27773,27882,27883,27888,27889,27900,27901,27910,27911,27924,27925,27944,27945,28060,28061,28072,28073,28275,28276,28385,28386,28430,28431,28447,28448,28451,28452,28557,28558,28602,28603,28623,28624,28756,28757,28928,28929,29146,29147,29252,29253,29285,29286,29318,29319,29424,29425,29457,29458,29603,29604,29622,29623,29775,29776,29794,29795,30000,30001,30108,30109,30126,30127,30172,30173,30280,30281,30298,30299,30456,30457,30484,30485,30495,30496,30523,30524,30628,30629,30656,30657,30667,30668,30681,30682,30695,30696,30853,30854,30992,30993,31164,31165,31325,31326,31363,31364,31497,31498,31528,31529,31535,31536,31700,31701,31724,31725,31887,31888,31896,31897,32059,32060,12565,12566,12738,12739,12910,12911,12912,12917,13083,13089,13261,13484,13656,13828,19271,23260,23265,23432,23437,23603,23604,23609,23610,23771,23772,23773,23774,23775,23776,23781,23782,23783,23784,23785,23942,23943,23944,23945,23946,23947,23954,23955,23956,23957,23958,24113,24114,24115,24129,24130,24131,24132,24133,24283,24284,24285,24286,24302,24303,24304,24305,24306,24307,24308,24309,24310,24311,24312,24313,24314,24452,24453,24454,24455,24456,24457,24477,24478,24479,24480,24481,24482,24483,24484,24485,24486,24487,24619,24620,24621,24622,24623,24624,24625,24626,24627,24658,24659,24776,24777,24778,24779,24784,24785,24786,24787,24788,24789,24790,24791,24792,24793,24794,24795,24796,24831,24832,24838,24839,24840,24841,24842,24843,24844,24845,24846,24847,24848,24849,24850,24851,24945,24946,24947,24948,24949,24950,24951,24952,24953,24954,24955,24956,24957,24958,24959,24961,24962,24963,25003,25004,25005,25009,25010,25011,25012,25013,25015,25016,25017,25018,25019,25020,25021,25022,25023,25024,25116,25117,25118,25119,25120,25123,25124,25125,25126,25127,25128,25175,25176,25177,25178,25180,25181,25182,25195,25196,25288,25289,25349,25350,25352,25353,25368,25460,25540,25632,25711,25712,25804,25883,25975,25976,26055,26147,26227,26228,26319,26399,26400,26491,26572,26662,26663,26744,26834,26835,26916,27005,27006,27088,27177,27178,27259,27260,27349,27431,27521,27522,27603,27694,27775,27776,27866,27947,27948,28037,28038,28120,28209,28210,28292,28381,28464,28553,28636,28725,28808,28897,28898,28980,29070,29071,29151,29152,29243,29244,29322,29323,29416,29494,29588,29666,29760,29837,29838,29932,30009,30103,30104,30181,30274,30275,30276,30353,30354,30446,30447,30525,30526,30618,30698,30790,30870,30962,31042,31043,31134,31135,31214,31215,31307,31344,31353,31387,31479,31484,31516,31525,31559,31650,31651,31656,31661,31662,31663,31664,31665,31666,31677,31678,31679,31680,31681,31682,31683,31684,31687,31688,31697,31698,31731,31732,31822,31823,31828,31829,31832,31833,31834,31835,31836,31837,31838,31839,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31859,31860,31869,31870,31871,31895,31903,31904,31994,32000,32001,32002,32003,32004,32005,32010,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32028,32029,32030,32031,32042,32043,32044,32045,32046,32047,32048,32049,32050,32051,32052,32053,32054,32067,32076,32077,32166,32173,32174,32175,32176,32183,32184,32185,32186,32187,32188,32189,32190,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32238,32239,32248,32249,32337,32338,32398,32399,32400,32401,32402,32403,32404,32405,32406,32409,32410,32411,32421,32508,32509,32510,32573,32574,32575,32576,32577,32578,32581,32582,32593,32594,32680,32681,32765,32766,32767,32768,32769,32770,32771,32772,32938,32939,32940,32941,32942,32943,32944,24792,24964,25128,25135,25136,25299,25300,25301,25307,25471,25472,25473,25474,25475,25477,25478,25479,25644,25645,25646,25647,25649,25650,26742,26743,26744,26910,26911,26912,26913,26914,27080,27081,27082,27083,27084,27085,27252,27424,27596,27597,27768,27769,27770,27941,27942,28113,28114,28115,28116,28286,28287,28288,28289,28290,28291,28461,28462,28463,24656,24657,24828,24829,25147,25148,25319,25320,25994,25995,26166,26167,27755,27756,27927,27928,28425,28426,28597,28598,29275,29276,29447,29448,30467,30468,30639,30640,8927,23371,23372,23373,23518,23548,23549,3594,3596,24721,24723,24749,24751,49346,49348,51067,51069,51554,51556,2905,2906,2907,2908,2909,3077,3081,3249,3253,3421,3425,3593,3594,3596,3597,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23341,23351,23369,23379,23513,23523,23541,23551,23685,23695,23713,23723,23857,23867,23885,23895,24029,24039,24057,24067,24201,24211,24229,24239,24373,24383,24401,24411,24545,24555,24573,24583,24717,24718,24719,24720,24724,24725,24726,24727,24745,24746,24747,24748,24752,24753,24754,24755,47966,47967,47968,47969,47970,47971,47972,47973,47974,47975,47976,48138,48148,48310,48320,48482,48492,48654,48664,48826,48836,48998,49008,49170,49180,49342,49343,49344,49345,49349,49350,49351,49352,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50174,50184,50346,50356,50378,50379,50380,50381,50382,50518,50528,50550,50554,50690,50700,50722,50726,50862,50872,50894,50898,51034,51044,51066,51070,51206,51216,51378,51388,51550,51551,51552,51553,51557,51558,51559,51560,22816,22817,22818,22819,22820,22821,22822,22823,22824,22825,22826,22827,22828,22829,22830,22831,22832,22833,22834,22835,22836,22837,22838,22839,22840,22841,22842,22843,22844,22845,22846,22847,22848,22849,22850,22851,22852,22853,22854,22855,22856,22857,22858,22859,22860,22861,22862,22863,22864,22865,22866,22867,22868,22869,22870,22871,22872,22873,22988,22989,22990,22991,22992,22993,22994,22995,22996,22997,22998,22999,23000,23001,23002,23003,23004,23005,23006,23007,23008,23009,23010,23011,23012,23013,23014,23015,23016,23017,23018,23019,23020,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23033,23034,23035,23036,23037,23038,23039,23040,23041,23042,23043,23044,23045,23160,23161,23162,23163,23164,23165,23166,23167,23168,23180,23181,23182,23183,23184,23185,23186,23187,23188,23189,23190,23191,23192,23193,23194,23195,23196,23208,23209,23210,23211,23212,23213,23214,23215,23216,23217,23332,23333,23334,23335,23336,23337,23338,23339,23340,23352,23353,23354,23355,23356,23357,23358,23359,23360,23361,23362,23363,23364,23365,23366,23367,23368,23380,23381,23382,23383,23384,23385,23386,23387,23388,23389,23504,23505,23506,23507,23508,23509,23510,23511,23512,23524,23525,23526,23527,23528,23529,23530,23531,23532,23533,23534,23535,23536,23537,23538,23539,23540,23552,23553,23554,23555,23556,23557,23558,23559,23560,23561,23676,23677,23678,23679,23680,23681,23682,23683,23684,23696,23697,23698,23699,23700,23701,23702,23703,23704,23705,23706,23707,23708,23709,23710,23711,23712,23724,23725,23726,23727,23728,23729,23730,23731,23732,23733,23848,23849,23850,23851,23852,23853,23854,23855,23856,23868,23869,23870,23871,23872,23873,23874,23875,23876,23877,23878,23879,23880,23881,23882,23883,23884,23896,23897,23898,23899,23900,23901,23902,23903,23904,23905,24020,24021,24022,24023,24024,24025,24026,24027,24028,24040,24041,24042,24043,24044,24045,24046,24047,24048,24049,24050,24051,24052,24053,24054,24055,24056,24068,24069,24070,24071,24072,24073,24074,24075,24076,24077,24192,24193,24194,24195,24196,24197,24198,24199,24200,24212,24213,24214,24215,24216,24217,24218,24219,24220,24221,24222,24223,24224,24225,24226,24227,24228,24240,24241,24242,24243,24244,24245,24246,24247,24248,24249,24364,24365,24366,24367,24368,24369,24370,24371,24372,24384,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24400,24412,24413,24414,24415,24416,24417,24418,24419,24420,24421,24536,24537,24538,24539,24540,24541,24542,24543,24544,24556,24557,24558,24559,24560,24561,24562,24563,24564,24565,24566,24567,24568,24569,24570,24571,24572,24584,24585,24586,24587,24588,24589,24590,24591,24592,24593,24708,24709,24710,24711,24712,24713,24714,24715,24716,24728,24729,24730,24731,24732,24733,24734,24735,24736,24737,24738,24739,24740,24741,24742,24743,24744,24756,24757,24758,24759,24760,24761,24762,24763,24764,24765,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24895,24896,24897,24898,24899,24900,24901,24902,24903,24904,24905,24906,24907,24908,24909,24910,24911,24912,24913,24914,24915,24916,24917,24918,24919,24920,24921,24922,24923,24924,24925,24926,24927,24928,24929,24930,24931,24932,24933,24934,24935,24936,24937,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25062,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25077,25078,25079,25080,25081,25082,25083,25084,25085,25086,25087,25088,25089,25090,25091,25092,25093,25094,25095,25096,25097,25098,25099,25100,25101,25102,25103,25104,25105,25106,25107,25108,25109,47612,47613,47614,47615,47616,47617,47618,47619,47620,47621,47622,47623,47624,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47637,47638,47639,47640,47641,47784,47785,47786,47787,47788,47789,47790,47791,47792,47793,47794,47795,47796,47797,47798,47799,47800,47801,47802,47803,47804,47805,47806,47807,47808,47809,47810,47811,47812,47813,47956,47957,47958,47959,47960,47961,47962,47963,47964,47965,47977,47978,47979,47980,47981,47982,47983,47984,47985,48128,48129,48130,48131,48132,48133,48134,48135,48136,48137,48149,48150,48151,48152,48153,48154,48155,48156,48157,48300,48301,48302,48303,48304,48305,48306,48307,48308,48309,48321,48322,48323,48324,48325,48326,48327,48328,48329,48472,48473,48474,48475,48476,48477,48478,48479,48480,48481,48493,48494,48495,48496,48497,48498,48499,48500,48501,48644,48645,48646,48647,48648,48649,48650,48651,48652,48653,48665,48666,48667,48668,48669,48670,48671,48672,48673,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48837,48838,48839,48840,48841,48842,48843,48844,48845,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,49009,49010,49011,49012,49013,49014,49015,49016,49017,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49181,49182,49183,49184,49185,49186,49187,49188,49189,49332,49333,49334,49335,49336,49337,49338,49339,49340,49341,49353,49354,49355,49356,49357,49358,49359,49360,49361,49504,49505,49506,49507,49508,49509,49510,49511,49512,49513,49514,49515,49516,49517,49518,49519,49520,49521,49522,49523,49524,49525,49526,49527,49528,49529,49530,49531,49532,49533,49648,49649,49650,49651,49652,49653,49654,49655,49656,49657,49658,49659,49660,49661,49662,49663,49664,49665,49666,49667,49668,49669,49670,49671,49672,49673,49674,49675,49676,49677,49678,49679,49680,49681,49682,49683,49684,49685,49686,49687,49688,49689,49690,49691,49692,49693,49694,49695,49696,49697,49698,49699,49700,49701,49702,49703,49704,49705,49820,49821,49822,49823,49824,49825,49826,49827,49828,49829,49830,49831,49832,49833,49834,49835,49836,49837,49838,49839,49840,49841,49842,49843,49844,49845,49846,49847,49848,49849,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49992,49993,49994,49995,49996,49997,49998,49999,50000,50001,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50024,50025,50026,50027,50028,50029,50030,50031,50032,50033,50034,50035,50036,50037,50038,50039,50040,50041,50042,50043,50044,50045,50046,50047,50048,50049,50164,50165,50166,50167,50168,50169,50170,50171,50172,50173,50185,50186,50187,50188,50189,50190,50191,50192,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,50203,50204,50205,50206,50207,50208,50209,50210,50211,50212,50213,50214,50215,50216,50217,50218,50219,50220,50221,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50357,50358,50359,50360,50361,50362,50363,50364,50365,50366,50367,50368,50369,50370,50371,50372,50373,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50508,50509,50510,50511,50512,50513,50514,50515,50516,50517,50529,50530,50531,50532,50533,50534,50535,50536,50537,50538,50539,50540,50541,50542,50543,50544,50545,50546,50547,50548,50549,50550,50554,50555,50556,50557,50558,50559,50560,50561,50562,50563,50564,50565,50680,50681,50682,50683,50684,50685,50686,50687,50688,50689,50701,50702,50703,50704,50705,50706,50707,50708,50709,50710,50711,50712,50713,50714,50715,50716,50717,50718,50719,50720,50721,50722,50726,50727,50728,50729,50730,50731,50732,50733,50734,50735,50736,50737,50852,50853,50854,50855,50856,50857,50858,50859,50860,50861,50873,50874,50875,50876,50877,50878,50879,50880,50881,50882,50883,50884,50885,50886,50887,50888,50889,50890,50891,50892,50893,50894,50898,50899,50900,50901,50902,50903,50904,50905,50906,50907,50908,50909,51024,51025,51026,51027,51028,51029,51030,51031,51032,51033,51045,51046,51047,51048,51049,51050,51051,51052,51053,51054,51055,51056,51057,51058,51059,51060,51061,51062,51063,51064,51065,51066,51067,51071,51072,51073,51074,51075,51076,51077,51078,51079,51080,51081,51196,51197,51198,51199,51200,51201,51202,51203,51204,51205,51217,51218,51219,51220,51221,51222,51223,51224,51225,51226,51227,51228,51229,51230,51231,51232,51233,51234,51235,51236,51237,51238,51239,51240,51241,51242,51243,51244,51245,51246,51247,51248,51249,51250,51251,51252,51253,51368,51369,51370,51371,51372,51373,51374,51375,51376,51377,51389,51390,51391,51392,51393,51394,51395,51396,51397,51398,51399,51400,51401,51402,51403,51404,51405,51406,51407,51408,51409,51410,51411,51412,51413,51414,51415,51416,51417,51418,51419,51420,51421,51422,51423,51424,51425,51540,51541,51542,51543,51544,51545,51546,51547,51548,51549,51561,51562,51563,51564,51565,51566,51567,51568,51569,51570,51571,51572,51573,51574,51575,51576,51577,51578,51579,51580,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51592,51593,51594,51595,51596,51597,51712,51713,51714,51715,51716,51717,51718,51719,51720,51721,51722,51723,51724,51725,51726,51727,51728,51729,51730,51731,51732,51733,51734,51735,51736,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,51750,51751,51752,51753,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51900,51901,51902,51903,51904,51905,51906,51907,51908,51909,51910,51911,51912,51913,51914,51915,51916,51917,51918,51919,51920,51921,51922,51923,51924,51925,51926,51927,51928,51929,51930,51931,51932,51933,51934,51935,51936,51937,51938,51939,51940,51941,4785,4786,4788,4789,4790,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4957,4958,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,5129,5134,5135,5136,5137,5138,5139,5148,5149,5150,5301,5321,5322,5323,5473,5494,5495,5496,5497,5498,5499,5500,5645,5667,5668,5669,5670,5671,5672,5817,5818,5819,5840,5844,5991,5992,5993,5996,6012,6016,6165,6166,6172,6173,6174,6175,6184,6188,6338,6339,6340,6341,6342,6343,6344,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6359,6360,14773,14774,14775,14776,14777,14944,14945,14946,14948,14949,14950,15083,15084,15085,15086,15087,15088,15089,15090,15097,15098,15099,15100,15101,15116,15117,15121,15122,15252,15253,15254,15255,15256,15257,15258,15259,15260,15261,15262,15263,15268,15269,15270,15272,15273,15274,15288,15294,15423,15424,15425,15426,15427,15434,15435,15440,15441,15445,15446,15460,15466,15595,15596,15607,15608,15611,15612,15618,15632,15638,15767,15772,15773,15774,15775,15776,15779,15780,15781,15782,15783,15784,15790,15804,15810,15939,15943,15944,15948,15949,15952,15953,15954,15955,15961,15962,15976,15982,16111,16115,16121,16122,16132,16133,16148,16154,16283,16284,16286,16287,16294,16295,16296,16297,16298,16299,16300,16301,16302,16303,16304,16320,16326,16492,16498,16664,16665,16666,16668,16669,16670,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19214,19215,19216,19217,19218,19219,19220,19221,19222,19223,19224,19225,19237,19247,19248,19384,19385,19386,19387,19396,19397,19398,19409,19420,19556,19557,19558,19569,19570,19581,19582,19584,19585,19586,19592,19593,19728,19742,19758,19759,19764,19765,19766,19900,19914,19931,19932,19937,19938,19939,20072,20086,20104,20110,20111,20112,20244,20258,20276,20283,20284,20416,20417,20418,20426,20427,20428,20429,20430,20448,20449,20450,20456,20590,20591,20592,20593,20597,20598,20622,20623,20627,20628,20765,20766,20768,20769,20795,20796,20798,20799,27473,27474,27476,27477,27502,27504,27643,27644,27645,27646,27648,27649,27650,27651,27674,27676,27815,27816,27817,27821,27822,27823,27845,27846,27848,27849,27987,27995,28012,28013,28014,28015,28016,28017,28018,28020,28021,28022,28023,28024,28025,28026,28159,28167,28184,28185,28186,28187,28188,28189,28193,28194,28195,28196,28197,28198,28331,28332,28338,28339,28356,28370,28504,28505,28509,28510,28528,28529,28530,28531,28532,28533,28537,28538,28539,28540,28541,28542,28677,28678,28680,28681,28705,28706,28708,28709,28878,28880,29050,29051,29052,31458,31459,31461,31462,31628,31629,31630,31631,31633,31634,31635,31636,31800,31801,31802,31806,31807,31808,31972,31980,32144,32152,32316,32324,32488,32489,32495,32496,32661,32662,32666,32667,32834,32835,32837,32838,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37986,37987,37988,37989,37990,37991,37992,37993,37994,37995,37996,37997,37998,37999,38000,38001,38136,38137,38146,38147,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38158,38159,38172,38173,38174,38308,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38345,38346,38347,38480,38486,38487,38488,38518,38519,38652,38653,38657,38658,38660,38661,38674,38675,38676,38677,38678,38679,38683,38684,38685,38686,38691,38825,38826,38829,38833,38834,38835,38845,38846,38851,38852,38853,38854,38855,38858,38859,38863,38998,39001,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39031,39035,39170,39173,39202,39203,39206,39207,39342,39345,39373,39374,39375,39377,39378,39513,39514,39517,39544,39545,39546,39549,39685,39686,39689,39711,39712,39713,39714,39715,39716,39717,39720,39721,39857,39861,39862,39882,39883,39884,39885,39886,39887,39888,39891,39892,40029,40033,40034,40035,40054,40055,40062,40063,40201,40206,40207,40208,40225,40226,40233,40234,40373,40374,40379,40380,40397,40398,40405,40546,40552,40569,40577,40718,40724,40741,40742,40749,40750,40889,40890,40896,40914,40921,40922,41061,41062,41067,41068,41086,41087,41088,41094,41233,41238,41239,41260,41261,41265,41266,41405,41406,41408,41409,41410,41433,41434,41436,41437,43809,43810,43811,43812,43813,43814,43815,43816,43817,43818,43819,43820,43981,43982,43983,43984,43985,43986,43987,43988,43989,43990,43991,43992,44005,44006,44008,44009,44010,44011,44012,44013,44014,44015,44153,44164,44177,44178,44180,44181,44182,44183,44184,44185,44186,44187,44188,44325,44336,44349,44359,44360,44361,44497,44508,44521,44532,44533,44534,44669,44680,44693,44694,44695,44696,44697,44698,44705,44706,44707,44841,44852,44870,44871,44878,44879,44880,45013,45024,45043,45044,45051,45052,45185,45196,45216,45217,45218,45224,45357,45368,45390,45391,45395,45396,45529,45540,45563,45564,45566,45567,45701,45712,45873,45884,46045,46056,46217,46228,46389,46400,46561,46572,46733,46744,46905,46916,47077,47088,47249,47260,47421,47422,47423,47425,47426,47427,47428,47430,47431,47432,52441,52442,52443,52444,52445,52612,52613,52614,52615,52616,52617,52618,52783,52784,52785,52789,52790,52791,52955,52956,52962,52963,53127,53135,53299,53300,53306,53307,53472,53473,53477,53478,53645,53646,53648,53649,4790,4962,4969,4976,5133,5134,5141,5148,5304,5305,5306,5307,5308,5309,5310,5311,5313,5314,5319,5320,5476,5477,5478,5479,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5648,5650,5656,5658,5659,5660,5661,5662,5663,5668,5820,5822,5823,5827,5828,5833,5834,5835,5836,5837,5992,5994,5995,5996,5997,5998,5999,6000,6004,6005,6009,6010,6167,6168,6169,6170,6171,6176,6182,6348,6354,6356,19220,19392,19393,19397,19565,19566,19567,19568,19569,19741,19913,19914,27817,27987,27988,27989,28159,38494,38843,38844,44497,44508,44669,44670,44679,44680,44841,44842,44844,44845,44846,44847,44848,44849,44851,44852,45014,45015,45016,45017,45018,45019,45020,45021,45023,46562,46564,46569,46571,46733,46734,46736,46737,46740,46741,46743,46744,46905,46909,46910,46911,46912,46916,47082,47083,47254,47255,47426,47427,1429,1467,1762,1911,2849,2950,3131,3347,3832,4838,5053,5214,5339,5413,6883,6975,7117,7336,7986,8118,8311,8614,8834,10372,10740,11565,11597,11706,11929,12465,12574,13099,14357,15200,15902,23992,23993,33553,33554,33725,33726,33742,33743,33767,33768,33914,33915,33939,33940,34287,34288,34459,34460,35294,35295,35466,35467,35777,35778,35949,35950,36344,36345,36516,36517,37353,37354,37525,37526,37916,37917,38088,38089,38550,38551,38619,38620,38722,38723,38746,38747,38791,38792,38918,38919,39047,39048,39219,39220,39269,39270,39441,39442,40615,40616,40787,40788,40821,40822,40937,40938,40993,40994,41027,41028,41109,41110,41199,41200,42534,42535,42706,42707,42848,42849,43020,43021,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4612,4613,4614,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4784,4785,4786,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4956,4957,4962,4963,4964,4965,4966,4967,4968,4969,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,5128,5134,5135,5136,5137,5138,5139,5140,5141,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5300,5305,5306,5307,5308,5309,5310,5311,5312,5313,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5472,5476,5477,5478,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5644,5648,5649,5650,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5672,5673,5816,5817,5820,5821,5822,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5845,5988,5989,5990,5991,5992,5993,5994,5995,5998,5999,6000,6001,6002,6003,6004,6010,6011,6012,6017,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6182,6183,6184,6189,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6354,6355,6356,6360,6361,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,14560,14561,14562,14563,14564,14565,14566,14567,14568,14569,14570,14571,14572,14573,14574,14575,14576,14577,14578,14579,14580,14581,14582,14583,14584,14585,14586,14587,14588,14589,14590,14591,14592,14593,14594,14595,14596,14597,14598,14599,14600,14601,14602,14603,14604,14605,14606,14607,14608,14609,14610,14611,14612,14613,14614,14615,14616,14617,14732,14733,14734,14735,14736,14737,14738,14739,14740,14741,14742,14743,14744,14745,14746,14747,14748,14749,14750,14751,14752,14753,14754,14755,14756,14757,14758,14759,14760,14761,14762,14763,14764,14765,14766,14767,14768,14769,14770,14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14786,14787,14788,14789,14904,14905,14906,14907,14908,14909,14910,14911,14912,14913,14914,14915,14916,14917,14918,14919,14920,14921,14922,14923,14924,14925,14926,14927,14928,14929,14930,14931,14932,14933,14934,14935,14936,14937,14938,14939,14940,14941,14942,14943,14944,14950,14951,14952,14953,14954,14955,14956,14957,14958,14959,14960,14961,15076,15077,15078,15079,15080,15081,15082,15083,15084,15085,15086,15087,15090,15091,15092,15093,15094,15095,15096,15097,15098,15099,15100,15101,15102,15103,15104,15105,15106,15107,15108,15109,15110,15111,15112,15113,15114,15115,15123,15124,15125,15126,15127,15128,15129,15130,15131,15132,15133,15248,15249,15250,15251,15252,15263,15264,15265,15266,15267,15268,15273,15274,15275,15276,15277,15278,15279,15280,15281,15282,15283,15284,15285,15286,15287,15295,15296,15297,15298,15299,15300,15301,15302,15303,15304,15305,15420,15421,15422,15423,15436,15437,15438,15439,15440,15447,15448,15449,15450,15451,15452,15453,15454,15455,15456,15457,15458,15459,15467,15468,15469,15470,15471,15472,15473,15474,15475,15476,15477,15592,15593,15594,15608,15609,15610,15619,15620,15621,15622,15623,15624,15625,15626,15627,15628,15629,15630,15631,15639,15640,15641,15642,15643,15644,15645,15646,15647,15648,15649,15764,15765,15766,15791,15792,15793,15794,15795,15796,15797,15798,15799,15800,15801,15802,15803,15811,15812,15813,15814,15815,15816,15817,15818,15819,15820,15821,15936,15937,15938,15944,15945,15946,15947,15948,15962,15963,15964,15965,15966,15967,15968,15969,15970,15971,15972,15973,15974,15975,15983,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,16108,16109,16110,16116,16117,16118,16119,16120,16121,16133,16134,16135,16136,16137,16138,16139,16140,16141,16142,16143,16144,16145,16146,16147,16155,16156,16157,16158,16159,16160,16161,16162,16163,16164,16165,16280,16281,16282,16283,16287,16288,16289,16290,16291,16292,16293,16304,16305,16306,16307,16308,16309,16310,16311,16312,16313,16314,16315,16316,16317,16318,16319,16327,16328,16329,16330,16331,16332,16333,16334,16335,16336,16337,16452,16453,16454,16455,16456,16457,16458,16459,16460,16461,16462,16463,16464,16465,16466,16467,16468,16469,16470,16471,16472,16473,16474,16475,16476,16477,16478,16479,16480,16481,16482,16483,16484,16485,16486,16487,16488,16489,16490,16491,16499,16500,16501,16502,16503,16504,16505,16506,16507,16508,16509,16624,16625,16626,16627,16628,16629,16630,16631,16632,16633,16634,16635,16636,16637,16638,16639,16640,16641,16642,16643,16644,16645,16646,16647,16648,16649,16650,16651,16652,16653,16654,16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16670,16671,16672,16673,16674,16675,16676,16677,16678,16679,16680,16681,16796,16797,16798,16799,16800,16801,16802,16803,16804,16805,16806,16807,16808,16809,16810,16811,16812,16813,16814,16815,16816,16817,16818,16819,16820,16821,16822,16823,16824,16825,16826,16827,16828,16829,16830,16831,16832,16833,16834,16835,16836,16837,16838,16839,16840,16841,16842,16843,16844,16845,16846,16847,16848,16849,16850,16851,16852,16853,18686,18687,18688,18689,18690,18691,18692,18693,18694,18695,18696,18697,18698,18699,18700,18701,18702,18703,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19075,19076,19077,19078,19079,19080,19081,19082,19083,19084,19085,19086,19087,19088,19089,19202,19203,19204,19205,19206,19207,19208,19209,19210,19211,19212,19213,19214,19215,19225,19226,19227,19228,19229,19230,19231,19232,19233,19234,19235,19236,19249,19250,19251,19252,19253,19254,19255,19256,19257,19258,19259,19260,19261,19374,19375,19376,19377,19378,19379,19380,19381,19382,19383,19384,19398,19399,19400,19401,19402,19403,19404,19405,19406,19407,19408,19421,19422,19423,19424,19425,19426,19427,19428,19429,19430,19431,19432,19433,19546,19547,19548,19549,19550,19551,19552,19553,19554,19555,19571,19572,19573,19574,19575,19576,19577,19578,19579,19580,19581,19593,19594,19595,19596,19597,19598,19599,19600,19601,19602,19603,19604,19605,19718,19719,19720,19721,19722,19723,19724,19725,19726,19727,19743,19744,19745,19746,19747,19748,19749,19750,19751,19752,19753,19754,19755,19756,19757,19758,19766,19767,19768,19769,19770,19771,19772,19773,19774,19775,19776,19777,19890,19891,19892,19893,19894,19895,19896,19897,19898,19899,19915,19916,19917,19918,19919,19920,19921,19922,19923,19924,19925,19926,19927,19928,19929,19930,19931,19938,19939,19940,19941,19942,19943,19944,19945,19946,19947,19948,19949,20062,20063,20064,20065,20066,20067,20068,20069,20070,20071,20087,20088,20089,20090,20091,20092,20093,20094,20095,20096,20097,20098,20099,20100,20101,20102,20103,20112,20113,20114,20115,20116,20117,20118,20119,20120,20121,20234,20235,20236,20237,20238,20239,20240,20241,20242,20243,20259,20260,20261,20262,20263,20264,20265,20266,20267,20268,20269,20270,20271,20272,20273,20274,20275,20284,20285,20286,20287,20288,20289,20290,20291,20292,20293,20406,20407,20408,20409,20410,20411,20412,20413,20414,20415,20416,20430,20431,20432,20433,20434,20435,20436,20437,20438,20439,20440,20441,20442,20443,20444,20445,20446,20447,20448,20456,20457,20458,20459,20460,20461,20462,20463,20464,20465,20578,20579,20580,20581,20582,20583,20584,20585,20586,20587,20588,20589,20590,20598,20599,20600,20601,20602,20603,20604,20605,20606,20607,20608,20609,20610,20611,20612,20613,20614,20615,20616,20617,20618,20619,20620,20621,20622,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20750,20751,20752,20753,20754,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20769,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20799,20800,20801,20802,20803,20804,20805,20806,20807,20808,20809,20922,20923,20924,20925,20926,20927,20928,20929,20930,20931,20932,20933,20934,20935,20936,20937,20938,20939,20940,20941,20942,20943,20944,20945,20946,20947,20948,20949,20950,20951,20952,20953,20954,20955,20956,20957,20958,20959,20960,20961,20962,20963,20964,20965,20966,20967,20968,20969,20970,20971,20972,20973,20974,20975,20976,20977,20978,20979,20980,20981,26944,26945,26946,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26964,26965,26966,26967,26968,26969,26970,26971,26972,26973,26974,26975,26976,26977,26978,26979,26980,26981,26982,26983,26984,26985,26986,26987,26988,26989,26990,26991,26992,26993,26994,26995,26996,26997,26998,26999,27000,27001,27116,27117,27118,27119,27120,27121,27122,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27133,27134,27135,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27146,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27159,27160,27161,27162,27163,27164,27165,27166,27167,27168,27169,27170,27171,27172,27173,27288,27289,27290,27291,27292,27293,27294,27295,27296,27297,27298,27299,27300,27301,27302,27304,27305,27306,27307,27308,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27460,27461,27462,27463,27464,27465,27466,27467,27468,27469,27470,27471,27472,27473,27474,27476,27477,27478,27479,27480,27481,27482,27483,27484,27485,27486,27487,27488,27489,27490,27491,27492,27493,27494,27495,27496,27497,27498,27499,27500,27501,27502,27504,27505,27506,27507,27508,27509,27510,27511,27512,27513,27514,27515,27516,27517,27632,27633,27634,27635,27636,27637,27638,27639,27640,27641,27642,27643,27644,27645,27650,27651,27652,27653,27654,27655,27656,27657,27658,27659,27660,27661,27662,27663,27664,27665,27666,27667,27668,27669,27670,27671,27672,27673,27677,27678,27679,27680,27681,27682,27683,27684,27685,27686,27687,27688,27689,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,27815,27823,27824,27825,27826,27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,27839,27840,27841,27842,27843,27844,27845,27849,27850,27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27976,27977,27978,27979,27980,27981,27982,27983,27984,27985,27986,27996,27997,27998,27999,28000,28001,28002,28003,28004,28005,28006,28007,28008,28009,28010,28011,28012,28013,28014,28015,28016,28017,28026,28027,28028,28029,28030,28031,28032,28033,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28198,28199,28200,28201,28202,28203,28204,28205,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,28355,28371,28372,28373,28374,28375,28376,28377,28492,28493,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28504,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28542,28543,28544,28545,28546,28547,28548,28549,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,28703,28704,28705,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29052,29053,29054,29055,29056,29057,29058,29059,29060,29061,29062,29063,29064,29065,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29190,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29213,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229,29230,29231,29232,29233,29234,29235,29236,29237,29352,29353,29354,29355,29356,29357,29358,29359,29360,29361,29362,29363,29364,29365,29366,29367,29368,29369,29370,29371,29372,29373,29374,29375,29376,29377,29378,29379,29380,29381,29382,29383,29384,29385,29386,29387,29388,29389,29390,29391,29392,29393,29394,29395,29396,29397,29398,29399,29400,29401,29402,29403,29404,29405,29406,29407,29408,29409,29524,29525,29526,29527,29528,29529,29530,29531,29532,29533,29534,29535,29536,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29548,29549,29550,29551,29552,29553,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29566,29567,29568,29569,29570,29571,29572,29573,29574,29575,29576,29577,29578,29579,29580,29581,29724,29725,29726,29727,29728,29729,29730,29731,29732,29733,29734,29735,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29746,29747,29748,29749,29750,29751,29752,29753,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29906,29907,29908,29909,29910,29911,29912,29913,29914,29915,29916,29917,29918,29919,29920,29921,29922,29923,29924,29925,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30412,30413,30414,30415,30416,30417,30418,30419,30420,30421,30422,30423,30424,30425,30426,30427,30428,30429,30430,30431,30432,30433,30434,30435,30436,30437,30438,30439,30440,30441,30584,30585,30586,30587,30588,30589,30590,30591,30592,30593,30594,30595,30596,30597,30598,30599,30600,30601,30602,30603,30604,30605,30606,30607,30608,30609,30610,30611,30612,30613,30756,30757,30758,30759,30760,30761,30762,30763,30764,30765,30766,30767,30768,30769,30770,30771,30772,30773,30774,30775,30776,30777,30778,30779,30780,30781,30782,30783,30784,30785,30928,30929,30930,30931,30932,30933,30934,30935,30936,30937,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30952,30953,30954,30955,30956,30957,31103,31104,31105,31106,31107,31108,31109,31110,31111,31112,31113,31114,31115,31116,31117,31118,31119,31120,31121,31122,31123,31124,31125,31126,31127,31128,31275,31276,31277,31278,31279,31280,31281,31282,31283,31284,31285,31286,31287,31289,31290,31291,31292,31293,31294,31295,31296,31297,31298,31299,31300,31447,31448,31449,31450,31451,31452,31453,31454,31455,31456,31457,31458,31459,31461,31462,31463,31464,31465,31466,31467,31468,31469,31470,31471,31472,31619,31620,31621,31622,31623,31624,31625,31626,31627,31636,31637,31638,31639,31640,31641,31642,31643,31644,31791,31792,31793,31794,31795,31796,31797,31798,31799,31808,31809,31810,31811,31812,31813,31814,31815,31816,31963,31964,31965,31966,31967,31968,31969,31970,31971,31981,31982,31983,31984,31985,31986,31987,31988,32135,32136,32137,32138,32139,32140,32141,32142,32143,32153,32154,32155,32156,32157,32158,32159,32160,32307,32308,32309,32310,32311,32312,32313,32314,32315,32325,32326,32327,32328,32329,32330,32331,32332,32479,32480,32481,32482,32483,32484,32485,32486,32487,32497,32498,32499,32500,32501,32502,32503,32504,32651,32652,32653,32654,32655,32656,32657,32658,32659,32660,32667,32668,32669,32670,32671,32672,32673,32674,32675,32676,32823,32824,32825,32826,32827,32828,32829,32830,32831,32832,32833,32834,32839,32840,32841,32842,32843,32844,32845,32846,32847,32848,32995,32996,32997,32998,32999,33000,33001,33002,33003,33004,33005,33006,33007,33008,33009,33010,33011,33012,33013,33014,33015,33016,33017,33018,33019,33020,33167,33168,33169,33170,33171,33172,33173,33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186,33187,33188,33189,33190,33191,33192,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37828,37829,37830,37831,37832,37833,37834,37835,37836,37837,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,38001,38002,38003,38004,38005,38006,38007,38008,38009,38124,38125,38126,38127,38128,38129,38130,38131,38132,38133,38134,38135,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38174,38175,38176,38177,38178,38179,38180,38181,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38346,38347,38348,38349,38350,38351,38352,38353,38468,38469,38470,38471,38472,38473,38474,38475,38476,38477,38478,38479,38519,38520,38521,38522,38523,38524,38525,38640,38641,38642,38643,38644,38645,38646,38647,38648,38649,38650,38651,38652,38658,38659,38660,38691,38692,38693,38694,38695,38696,38697,38812,38813,38814,38815,38816,38817,38818,38819,38820,38821,38822,38823,38824,38825,38830,38831,38832,38833,38846,38847,38848,38849,38850,38851,38855,38856,38857,38858,38864,38865,38866,38867,38868,38869,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,39002,39003,39004,39005,39006,39007,39008,39009,39017,39018,39019,39020,39021,39022,39023,39024,39025,39026,39027,39028,39029,39030,39036,39037,39038,39039,39040,39041,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39174,39175,39176,39177,39178,39179,39180,39181,39182,39183,39184,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39207,39208,39209,39210,39211,39212,39213,39328,39329,39330,39331,39332,39333,39334,39335,39336,39337,39338,39339,39340,39341,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39378,39379,39380,39381,39382,39383,39384,39385,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39532,39533,39534,39535,39536,39537,39538,39539,39540,39541,39542,39543,39544,39545,39550,39551,39552,39553,39554,39555,39556,39557,39672,39673,39674,39675,39676,39677,39678,39679,39680,39681,39682,39683,39684,39690,39691,39692,39693,39694,39695,39696,39697,39698,39699,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39711,39712,39721,39722,39723,39724,39725,39726,39727,39728,39729,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39892,39893,39894,39895,39896,39897,39898,39899,39900,39901,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40063,40064,40065,40066,40067,40068,40069,40070,40071,40072,40073,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40532,40533,40534,40535,40536,40537,40538,40539,40540,40541,40542,40543,40544,40545,40546,40553,40554,40555,40556,40557,40558,40559,40560,40561,40562,40563,40564,40565,40566,40567,40568,40578,40579,40580,40581,40582,40583,40584,40585,40586,40587,40588,40589,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40715,40716,40717,40725,40726,40727,40728,40729,40730,40731,40732,40733,40734,40735,40736,40737,40738,40739,40740,40741,40750,40751,40752,40753,40754,40755,40756,40757,40758,40759,40760,40761,40876,40877,40878,40879,40880,40881,40882,40883,40884,40885,40886,40887,40888,40889,40897,40898,40899,40900,40901,40902,40903,40904,40905,40906,40907,40908,40909,40910,40911,40912,40913,40923,40924,40925,40926,40927,40928,40929,40930,40931,40932,40933,41048,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41060,41068,41069,41070,41071,41072,41073,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41086,41095,41096,41097,41098,41099,41100,41101,41102,41103,41104,41105,41220,41221,41222,41223,41224,41225,41226,41227,41228,41229,41230,41231,41232,41239,41240,41241,41242,41243,41244,41245,41246,41247,41248,41249,41250,41251,41252,41253,41254,41255,41256,41257,41258,41259,41260,41266,41267,41268,41269,41270,41271,41272,41273,41274,41275,41276,41277,41392,41393,41394,41395,41396,41397,41398,41399,41400,41401,41402,41403,41404,41405,41410,41411,41412,41413,41414,41415,41416,41417,41418,41419,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41432,41433,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41448,41449,41564,41565,41566,41567,41568,41569,41570,41571,41572,41573,41574,41575,41576,41577,41578,41579,41580,41581,41582,41583,41584,41585,41586,41587,41588,41589,41590,41591,41592,41593,41594,41595,41596,41597,41598,41599,41600,41601,41602,41603,41604,41605,41606,41607,41608,41609,41610,41611,41612,41613,41614,41615,41616,41617,41618,41619,41620,41621,41736,41737,41738,41739,41740,41741,41742,41743,41744,41745,41746,41747,41748,41749,41750,41751,41752,41753,41754,41755,41756,41757,41758,41759,41760,41761,41762,41763,41764,41765,41766,41767,41768,41769,41770,41771,41772,41773,41774,41775,41776,41777,41778,41779,41780,41781,41782,41783,41784,41785,41786,41787,41788,41789,41790,41791,41792,41793,43456,43457,43458,43459,43460,43461,43462,43463,43464,43465,43466,43467,43468,43469,43470,43471,43472,43473,43474,43475,43476,43477,43478,43479,43480,43481,43482,43483,43484,43485,43486,43487,43488,43489,43490,43491,43492,43493,43494,43495,43496,43497,43498,43499,43500,43501,43502,43503,43504,43505,43506,43507,43508,43509,43510,43511,43512,43513,43628,43629,43630,43631,43632,43633,43634,43635,43636,43637,43638,43639,43640,43641,43642,43643,43644,43645,43646,43647,43648,43649,43650,43651,43652,43653,43654,43655,43656,43657,43658,43659,43660,43661,43662,43663,43664,43665,43666,43667,43668,43669,43670,43671,43672,43673,43674,43675,43676,43677,43678,43679,43680,43681,43682,43683,43684,43685,43800,43801,43802,43803,43804,43805,43806,43807,43808,43809,43810,43811,43812,43813,43814,43815,43816,43817,43818,43819,43820,43821,43822,43823,43824,43825,43826,43827,43828,43829,43830,43831,43832,43833,43834,43836,43837,43838,43839,43840,43841,43842,43843,43844,43845,43846,43847,43848,43849,43850,43851,43852,43853,43854,43855,43856,43857,43972,43973,43974,43975,43976,43977,43978,43979,43980,43993,43994,43995,43996,43997,43998,43999,44000,44001,44002,44003,44004,44005,44015,44016,44017,44018,44019,44020,44021,44022,44023,44024,44025,44026,44027,44028,44029,44144,44145,44146,44147,44148,44149,44150,44151,44152,44165,44166,44167,44168,44169,44170,44171,44172,44173,44174,44175,44176,44188,44189,44190,44191,44192,44193,44194,44195,44196,44197,44198,44199,44200,44201,44316,44317,44318,44319,44320,44321,44322,44323,44324,44337,44338,44339,44340,44341,44342,44343,44344,44345,44346,44347,44348,44349,44361,44362,44363,44364,44365,44366,44367,44368,44369,44370,44371,44372,44373,44488,44489,44490,44491,44492,44493,44494,44495,44496,44509,44510,44511,44512,44513,44514,44515,44516,44517,44518,44519,44520,44534,44535,44536,44537,44538,44539,44540,44541,44542,44543,44544,44545,44660,44661,44662,44663,44664,44665,44666,44667,44668,44681,44682,44683,44684,44685,44686,44687,44688,44689,44690,44691,44692,44693,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44832,44833,44834,44835,44836,44837,44838,44839,44840,44841,44842,44844,44845,44848,44849,44851,44852,44853,44854,44855,44856,44857,44858,44859,44860,44861,44862,44863,44864,44865,44866,44867,44868,44869,44880,44881,44882,44883,44884,44885,44886,44887,44888,44889,45004,45005,45006,45007,45008,45009,45010,45011,45012,45013,45014,45015,45016,45017,45018,45019,45020,45021,45023,45024,45025,45026,45027,45028,45029,45030,45031,45032,45033,45034,45035,45036,45037,45038,45039,45040,45041,45042,45043,45052,45053,45054,45055,45056,45057,45058,45059,45060,45061,45176,45177,45178,45179,45180,45181,45182,45183,45184,45185,45186,45187,45188,45189,45190,45191,45192,45193,45195,45196,45197,45198,45199,45200,45201,45202,45203,45204,45205,45206,45207,45208,45209,45210,45211,45212,45213,45214,45215,45216,45224,45225,45226,45227,45228,45229,45230,45231,45232,45233,45348,45349,45350,45351,45352,45353,45354,45355,45356,45357,45358,45360,45361,45362,45363,45364,45365,45367,45368,45369,45370,45371,45372,45373,45374,45375,45376,45377,45378,45379,45380,45381,45382,45383,45384,45385,45386,45387,45388,45389,45390,45396,45397,45398,45399,45400,45401,45402,45403,45404,45405,45520,45521,45522,45523,45524,45525,45526,45527,45528,45529,45530,45532,45533,45534,45535,45536,45537,45539,45540,45541,45542,45543,45544,45545,45546,45547,45548,45549,45550,45551,45552,45553,45554,45555,45556,45557,45558,45559,45560,45561,45562,45563,45567,45568,45569,45570,45571,45572,45573,45574,45575,45576,45577,45692,45693,45694,45695,45696,45697,45698,45699,45700,45701,45702,45704,45705,45706,45707,45708,45709,45711,45712,45713,45714,45715,45716,45717,45718,45719,45720,45721,45722,45723,45724,45725,45726,45727,45728,45729,45730,45731,45732,45733,45734,45735,45736,45737,45738,45739,45740,45741,45742,45743,45744,45745,45746,45747,45748,45749,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45876,45877,45878,45879,45880,45881,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,46036,46037,46038,46039,46040,46041,46042,46043,46044,46045,46046,46048,46049,46050,46051,46052,46053,46055,46056,46057,46058,46059,46060,46061,46062,46063,46064,46065,46208,46209,46210,46211,46212,46213,46214,46215,46216,46217,46218,46220,46221,46222,46223,46224,46225,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46237,46380,46381,46382,46383,46384,46385,46386,46387,46388,46389,46390,46392,46393,46394,46395,46396,46397,46399,46400,46401,46402,46403,46404,46405,46406,46407,46408,46409,46552,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46564,46565,46566,46567,46568,46569,46571,46572,46573,46574,46575,46576,46577,46578,46579,46580,46581,46724,46725,46726,46727,46728,46729,46730,46731,46732,46737,46738,46739,46740,46745,46746,46747,46748,46749,46750,46751,46752,46753,46896,46897,46898,46899,46900,46901,46902,46903,46904,46910,46911,46917,46918,46919,46920,46921,46922,46923,46924,46925,47068,47069,47070,47071,47072,47073,47074,47075,47076,47077,47082,47083,47089,47090,47091,47092,47093,47094,47095,47096,47097,47240,47241,47242,47243,47244,47245,47246,47247,47248,47254,47255,47261,47262,47263,47264,47265,47266,47267,47268,47269,47412,47413,47414,47415,47416,47417,47418,47419,47420,47421,47426,47427,47432,47433,47434,47435,47436,47437,47438,47439,47440,47441,47584,47585,47586,47587,47588,47589,47590,47591,47592,47593,47594,47595,47596,47597,47598,47599,47600,47601,47602,47603,47604,47605,47606,47607,47608,47609,47610,47611,47612,47613,47756,47757,47758,47759,47760,47761,47762,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47784,47785,52084,52085,52086,52087,52088,52089,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,52105,52106,52107,52108,52109,52110,52111,52112,52113,52256,52257,52258,52259,52260,52261,52262,52263,52264,52265,52266,52267,52268,52269,52270,52271,52272,52273,52274,52275,52276,52277,52278,52279,52280,52281,52282,52283,52284,52285,52428,52429,52430,52431,52432,52433,52434,52435,52436,52437,52438,52439,52440,52441,52442,52443,52444,52445,52446,52447,52448,52449,52450,52451,52452,52453,52454,52455,52456,52457,52600,52601,52602,52603,52604,52605,52606,52607,52608,52609,52610,52611,52612,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52628,52629,52772,52773,52774,52775,52776,52777,52778,52779,52780,52781,52782,52783,52784,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52944,52945,52946,52947,52948,52949,52950,52951,52952,52953,52954,52964,52965,52966,52967,52968,52969,52970,52971,52972,52973,53116,53117,53118,53119,53120,53121,53122,53123,53124,53125,53126,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53288,53289,53290,53291,53292,53293,53294,53295,53296,53297,53298,53299,53307,53308,53309,53310,53311,53312,53313,53314,53315,53316,53317,53460,53461,53462,53463,53464,53465,53466,53467,53468,53469,53470,53471,53472,53478,53479,53480,53481,53482,53483,53484,53485,53486,53487,53488,53489,53632,53633,53634,53635,53636,53637,53638,53639,53640,53641,53642,53643,53644,53645,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53804,53805,53806,53807,53808,53809,53810,53811,53812,53813,53814,53815,53816,53817,53818,53819,53820,53821,53822,53823,53824,53825,53826,53827,53828,53829,53830,53831,53832,53833,53976,53977,53978,53979,53980,53981,53982,53983,53984,53985,53986,53987,53988,53989,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54000,54001,54002,54003,54004,54005,2408,2580,2581,2753,2754,2926,3098,3270,3441,3442,3613,3614,3785,3957,4129,4301,4473,4645,4817,4988,4989,5160,5161,5332,5504,5676,5848,6020,6192,6364,6536,6708,6880,6881,7053,7225,7397,7569,7570,7742,7914,8085,8086,8256,8257,8258,8428,8429,13793,13794,14115,14116,14965,14966,15998,15999,16552,16553,17259,17260,18265,18266,18303,18304,16007,16177,16181,16404,16423,17418,17423,42527,42695,42696,42697,42698,42699,42867,42868,65,66,67,75,76,77,238,239,240,246,247,248,411,412,413,414,415,416,417,418,419,584,585,586,588,589,590,929,933,1101,1105,1439,1440,1441,1442,1452,1453,1454,1455,1610,1611,1614,1615,1623,1624,1627,1628,1782,1787,1795,1800,1954,1972,2126,2144,2298,2316,2470,2488,2642,2660,2814,2831,2832,8397,8398,8399,8422,8423,8424,8568,8569,8570,8595,8596,8597,8740,8741,8768,8769,8912,8941,9084,9113,9256,9285,9428,9457,9600,9628,9629,9772,9773,9800,9945,9946,9972,9976,9977,9978,9979,10117,10118,10144,10151,10152,10289,10290,10316,10324,10325,10461,10488,10497,10633,10659,10660,10669,10805,10831,10840,10841,10977,11003,11004,11011,11012,11013,11149,11175,11176,11180,11181,11182,11183,11184,11321,11348,11352,11353,11354,11355,11493,11520,11665,11692,11739,11837,11864,11911,12009,12036,12082,12083,12181,12208,12237,12238,12239,12240,12241,12242,12243,12244,12249,12250,12251,12252,12253,12254,12255,12353,12354,12379,12380,12384,12385,12386,12387,12388,12389,12390,12391,12392,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12526,12527,12550,12551,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12579,12580,12581,12588,12589,12590,12591,12592,12593,12699,12722,12736,12737,12738,12739,12741,12742,12743,12744,12750,12751,12752,12910,12911,12912,12913,12914,12915,12916,12917,12921,12922,12923,13083,13084,13085,13088,13089,13090,13091,13092,13093,13094,13261,13262,13264,13265,14492,14493,14494,14495,14496,14497,14498,14663,14664,14670,14671,14834,14835,14843,14844,15006,15016,15178,15188,15350,15360,15522,15523,15531,15532,15694,15695,15696,15702,15703,15704,15867,15868,15869,15870,15872,15873,15874,15875,16040,16041,16042,16044,16045,16046,104,105,106,107,108,109,193,194,195,196,197,198,213,214,215,216,217,218,219,220,224,229,230,231,232,233,249,250,251,252,253,254,255,256,260,271,272,273,274,275,276,277,278,279,280,281,282,283,284,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,440,441,442,443,444,445,446,447,448,453,454,455,456,519,520,521,522,523,524,525,526,529,530,531,532,533,534,535,536,537,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,564,565,566,567,568,569,570,571,572,573,577,578,579,580,581,582,583,591,592,593,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,628,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,719,720,721,722,723,724,754,755,756,762,763,764,781,782,783,784,788,789,790,791,792,793,794,795,800,801,860,861,862,863,870,871,872,873,877,878,879,880,881,882,883,884,885,886,899,900,901,902,903,904,905,906,910,911,912,913,914,915,916,917,918,919,920,921,922,927,928,929,930,932,933,934,935,946,947,948,949,950,951,952,953,958,959,960,967,968,972,973,1032,1033,1034,1036,1037,1038,1039,1040,1041,1042,1047,1048,1049,1058,1059,1060,1065,1066,1067,1068,1069,1070,1071,1078,1079,1080,1081,1082,1094,1095,1096,1097,1098,1100,1101,1102,1104,1105,1106,1108,1109,1110,1111,1114,1115,1116,1117,1118,1125,1126,1127,1128,1129,1130,1140,1145,1207,1208,1214,1215,1216,1217,1218,1219,1226,1227,1228,1229,1232,1233,1234,1235,1236,1237,1270,1271,1279,1280,1283,1284,1285,1286,1311,1312,1316,1317,1378,1379,1397,1398,1401,1402,1443,1444,1445,1446,1448,1449,1450,1451,1483,1484,1488,1550,1569,1574,1655,1660,1722,1741,1742,1745,1746,1826,1827,1832,1893,1894,1913,1914,1915,1916,1917,1918,1959,1960,1961,1962,1964,1965,1966,1967,1998,1999,2003,2004,2065,2086,2087,2088,2089,2135,2170,2175,2236,2237,2341,2342,2347,2513,2514,2519,2520,2643,2659,2685,2691,2692,2759,2760,2761,2762,2763,2802,2803,2804,2805,2815,2816,2817,2818,2828,2829,2830,2831,2857,2864,2930,2931,2932,2934,2935,2936,2964,2973,2974,2977,2978,2987,2988,2989,2990,3000,3001,3002,3003,3029,3036,3102,3103,3107,3108,3128,3136,3145,3150,3162,3163,3171,3172,3196,3197,3198,3199,3201,3202,3208,3274,3280,3300,3307,3308,3317,3318,3321,3322,3334,3335,3336,3342,3343,3344,3367,3368,3371,3372,3374,3379,3380,3446,3452,3472,3473,3476,3477,3478,3479,3480,3489,3490,3491,3492,3493,3494,3507,3508,3509,3510,3511,3512,3513,3514,3515,3539,3544,3546,3551,3618,3619,3623,3624,3644,3645,3646,3647,3648,3649,3650,3651,3662,3663,3664,3665,3680,3681,3682,3684,3685,3686,3711,3712,3715,3716,3718,3723,3791,3792,3793,3794,3795,3817,3818,3819,3820,3883,3884,3885,3886,3887,3888,3890,3891,3895,3896,4056,4057,4058,4059,4063,4064,4067,4068,4236,4237,4240,4409,4412,4581,4584,4681,4682,4683,4684,4685,4688,4689,4690,4704,4713,4753,4756,4850,4851,4852,4853,4854,4855,4856,4857,4860,4861,4862,4863,4876,4885,4924,4925,4928,5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5034,5035,5036,5048,5049,5056,5057,5076,5077,5078,5080,5081,5095,5096,5097,5100,5171,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5207,5208,5209,5220,5221,5222,5227,5228,5229,5247,5248,5251,5253,5254,5264,5266,5267,5268,5271,5272,5335,5343,5353,5354,5355,5356,5357,5372,5373,5376,5377,5380,5381,5382,5393,5394,5395,5396,5397,5398,5399,5400,5419,5426,5435,5436,5438,5439,5443,5507,5514,5515,5522,5523,5524,5525,5526,5543,5544,5549,5550,5553,5554,5566,5567,5568,5569,5570,5571,5591,5592,5597,5598,5607,5608,5615,5679,5680,5685,5686,5687,5693,5694,5695,5696,5697,5707,5708,5709,5710,5711,5712,5713,5714,5715,5722,5723,5726,5763,5764,5765,5766,5767,5768,5769,5770,5779,5787,5788,5851,5852,5853,5854,5855,5856,5857,5858,5865,5866,5872,5873,5874,5875,5876,5877,5878,5879,5895,5898,5919,5926,5927,5928,5929,5930,5936,5937,5938,5939,5940,5941,5950,5951,5959,5960,6024,6025,6026,6027,6028,6029,6037,6043,6044,6067,6070,6091,6095,6096,6097,6098,6099,6100,6101,6102,6103,6122,6123,6132,6209,6214,6215,6239,6242,6263,6264,6266,6267,6268,6269,6270,6274,6275,6276,6277,6278,6279,6285,6294,6303,6304,6380,6381,6386,6411,6414,6415,6435,6436,6437,6438,6439,6447,6448,6449,6450,6451,6452,6457,6465,6466,6475,6551,6552,6553,6558,6583,6584,6586,6587,6588,6608,6609,6610,6623,6624,6625,6628,6629,6637,6638,6647,6716,6717,6718,6719,6720,6721,6723,6724,6730,6756,6757,6759,6760,6784,6785,6786,6787,6788,6796,6797,6798,6799,6800,6801,6809,6819,6888,6889,6890,6891,6892,6893,6895,6901,6902,6929,6932,6938,6956,6957,6959,6960,6961,6969,6970,6971,6972,6980,6981,6990,6991,7060,7073,7101,7104,7110,7120,7128,7132,7133,7152,7153,7156,7158,7162,7231,7232,7245,7273,7276,7282,7283,7292,7300,7301,7305,7324,7327,7328,7330,7331,7334,7403,7404,7408,7409,7411,7416,7417,7454,7455,7456,7463,7464,7473,7477,7496,7499,7503,7506,7507,7575,7579,7580,7583,7584,7585,7586,7587,7588,7627,7628,7629,7630,7631,7634,7635,7636,7645,7649,7668,7671,7672,7674,7675,7678,7679,7747,7750,7751,7789,7792,7800,7801,7802,7803,7804,7805,7806,7807,7817,7818,7820,7821,7840,7841,7843,7844,7846,7847,7851,7919,7922,7961,7964,7975,7976,7977,7978,7991,8013,8016,8018,8023,8133,8136,8185,8195,8263,8266,8305,8308,8356,8357,8367,8400,8401,8409,8410,8411,8412,8419,8420,8421,8435,8438,8476,8477,8480,8481,8523,8524,8525,8526,8527,8528,8529,8538,8539,8571,8572,8573,8576,8577,8578,8579,8580,8581,8584,8585,8586,8587,8588,8589,8592,8593,8594,8606,8607,8610,8647,8648,8649,8652,8653,8654,8694,8695,8696,8697,8698,8699,8700,8710,8742,8743,8744,8747,8748,8761,8762,8765,8766,8767,8772,8773,8774,8775,8776,8777,8778,8779,8782,8783,8818,8819,8820,8825,8826,8827,8847,8848,8851,8852,8861,8862,8863,8864,8865,8866,8867,8874,8875,8876,8878,8879,8882,8914,8915,8918,8919,8934,8935,8938,8939,8944,8945,8946,8947,8948,8949,8950,8954,8955,8956,8969,8970,8971,8972,8973,8974,8975,8976,8980,8985,8986,8989,8990,8991,8998,8999,9000,9001,9002,9018,9019,9020,9023,9024,9025,9026,9027,9028,9029,9032,9033,9034,9035,9037,9038,9045,9046,9051,9052,9054,9055,9086,9090,9107,9111,9127,9128,9129,9130,9131,9136,9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9161,9162,9171,9172,9173,9174,9175,9189,9190,9191,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9217,9224,9226,9227,9258,9262,9279,9283,9288,9289,9290,9291,9292,9293,9300,9301,9302,9303,9304,9307,9308,9309,9310,9311,9312,9313,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9335,9336,9337,9338,9339,9340,9341,9342,9343,9346,9347,9348,9360,9361,9362,9373,9374,9375,9376,9389,9390,9395,9396,9399,9430,9434,9451,9455,9465,9466,9475,9476,9479,9480,9505,9506,9507,9515,9516,9519,9520,9521,9522,9523,9524,9525,9526,9527,9530,9531,9532,9533,9536,9539,9540,9541,9542,9543,9544,9561,9562,9563,9564,9565,9566,9567,9568,9571,9602,9606,9623,9626,9627,9632,9633,9634,9635,9636,9637,9638,9639,9640,9663,9664,9665,9666,9667,9668,9669,9670,9674,9677,9688,9689,9692,9693,9694,9695,9696,9697,9698,9699,9702,9703,9704,9706,9707,9708,9716,9717,9734,9735,9736,9737,9738,9739,9742,9743,9774,9775,9778,9779,9794,9795,9798,9809,9810,9812,9813,9814,9815,9816,9817,9818,9819,9820,9823,9824,9829,9830,9831,9832,9833,9834,9835,9842,9843,9844,9845,9846,9861,9862,9877,9878,9889,9912,9913,9914,9947,9948,9950,9951,9952,9965,9966,9967,9970,9982,9983,9996,9997,9998,9999,10000,10001,10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10046,10047,10048,10049,10061,10073,10074,10075,10076,10077,10078,10082,10083,10084,10120,10123,10124,10137,10138,10142,10155,10156,10233,10242,10243,10244,10245,10250,10251,10252,10253,10254,10291,10292,10296,10309,10314,10328,10329,10405,10406,10412,10413,10414,10463,10464,10467,10468,10481,10486,10501,10578,10579,10582,10583,10584,10635,10638,10639,10653,10654,10657,10658,10673,10751,10752,10753,10754,10807,10810,10826,10829,10845,10979,10982,10998,11001,11017,11093,11094,11095,11096,11151,11154,11170,11173,11174,11188,11189,11265,11266,11268,11269,11323,11326,11327,11342,11345,11346,11359,11360,11361,11436,11437,11441,11442,11443,11495,11498,11499,11514,11515,11518,11528,11529,11530,11531,11532,11608,11615,11616,11667,11671,11687,11690,11699,11700,11701,11702,11703,11780,11839,11842,11843,11859,11862,11868,11869,11870,11871,11872,11952,12011,12014,12031,12034,12040,12041,12042,12043,12124,12183,12186,12203,12206,12296,12355,12356,12357,12358,12364,12365,12366,12368,12369,12370,12375,12376,12377,12378,12414,12415,12468,12531,12532,12533,12534,12535,12536,12539,12542,12543,12544,12545,12546,12587,12588,12640,12700,12701,12702,12703,12718,12719,12720,12721,12728,12743,12760,12761,12780,12781,12782,12783,12784,12785,12811,12812,12900,12914,12915,12933,12951,12952,12957,12958,12983,13072,13085,13086,13105,13123,13130,13131,13132,13139,13145,13155,13244,13256,13257,13276,13277,13295,13296,13304,13305,13311,13317,13327,13416,13417,13427,13428,13447,13448,13449,13467,13468,13469,13477,13478,13483,13484,13488,13489,13499,13589,13599,13619,13620,13640,13641,13642,13643,13650,13655,13656,13658,13659,13660,13661,13671,13761,13770,13771,13791,13804,13805,13806,13807,13813,13814,13815,13816,13817,13821,13822,13828,13829,13831,13832,13843,13844,13933,13934,13941,13942,13963,13975,13976,13979,13980,13987,13988,13989,13990,13991,13992,13993,13994,14015,14016,14106,14113,14134,14135,14146,14147,14152,14153,14154,14161,14162,14163,14164,14165,14188,14278,14285,14286,14305,14306,14307,14317,14318,14326,14327,14360,14450,14457,14458,14459,14460,14461,14462,14463,14468,14469,14470,14471,14472,14473,14474,14475,14476,14477,14478,14488,14489,14499,14500,14532,14622,14623,14630,14631,14632,14633,14634,14635,14636,14637,14638,14639,14640,14641,14642,14643,14644,14645,14646,14647,14648,14649,14660,14672,14673,14703,14704,14795,14807,14808,14809,14811,14812,14832,14845,14846,14875,14967,15004,15018,15046,15047,15139,15176,15190,15217,15218,15311,15348,15362,15389,15483,15484,15519,15520,15534,15561,15656,15657,15689,15690,15691,15706,15733,15829,15860,15861,15877,15878,15886,15887,15888,15889,15905,16001,16031,16032,16049,16050,16057,16058,16061,16062,16076,16077,16172,16173,16203,16220,16221,16229,16234,16235,16248,16344,16345,16375,16391,16392,16393,16401,16407,16420,16516,16547,16548,16558,16559,16560,16561,16562,16563,16564,16571,16572,16573,16579,16592,16688,16719,16720,16721,16729,16730,16731,16732,16734,16735,16742,16743,16751,16764,16765,16860,16892,16893,16894,16895,16896,16900,16901,16902,16913,16914,16923,16928,16936,16937,16938,17032,17038,17065,17066,17067,17068,17069,17070,17071,17072,17073,17084,17085,17094,17095,17100,17109,17110,17111,17112,17113,17204,17210,17240,17241,17242,17243,17244,17255,17256,17265,17266,17267,17272,17273,17282,17283,17284,17285,17286,17376,17377,17382,17383,17427,17434,17435,17436,17437,17438,17444,17445,17447,17448,17449,17450,17451,17452,17453,17457,17458,17459,17460,17461,17549,17550,17554,17555,17556,17559,17560,17561,17562,17563,17564,17565,17566,17567,17568,17599,17600,17605,17606,17607,17608,17609,17617,17618,17620,17621,17622,17624,17625,17626,17627,17628,17630,17631,17632,17633,17634,17635,17636,17722,17727,17728,17729,17730,17731,17732,17733,17734,17735,17736,17737,17738,17739,17740,17741,17771,17772,17773,17774,17775,17776,17777,17778,17797,17798,17799,17800,17805,17806,17807,17808,17894,17900,17901,17902,17903,17912,17913,17914,17944,17945,17946,17947,17948,17949,17972,18066,18067,18085,18086,18087,18099,18144,18239,18240,18258,18259,18260,18271,18316,18412,18413,18431,18432,18433,18442,18443,18487,18488,18585,18604,18605,18606,18611,18612,18613,18614,18615,18659,18757,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18831,18929,18950,18951,18952,18953,18954,18955,19003,19100,19101,19175,19270,19271,19272,19273,19347,19442,19443,19444,19519,19614,19691,19785,19786,19836,19863,19957,19958,20008,20034,20035,20129,20180,20181,20205,20206,20301,20352,20353,20354,20376,20377,20472,20473,20525,20526,20540,20548,20644,20645,20698,20712,20720,20816,20870,20883,20884,20892,20893,20988,21042,21043,21054,21055,21056,21064,21065,21066,21160,21214,21215,21216,21225,21226,21227,21237,21238,21239,21332,21387,21388,21389,21390,21391,21392,21393,21394,21395,21396,21397,21398,21410,21411,21504,21560,21561,21562,21563,21564,21566,21567,21568,21569,21583,21676,21755,21848,21849,21927,21928,22021,22099,22100,22193,22272,22365,22369,22444,22536,22537,22541,22553,22616,22708,22709,22713,22714,22725,22787,22788,22880,22885,22886,22887,22896,22897,22958,22959,23052,23058,23059,23060,23061,23062,23063,23064,23065,23066,23067,23068,23069,23130,23224,23231,23232,23233,23234,23235,23237,23238,23239,23240,23302,23396,23474,23568,23646,23740,23818,23912,23913,23990,24085,24162,24163,24257,24334,24335,24336,24429,24507,24508,24509,24510,24511,24512,24513,24514,24515,24516,24600,24601,24680,24681,24682,24683,24684,24685,24686,24687,24688,24771,24772,24773,24942,24943,24944,25112,25113,25114,25115,25284,25285,25286,42728,42900,43072,43073,43244,43245,43246,43255,43417,43418,43419,43420,43421,43422,43423,43424,43425,43426,43427,43590,43591,43592,43593,43594,43595,43596,43597,43598,43599,44043,44215,44219,44220,44221,44222,44223,44224,44225,44226,44387,44388,44390,44391,44392,44393,44394,44395,44396,44397,44398,44399,44400,44559,44560,44561,44562,44563,44570,44571,44572,44573,44574,44724,44725,44732,44733,44734,44744,44745,44746,44799,44895,44896,44897,44961,44962,44963,44964,44965,44966,44971,45066,45067,45068,45090,45091,45092,45093,45126,45132,45133,45134,45135,45136,45137,45138,45139,45142,45143,45238,45239,45260,45261,45262,45265,45266,45267,45298,45303,45304,45305,45310,45311,45312,45313,45314,45315,45410,45431,45432,45439,45440,45470,45471,45474,45475,45476,45483,45484,45485,45486,45582,45603,45612,45642,45643,45644,45645,45646,45647,45754,45775,45783,45784,45815,45816,45817,45818,45926,45947,45948,45954,45955,45956,46098,46119,46120,46125,46126,46127,46270,46292,46297,46298,46312,46442,46464,46465,46468,46469,46484,46614,46615,46636,46637,46638,46639,46640,46641,46645,46655,46656,46787,46809,46810,46811,46812,46817,46824,46825,46826,46827,46828,46959,46989,46990,46993,46994,46995,46996,46997,46998,46999,47130,47131,47161,47162,47163,47164,47165,47166,47167,47168,47302,47303,47334,47335,47336,47337,47474,47646,47659,47818,47823,47831,47990,47995,48002,48003,48162,48167,48168,48171,48172,48173,48174,48175,48236,48334,48339,48340,48341,48342,48343,48344,48345,48346,48408,48506,48512,48513,48514,48515,48569,48579,48580,48678,48741,48748,48749,48750,48751,48752,48850,48872,48873,48874,48875,48913,48914,48917,48918,48919,48920,48921,48922,48923,49022,49023,49042,49043,49044,49047,49048,49049,49074,49075,49076,49085,49086,49087,49088,49089,49090,49091,49092,49195,49213,49214,49221,49222,49244,49245,49246,49248,49249,49250,49258,49259,49260,49261,49367,49385,49394,49395,49415,49416,49422,49423,49539,49557,49567,49587,49595,49711,49712,49729,49730,49738,49739,49759,49766,49767,49884,49901,49902,49909,49910,49911,49931,49932,49935,49936,49937,49938,49939,50056,50074,50081,50082,50103,50104,50105,50106,50107,50108,50109,50110,50228,50246,50253,50276,50277,50278,50279,50400,50418,50425,50571,50572,50590,50591,50596,50597,50742,50743,50744,50762,50763,50764,50765,50766,50767,50768,50769,50823,50913,50914,50915,50935,50936,50937,50939,50940,50995,50996,50998,50999,51000,51001,51002,51003,51004,51085,51086,51167,51168,51170,51171,51172,51173,51174,51175,51176,51257,51429,51601,51772,51773,51944,51945,52116,9023,9024,9119,9295,9470,9471,9486,9487,9494,9521,9522,9523,9524,9527,9530,9646,9653,9707,9864,51,52,53,54,86,87,88,89,90,223,225,259,261,262,278,279,366,367,368,369,386,387,388,389,390,391,401,402,403,404,405,422,423,425,445,446,447,448,449,450,451,452,533,534,535,536,537,538,539,540,541,545,546,553,556,557,558,559,560,561,562,563,564,565,567,568,569,570,571,574,575,576,577,578,579,580,581,592,593,594,595,596,597,598,602,603,605,606,607,608,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,691,692,693,694,695,696,697,702,704,705,706,707,708,709,710,711,712,713,714,717,718,719,724,725,726,727,728,729,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,795,796,797,798,799,800,862,863,864,865,866,867,868,869,870,871,872,873,874,876,877,878,879,880,881,882,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,925,926,927,928,929,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,952,953,954,955,956,957,958,959,968,969,970,971,972,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1059,1060,1061,1063,1064,1065,1066,1067,1068,1081,1098,1099,1101,1102,1104,1105,1106,1107,1108,1114,1115,1116,1126,1127,1128,1140,1141,1142,1143,1144,1145,1204,1205,1206,1207,1215,1216,1271,1272,1273,1274,1276,1277,1278,1279,1312,1313,1314,1315,1316,1376,1377,1378,1444,1445,1446,1448,1449,1450,1484,1485,1486,1487,1488,1548,1549,1550,1656,1657,1658,1659,1660,1720,1721,1722,1828,1829,1830,1831,1892,1893,2000,2001,2002,2003,2064,2065,2172,2173,2174,2175,2236,2343,2344,2345,2346,2347,2515,2516,2517,2518,2687,2688,2689,2690,2858,2859,2860,2861,2862,3029,3030,3031,3032,3033,3034,3202,3203,3204,3205,3206,3374,3375,3376,3377,3378,3547,3548,3549,3550,3551,3720,3721,3722,3723,3893,3894,3895,4064,4065,4066,4067,4068,4238,4239,4240,4410,4411,4412,4582,4583,4584,4754,4755,4756,4854,4855,4856,4926,4927,4928,5022,5023,5024,5025,5026,5027,5028,5029,5032,5033,5034,5097,5098,5099,5100,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5204,5205,5206,5207,5269,5270,5271,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5372,5373,5376,5377,5378,5379,5380,5438,5439,5440,5441,5442,5443,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5550,5551,5552,5553,5554,5608,5610,5611,5612,5613,5614,5615,5695,5699,5700,5701,5702,5703,5704,5705,5706,5707,5724,5725,5726,5780,5782,5783,5784,5785,5786,5787,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876,5877,5878,5896,5897,5898,5952,5954,5955,5956,5957,5958,5959,6038,6039,6040,6041,6042,6043,6068,6069,6070,6124,6126,6127,6128,6129,6210,6211,6212,6213,6214,6240,6241,6242,6298,6299,6300,6301,6382,6383,6384,6385,6405,6406,6412,6413,6414,6468,6470,6471,6472,6473,6554,6555,6556,6557,6576,6577,6578,6579,6585,6586,6639,6640,6642,6643,6644,6645,6723,6724,6725,6726,6727,6728,6729,6730,6749,6750,6751,6752,6757,6758,6759,6811,6812,6814,6815,6816,6817,6890,6891,6892,6893,6895,6896,6897,6898,6899,6900,6901,6923,6929,6930,6931,6932,6982,6983,6984,6986,6987,6988,6989,6990,7060,7061,7062,7063,7064,7065,7067,7068,7069,7070,7071,7072,7101,7102,7103,7104,7153,7154,7155,7160,7161,7162,7232,7233,7234,7235,7236,7237,7239,7240,7241,7242,7243,7244,7245,7273,7274,7275,7276,7324,7325,7326,7332,7333,7334,7403,7404,7405,7406,7407,7408,7409,7411,7412,7413,7414,7415,7416,7496,7497,7498,7504,7505,7506,7575,7576,7577,7578,7579,7584,7585,7586,7587,7669,7670,7671,7676,7677,7678,7747,7748,7749,7750,7776,7777,7778,7789,7790,7791,7792,7842,7843,7847,7848,7849,7850,7919,7920,7921,7922,7948,7949,7950,7961,7962,7963,7964,8014,8015,8016,8018,8019,8020,8021,8022,8119,8120,8121,8122,8133,8134,8135,8136,8186,8187,8188,8190,8191,8192,8193,8263,8264,8265,8266,8291,8292,8293,8294,8305,8306,8307,8308,8358,8359,8360,8362,8363,8364,8365,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8435,8436,8437,8438,8462,8463,8464,8465,8466,8477,8478,8479,8480,8530,8531,8532,8534,8535,8536,8537,8573,8574,8575,8576,8577,8578,8579,8580,8585,8586,8587,8588,8589,8590,8591,8592,8607,8608,8609,8610,8634,8635,8636,8637,8638,8649,8650,8651,8652,8698,8699,8700,8701,8702,8703,8704,8706,8707,8708,8709,8744,8745,8746,8747,8762,8763,8764,8765,8779,8780,8781,8782,8806,8807,8808,8809,8810,8821,8822,8823,8824,8825,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8880,8881,8882,8914,8915,8916,8917,8918,8935,8936,8937,8938,8944,8945,8946,8947,8948,8949,8951,8952,8953,8954,8955,8977,8978,8979,8981,8982,8983,8992,8993,8994,8995,8996,8997,8998,9020,9038,9039,9040,9041,9042,9043,9044,9052,9053,9054,9086,9087,9088,9089,9090,9107,9108,9109,9110,9111,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9143,9144,9145,9146,9147,9148,9150,9151,9152,9153,9157,9158,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9191,9192,9195,9196,9198,9199,9211,9212,9213,9214,9225,9226,9258,9259,9260,9261,9262,9279,9280,9281,9282,9283,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9325,9326,9327,9328,9329,9330,9333,9334,9335,9336,9342,9343,9344,9345,9362,9363,9364,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9383,9384,9385,9386,9397,9398,9399,9430,9431,9432,9433,9434,9451,9452,9453,9454,9455,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9479,9480,9481,9482,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9505,9516,9517,9518,9533,9534,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9554,9555,9556,9557,9558,9559,9560,9569,9570,9571,9602,9603,9604,9605,9606,9623,9624,9625,9626,9640,9641,9642,9643,9644,9645,9646,9647,9648,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9689,9690,9691,9692,9693,9703,9704,9705,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9740,9741,9742,9775,9776,9777,9778,9795,9796,9797,9798,9817,9818,9819,9820,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9844,9845,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9874,9875,9876,9877,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9948,9949,9950,9951,9967,9968,9969,9970,10035,10036,10037,10038,10039,10040,10041,10042,10043,10046,10047,10061,10063,10064,10065,10066,10067,10068,10069,10070,10076,10077,10078,10079,10080,10081,10082,10083,10120,10121,10122,10123,10138,10139,10140,10141,10142,10233,10235,10236,10237,10238,10239,10240,10241,10242,10251,10252,10292,10293,10294,10295,10296,10309,10310,10311,10312,10313,10314,10408,10409,10410,10413,10463,10464,10465,10466,10467,10481,10482,10483,10484,10485,10486,10581,10582,10635,10636,10637,10638,10654,10655,10656,10657,10807,10808,10809,10810,10826,10827,10828,10829,10979,10980,10981,10982,10998,10999,11000,11001,11151,11152,11153,11154,11170,11171,11172,11173,11323,11324,11325,11326,11342,11343,11344,11345,11495,11496,11497,11498,11515,11516,11517,11518,11667,11668,11669,11670,11671,11687,11688,11689,11690,11839,11840,11841,11842,11859,11860,11861,11862,12011,12012,12013,12014,12031,12032,12033,12034,12183,12184,12185,12186,12203,12204,12205,12206,12356,12357,12376,12377,15617,15788,15789,15790,15959,15960,15961,16131,16132,16303,10697,10700,10869,10872,11194,11195,11196,11197,11198,11367,11368,11369,11540,12796,12797,12798,12799,12800,12969,12970,12971,13142,16014,16017,16186,16189,19164,19167,19336,19339,12903,12904,13075,13076,14292,14293,14294,14295,15183,20695,20696,20867,20868,23297,23298,23299,23464,23465,23469,23470,23471,23636,23637,23641,23643,33917,34591,35342,38043,38044,38091,38092,38263,38264,38580,39915,39916,40087,40088,40638,42832,42833,42910,19105,19106,20323,20324,20692,20693,20878,20879,21507,21508,21531,21532,22028,22029,22411,22412,22774,22775,23760,23761,19109,19110,19111,19281,19282,19283,19453,19455,19623,19630,19639,19640,19641,19808,19811,19812,19813,19966,19970,20147,20159,20483,20499,20530,20531,20532,20653,20664,20702,20703,20704,20820,20821,20822,20992,20993,20994,21347,21353,21527,21528,21529,21688,21699,21700,21701,22422,22423,22424,22425,22717,22718,22719,22720,22721,22722,23750,23756,23965,23966,23967,23968,24091,18286,19675,20340,11231,11232,11233,11403,11404,11405,17717,17718,17719,17889,17890,17891,17971,18092,18962,18963,18964,19134,19135,19136,33390,33391,33392,33562,33563,33564,36367,36368,36369,36539,36540,36541,36684,36685,36686,36856,36857,36858,38019,38020,38021,38191,38192,38193,40284,40285,40286,40456,40457,40458,42885,42886,42887,43057,43058,43059,33231,33232,33233,33234,33235,33236,33403,33404,33405,33406,33407,33408,33575,33576,33577,33578,33579,33580,33747,33748,33749,33750,33751,33752,33919,33920,33921,33922,33923,33924,34091,34092,34093,34094,34095,34096,34120,34121,34240,34241,34242,34243,34244,34245,34292,34293,34412,34413,34414,34415,34416,34417,34454,34584,34585,34586,34587,34588,34589,34620,34621,34622,34623,34624,34625,34626,34652,34749,34750,34756,34757,34758,34759,34760,34761,34792,34793,34794,34795,34796,34797,34798,34805,34806,34818,34819,34820,34821,34822,34823,34824,34921,34922,34928,34929,34930,34931,34932,34933,34964,34965,34966,34967,34968,34969,34970,34977,34978,34990,34991,34992,34993,34994,34995,34996,35100,35101,35102,35103,35104,35105,35118,35136,35137,35138,35139,35140,35141,35142,35162,35163,35164,35165,35166,35167,35168,35284,35285,35286,35287,35288,35289,35290,35308,35309,35310,35312,35313,35314,35334,35335,35336,35337,35338,35339,35340,35456,35457,35458,35459,35460,35461,35462,35506,35507,35508,35510,35511,35512,35628,35629,35630,35631,35632,35633,35634,35800,35801,35802,35803,35804,35805,35806,35954,35955,35972,35973,35974,35976,35977,35978,36126,36127,36833,36834,36992,36993,36994,36995,36996,36997,37005,37006,37164,37165,37166,37167,37168,37169,37336,37337,37338,37339,37340,37341,37358,37359,37360,37361,37362,37363,37508,37509,37510,37511,37512,37513,37530,37531,37532,37533,37534,37535,37546,37547,37680,37681,37682,37683,37684,37685,37702,37703,37704,37705,37706,37707,37718,37719,37852,37853,37854,37855,37856,37857,37874,37875,37876,37877,37878,37879,38046,38047,38048,38049,38050,38051,38187,38188,38218,38219,38220,38221,38222,38223,38359,38360,38730,38896,38897,38898,38899,38900,38901,38902,39068,39069,39070,39071,39072,39073,39074,39240,39241,39242,39243,39244,39245,39246,39412,39413,39414,39415,39416,39417,39418,39584,39585,39586,39587,39588,39589,39590,39780,39781,39782,39783,39784,39785,39952,39953,39954,39955,39956,39957,39965,39966,39967,39968,39969,39970,40124,40125,40126,40127,40128,40129,40137,40138,40139,40140,40141,40142,40296,40297,40298,40299,40300,40301,40309,40310,40311,40312,40313,40314,40438,40439,40468,40469,40470,40471,40472,40473,40481,40482,40483,40484,40485,40486,40610,40611,40640,40641,40642,40643,40644,40645,40653,40654,40655,40656,40657,40658,40825,40826,40827,40828,40829,40830,41321,41487,41488,41489,41490,41491,41492,41493,41628,41629,41630,41631,41632,41633,41659,41660,41661,41662,41663,41664,41665,41800,41801,41802,41803,41804,41805,41831,41832,41833,41834,41835,41836,41837,41972,41973,41974,41975,41976,41977,42003,42004,42005,42006,42007,42008,42009,42049,42144,42145,42146,42147,42148,42149,42175,42176,42177,42179,42180,42181,42215,42216,42217,42218,42219,42220,42221,42316,42317,42318,42319,42320,42321,42387,42388,42389,42390,42391,42392,42393,42488,42489,42490,42491,42492,42493,42559,42560,42561,42562,42563,42564,42565,42731,42732,42733,42734,42735,42736,42737,42903,42904,42905,42906,42907,42908,42909,43576,43577,43877,43878,43879,43880,43904,43905,43906,43907,43912,43913,43914,43915,37384,37385,37386,37387,37388,37389,37556,37557,37558,37559,37560,37561,37728,37729,37730,37731,37732,37733,37900,37901,37902,37903,37904,37905,38072,38073,38074,38075,38076,38077,41461,41462,41633,41634,41877,41878,42049,42050,32852,32853,32854,32855,32856,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880,32881,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908,32909,32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936,32937,32938,32939,32940,32941,32942,32943,32944,33024,33025,33026,33027,33028,33031,33032,33033,33034,33035,33036,33037,33038,33039,33040,33041,33042,33043,33044,33045,33046,33047,33048,33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33071,33072,33073,33074,33075,33076,33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089,33090,33091,33092,33093,33094,33097,33098,33099,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109,33110,33111,33112,33113,33114,33115,33116,33196,33197,33198,33199,33200,33203,33204,33205,33206,33207,33208,33209,33210,33211,33212,33213,33214,33215,33216,33217,33218,33219,33220,33221,33222,33223,33225,33226,33227,33228,33229,33230,33237,33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255,33256,33258,33259,33260,33261,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33275,33276,33277,33278,33279,33280,33281,33282,33283,33284,33285,33286,33287,33288,33368,33369,33370,33371,33372,33375,33376,33377,33378,33379,33380,33381,33382,33383,33384,33385,33386,33387,33388,33389,33390,33391,33392,33393,33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33405,33406,33407,33408,33409,33415,33416,33417,33418,33419,33420,33421,33422,33423,33424,33425,33426,33427,33428,33429,33430,33431,33432,33433,33434,33435,33436,33437,33438,33441,33442,33443,33444,33445,33446,33447,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33966,33967,33968,33969,33970,33971,33972,33973,33974,33975,33976,34137,34138,34309,34481,34653,34654,34825,34826,34827,34998,34999,35000,35171,35172,35344,35515,35516,35687,35859,35860,36031,36032,36033,36204,36205,36206,36377,36378,36379,36550,36551,36552,36723,36724,36896,37067,37068,37239,37411,37583,37584,37755,37756,37757,37928,37929,38101,38272,38273,38443,38444,38615,38786,38787,38955,38956,38957,38958,39126,39127,39298,39468,39469,39470,39639,39640,39811,39983,39984,40155,40156,40157,40158,40159,40160,40328,40329,40331,40332,40333,40504,40505,40677,40849,41021,41022,41193,41194,41195,41366,41367,41368,41539,41540,41541,41542,41712,41713,41714,41715,41716,41886,41887,41888,42060,42568,42740,42912,43084,43256,43428,33540,33541,33598,33599,33600,33601,33602,33603,33610,33613,33622,33623,33624,33625,33626,33627,33628,33629,33630,33631,33632,33713,33714,33769,33770,33775,33776,33777,33778,33779,33780,33781,33782,33785,33786,33787,33793,33794,33886,33941,33959,33960,33961,33962,33963,33964,33965,34058,34113,34230,34284,34285,34401,34402,34456,34573,34574,34628,34745,34800,34917,34918,34919,34972,34973,35091,35092,35093,35094,35095,35145,35267,35268,35317,35440,35489,35612,35613,35661,35673,35676,35785,35833,35834,35839,35840,35841,35842,35845,35848,35957,36005,36006,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36017,36020,36021,36129,36178,36179,36180,36181,36182,36183,36186,36187,36188,36189,36192,36193,36194,36195,36196,36197,36199,36200,36201,36202,36300,36301,36365,36366,36367,36368,36369,36371,36373,36374,36375,36376,36471,36472,36473,36546,36547,36548,36640,36641,36642,36643,36644,36720,36811,36812,36813,36814,36815,36891,36892,36983,36984,37062,37063,37155,37234,37326,37327,37406,37498,37499,37578,37579,37670,37750,37751,37752,37842,37923,37924,38013,38014,38096,38185,38186,38268,38357,38439,38440,38529,38610,38611,38701,38782,38873,38953,38954,39045,39119,39120,39121,39122,39123,39124,39125,39216,39217,39290,39291,39388,39389,39462,39560,39634,39806,39978,40150,40322,40494,40495,40592,40593,40597,40598,40599,40666,40667,40668,40669,40670,40671,40765,40766,40767,40768,40769,40771,40772,40839,40840,40842,40843,40844,40944,40970,40971,40972,40973,40974,40975,40976,40977,40978,41015,41016,41017,41116,41141,41142,41150,41151,41188,41189,41190,41191,41192,41288,41313,41323,41361,41362,41363,41364,41459,41460,41485,41495,41536,41630,41631,41632,41657,41667,41708,41799,41800,41801,41802,41803,41829,41839,41880,41970,41971,41972,41973,41974,42001,42011,42052,42142,42143,42173,42183,42224,42314,42345,42355,42396,42486,42517,42518,42526,42527,42658,42689,42690,42691,42692,42693,42695,42696,42697,42698,42699,42830,42831,42862,42863,42864,42865,42867,42868,42869,42870,43003,43084,43175,43236,43256,43347,43408,43428,43519,43579,43580,43600,43691,43692,43750,43751,43752,43772,43864,43865,43891,43899,43919,43920,43921,43922,43923,43944,44037,44038,44063,44071,44080,44082,44083,44088,44089,44090,44091,44092,44093,44094,44116,44210,44234,44235,44243,44244,44247,44248,44249,44250,44251,44252,44254,44255,44256,44257,44258,44259,44260,44261,44262,44263,44288,44382,44405,44406,44407,44415,44416,44417,44418,44419,44420,44421,44422,44423,44424,44427,44428,44429,44430,44431,44432,44459,44460,44553,44554,44575,44576,44577,44578,44588,44589,44590,44591,44631,44725,44726,44747,44748,44749,44803,44897,44975,44976,45147,45148,45320,45492,45664,45836,46008,46179,46180,46350,46351,46522,46694,46866,47038,47209,47210,47380,47381,47552,47724,47896,48068,48240,48412,48584,48756,48928,48929,49100,49101,49102,49273,49274,49446,49618,49789,49790,49961,50133,50305,50477,50649,50650,50821,50822,50823,50994,50995,50996,50997,51167,51168,51169,37328,37329,38609,38610,38779,38780,38949,38950,39390,39563,39564,40252,40253,41818,41819,41989,41992,42027,42028,42029,42160,42165,42199,42201,42371,42373,42543,42544,42545,42703,42704,42875,42876,37327,37499,37670,37671,37842,37843,38014,38322,38323,38324,38325,38326,38494,38495,38496,38497,38498,38781,38782,38838,38839,38840,38841,38842,38843,38844,38951,38952,38953,39010,39011,39012,39013,39014,39015,39016,39121,39122,39123,39124,39389,39560,39561,39562,39732,39733,39734,39735,39736,39904,39905,39906,39907,40076,40077,40078,40079,40248,40249,40250,40251,40420,40421,40422,40423,40424,40425,40592,40593,40594,40595,40596,40597,40766,40767,40768,41990,41991,42161,42162,42163,42164,42200,42332,42333,42334,42335,42336,42337,42372,42504,42505,42506,42507,42508,42509,42677,42678,42679,42680,42850,42851,51601,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680,51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,23423,37500,37672,37844,44908,44909,45080,45081,45129,45650,45651,45822,45823,46622,46672,46820,47035,47149,47522,48061,48405,48406,48574,48575,48743,48744,49037,49231,49941,50473,50474,51104,51128,51429,51601,51773,51944,51945,52116],\"doors\":[{\"x\":80,\"y\":211,\"p\":0,\"tcx\":148,\"tcy\":306,\"to\":\"u\",\"tx\":155,\"ty\":311},{\"x\":127,\"y\":120,\"p\":0,\"to\":\"d\",\"tx\":65,\"ty\":125},{\"x\":20,\"y\":145,\"p\":0,\"tcx\":151,\"tcy\":115,\"to\":\"u\",\"tx\":157,\"ty\":120},{\"x\":16,\"y\":135,\"p\":0,\"to\":\"u\",\"tx\":147,\"ty\":113},{\"x\":157,\"y\":120,\"p\":0,\"to\":\"d\",\"tx\":20,\"ty\":145},{\"x\":147,\"y\":113,\"p\":0,\"to\":\"d\",\"tx\":16,\"ty\":135},{\"x\":51,\"y\":205,\"p\":0,\"tcx\":147,\"tcy\":138,\"to\":\"u\",\"tx\":154,\"ty\":143},{\"x\":154,\"y\":143,\"p\":0,\"to\":\"d\",\"tx\":51,\"ty\":205},{\"x\":77,\"y\":237,\"p\":1,\"tcx\":72,\"tcy\":231,\"to\":\"d\",\"tx\":82,\"ty\":234},{\"x\":82,\"y\":234,\"p\":1,\"tcx\":65,\"tcy\":235,\"to\":\"d\",\"tx\":77,\"ty\":237},{\"x\":154,\"y\":208,\"p\":0,\"to\":\"d\",\"tx\":154,\"ty\":196},{\"x\":158,\"y\":208,\"p\":0,\"tcx\":120,\"tcy\":210,\"to\":\"u\",\"tx\":127,\"ty\":214},{\"x\":156,\"y\":202,\"p\":0,\"to\":\"d\",\"tx\":158,\"ty\":208},{\"x\":152,\"y\":202,\"p\":0,\"tcx\":120,\"tcy\":205,\"to\":\"d\",\"tx\":123,\"ty\":208},{\"x\":154,\"y\":196,\"p\":0,\"to\":\"u\",\"tx\":133,\"ty\":200},{\"x\":158,\"y\":196,\"p\":0,\"to\":\"d\",\"tx\":131,\"ty\":208},{\"x\":162,\"y\":196,\"p\":0,\"to\":\"u\",\"tx\":127,\"ty\":214},{\"x\":127,\"y\":214,\"p\":0,\"to\":\"d\",\"tx\":154,\"ty\":208},{\"x\":127,\"y\":208,\"p\":0,\"to\":\"u\",\"tx\":156,\"ty\":202},{\"x\":131,\"y\":208,\"p\":0,\"to\":\"u\",\"tx\":120,\"ty\":200},{\"x\":123,\"y\":208,\"p\":0,\"to\":\"u\",\"tx\":127,\"ty\":202},{\"x\":127,\"y\":202,\"p\":0,\"to\":\"d\",\"tx\":127,\"ty\":208},{\"x\":133,\"y\":200,\"p\":0,\"to\":\"d\",\"tx\":158,\"ty\":196},{\"x\":127,\"y\":196,\"p\":0,\"to\":\"d\",\"tx\":154,\"ty\":208},{\"x\":120,\"y\":200,\"p\":0,\"to\":\"d\",\"tx\":127,\"ty\":183},{\"x\":127,\"y\":190,\"p\":0,\"to\":\"d\",\"tx\":74,\"ty\":145},{\"x\":127,\"y\":183,\"p\":0,\"to\":\"u\",\"tx\":120,\"ty\":200},{\"x\":156,\"y\":214,\"p\":0,\"to\":\"d\",\"tx\":74,\"ty\":145},{\"x\":74,\"y\":145,\"p\":0,\"tcx\":149,\"tcy\":211,\"to\":\"u\",\"tx\":156,\"ty\":214},{\"x\":65,\"y\":125,\"p\":0,\"tcx\":120,\"tcy\":115,\"to\":\"u\",\"tx\":127,\"ty\":120},{\"x\":155,\"y\":71,\"p\":0,\"to\":\"d\",\"tx\":71,\"ty\":3},{\"x\":155,\"y\":96,\"p\":0,\"to\":\"d\",\"tx\":71,\"ty\":21},{\"x\":155,\"y\":86,\"p\":0,\"to\":\"u\",\"tx\":71,\"ty\":11},{\"x\":155,\"y\":240,\"p\":0,\"to\":\"d\",\"tx\":18,\"ty\":86},{\"x\":127,\"y\":240,\"p\":0,\"to\":\"d\",\"tx\":19,\"ty\":77},{\"x\":18,\"y\":86,\"p\":0,\"tcx\":149,\"tcy\":236,\"to\":\"u\",\"tx\":155,\"ty\":240},{\"x\":19,\"y\":77,\"p\":0,\"tcx\":123,\"tcy\":236,\"to\":\"u\",\"tx\":127,\"ty\":240},{\"x\":126,\"y\":143,\"p\":0,\"to\":\"d\",\"tx\":77,\"ty\":206},{\"x\":77,\"y\":206,\"p\":0,\"tcx\":119,\"tcy\":138,\"to\":\"u\",\"tx\":126,\"ty\":143},{\"x\":92,\"y\":52,\"p\":0,\"to\":\"u\",\"tx\":79,\"ty\":45},{\"x\":79,\"y\":45,\"p\":0,\"tcx\":89,\"tcy\":50,\"to\":\"d\",\"tx\":92,\"ty\":52},{\"x\":78,\"y\":40,\"p\":0,\"tcx\":112,\"tcy\":91,\"to\":\"u\",\"tx\":117,\"ty\":94},{\"x\":91,\"y\":29,\"p\":0,\"tcx\":125,\"tcy\":86,\"to\":\"d\",\"tx\":135,\"ty\":88},{\"x\":135,\"y\":88,\"p\":0,\"to\":\"u\",\"tx\":91,\"ty\":29},{\"x\":117,\"y\":94,\"p\":0,\"tcx\":72,\"tcy\":40,\"to\":\"d\",\"tx\":78,\"ty\":40},{\"x\":6,\"y\":10,\"p\":0,\"tcx\":149,\"tcy\":180,\"to\":\"d\",\"tx\":156,\"ty\":183},{\"x\":156,\"y\":181,\"p\":0,\"to\":\"u\",\"tx\":6,\"ty\":9},{\"x\":156,\"y\":190,\"p\":0,\"to\":\"d\",\"tx\":9,\"ty\":17},{\"x\":9,\"y\":17,\"p\":0,\"tcx\":149,\"tcy\":185,\"to\":\"u\",\"tx\":156,\"ty\":190},{\"x\":155,\"y\":158,\"p\":0,\"to\":\"u\",\"tx\":104,\"ty\":6},{\"x\":104,\"y\":7,\"p\":0,\"tcx\":148,\"tcy\":157,\"to\":\"d\",\"tx\":155,\"ty\":161},{\"x\":127,\"y\":166,\"p\":0,\"to\":\"d\",\"tx\":26,\"ty\":296},{\"x\":127,\"y\":158,\"p\":0,\"to\":\"u\",\"tx\":25,\"ty\":291},{\"x\":26,\"y\":296,\"p\":0,\"tcx\":120,\"tcy\":162,\"to\":\"u\",\"tx\":127,\"ty\":166},{\"x\":25,\"y\":292,\"p\":0,\"tcx\":120,\"tcy\":157,\"to\":\"d\",\"tx\":127,\"ty\":161},{\"x\":49,\"y\":97,\"p\":0,\"tcx\":151,\"tcy\":259,\"to\":\"u\",\"tx\":157,\"ty\":264},{\"x\":38,\"y\":94,\"p\":0,\"to\":\"d\",\"tx\":147,\"ty\":257},{\"x\":157,\"y\":264,\"p\":0,\"to\":\"d\",\"tx\":49,\"ty\":97},{\"x\":147,\"y\":254,\"p\":0,\"tcx\":28,\"tcy\":90,\"to\":\"u\",\"tx\":38,\"ty\":93},{\"x\":124,\"y\":275,\"p\":0,\"to\":\"d\",\"tx\":75,\"ty\":102},{\"x\":129,\"y\":275,\"p\":0,\"to\":\"d\",\"tx\":79,\"ty\":102},{\"x\":79,\"y\":102,\"p\":0,\"tcx\":120,\"tcy\":270,\"to\":\"u\",\"tx\":129,\"ty\":275},{\"x\":75,\"y\":102,\"p\":0,\"tcx\":120,\"tcy\":270,\"to\":\"u\",\"tx\":124,\"ty\":275},{\"x\":71,\"y\":3,\"p\":0,\"tcx\":148,\"tcy\":65,\"to\":\"u\",\"tx\":155,\"ty\":71},{\"x\":71,\"y\":21,\"p\":0,\"to\":\"u\",\"tx\":155,\"ty\":96},{\"x\":127,\"y\":299,\"p\":0,\"to\":\"d\",\"tx\":38,\"ty\":245},{\"x\":38,\"y\":245,\"p\":0,\"tcx\":120,\"tcy\":294,\"to\":\"u\",\"tx\":127,\"ty\":299},{\"x\":71,\"y\":11,\"p\":0,\"to\":\"d\",\"tx\":155,\"ty\":86},{\"x\":78,\"y\":137,\"p\":0,\"tcx\":149,\"tcy\":291,\"to\":\"u\",\"tx\":156,\"ty\":296},{\"x\":156,\"y\":296,\"p\":0,\"to\":\"d\",\"tx\":78,\"ty\":137},{\"x\":27,\"y\":209,\"p\":0,\"tcx\":148,\"tcy\":281,\"to\":\"u\",\"tx\":155,\"ty\":286},{\"x\":155,\"y\":286,\"p\":0,\"to\":\"d\",\"tx\":27,\"ty\":209},{\"x\":155,\"y\":311,\"p\":0,\"to\":\"d\",\"tx\":80,\"ty\":211},{\"x\":155,\"y\":20,\"p\":0,\"to\":\"d\",\"tx\":18,\"ty\":113},{\"x\":18,\"y\":113,\"p\":0,\"tcx\":148,\"tcy\":15,\"to\":\"u\",\"tx\":155,\"ty\":20},{\"x\":70,\"y\":80,\"p\":0,\"tcx\":155,\"tcy\":31,\"to\":\"u\",\"tx\":166,\"ty\":36},{\"x\":166,\"y\":36,\"p\":0,\"to\":\"d\",\"tx\":70,\"ty\":80},{\"x\":143,\"y\":26,\"p\":0,\"tcx\":49,\"tcy\":75,\"to\":\"d\",\"tx\":54,\"ty\":76},{\"x\":53,\"y\":76,\"p\":0,\"tcx\":140,\"tcy\":27,\"to\":\"d\",\"tx\":143,\"ty\":29},{\"x\":166,\"y\":33,\"p\":1,\"to\":\"l\",\"tx\":160,\"ty\":35},{\"x\":158,\"y\":35,\"p\":1,\"tcx\":142,\"tcy\":28,\"to\":\"l\",\"tx\":150,\"ty\":32},{\"x\":148,\"y\":32,\"p\":1,\"tcx\":148,\"tcy\":26,\"to\":\"l\",\"tx\":158,\"ty\":29},{\"x\":155,\"y\":29,\"p\":1,\"tcx\":140,\"tcy\":26,\"to\":\"l\",\"tx\":142,\"ty\":31},{\"x\":142,\"y\":32,\"p\":1,\"tcx\":155,\"tcy\":31,\"to\":\"d\",\"tx\":166,\"ty\":34}],\"checkpoints\":[{\"id\":1,\"x\":14,\"y\":210,\"w\":9,\"h\":2},{\"id\":2,\"x\":40,\"y\":208,\"w\":6,\"h\":5},{\"id\":3,\"x\":40,\"y\":221,\"w\":5,\"h\":4},{\"id\":4,\"x\":13,\"y\":223,\"w\":4,\"h\":3},{\"id\":5,\"x\":68,\"y\":220,\"w\":5,\"h\":5},{\"id\":6,\"x\":40,\"y\":232,\"w\":5,\"h\":5},{\"id\":7,\"x\":14,\"y\":233,\"w\":4,\"h\":3},{\"id\":8,\"x\":41,\"y\":184,\"w\":8,\"h\":4},{\"id\":9,\"x\":4,\"y\":184,\"w\":4,\"h\":3},{\"id\":10,\"x\":70,\"y\":184,\"w\":4,\"h\":3},{\"id\":11,\"x\":41,\"y\":133,\"w\":4,\"h\":3},{\"id\":12,\"x\":156,\"y\":118,\"w\":3,\"h\":2},{\"id\":13,\"x\":68,\"y\":100,\"w\":4,\"h\":2},{\"id\":14,\"x\":32,\"y\":81,\"w\":10,\"h\":2},{\"id\":15,\"x\":15,\"y\":50,\"w\":6,\"h\":3},{\"id\":16,\"x\":42,\"y\":49,\"w\":4,\"h\":2},{\"id\":17,\"x\":67,\"y\":52,\"w\":4,\"h\":2},{\"id\":18,\"x\":76,\"y\":48,\"w\":4,\"h\":2},{\"id\":19,\"x\":7,\"y\":257,\"w\":4,\"h\":3},{\"id\":20,\"x\":33,\"y\":255,\"w\":5,\"h\":2},{\"id\":21,\"x\":48,\"y\":253,\"w\":3,\"h\":2},{\"id\":22,\"x\":65,\"y\":250,\"w\":7,\"h\":2},{\"id\":23,\"x\":65,\"y\":143,\"w\":5,\"h\":2},{\"id\":24,\"x\":55,\"y\":92,\"w\":6,\"h\":2}],\"data\":[1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,[1379,1326],[1378,1327],[1379,1328],[1378,1346],[1379,1347],[1378,1346],[1379,1347],[1358,1323],1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,[1359,1324],[1358,1325],[1359,1326],[1358,1327],[1359,1328],[1378,1344],[1379,1345],[1378,1344],[1379,1345],[1378,1344],[1379,1345],[1378,1323],[1379,1324],[1356,1325],[1181,1338],1181,1181,[1181,1316],[1358,1326],[1359,1327],[1358,1328],[1359,1346],[1358,1347],[1359,1346],[1358,1323],[1359,1324],[1358,1325],1359,[1358,1383],[1359,1342],[1358,1322],[1359,1323],1358,1359,1358,[1359,1324],[1358,1325],[1359,1326,1328],[1358,1327,1348],[1359,1368],[1358,1328,1388],[1359,1346],[1358,1347],[1359,1346],[1358,1347],[1359,1344],[1358,1345],[1359,1323],[1376,1324],[1181,1318,1325],1181,1181,1181,[1181,1317],1377,1359,1358,1359,1358,1359,[1358,1326],[1359,1327],[1358,1328],[1359,1344],[1358,1345],[1359,1344],[1358,1345],[1359,1348],1364,1365,1366,1367,[419,1343],[420,1344],[419,1345],[420,1323],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,[1358,1326],[1359,1327],[1358,1328],[1359,1344],[1358,1345],[1359,1344],[1358,1347],[1359,1348],1366,1367,1366,1367,[1378,1343],[1379,1346],[1378,1347],[1379,1346],[1378,1347],[1379,1323],[1378,1324],[1379,1325],[1378,1326],[1379,1327],[1378,1328],[1379,1344],[1378,1345],[1379,1346],[1378,1347],[1379,1348],1364,1365,1364,1365,1364,1365,[1358,1343],[1359,1344],[1376,1345],[1181,1318,1346,1436],1291,[1181,1316,1344,1438],[1377,1345],[1378,1346],[1379,1347],[1378,1348],[1379,1304],[1378,1366],[1379,1367],[1378,1343],[1379,1344],[1378,1345],[1379,1346],[1378,1347],[1379,1323,1362],[1378,1324,1342],[1379,1325,1322],[1378,1326,1346],[1379,1327,1724],[1378,1725],[1379,1726],[1378,1347],[1379,1329],[1378,1368],[1379,1328,1388],[1359,1348],[1379,1366],[1378,1367],[1379,1366],[1378,1367],[1379,1364],[1378,1365],[1379,1343],[1378,1344],[1376,1345],[1181,1318,1346,1436],[1379,1291],[1181,1317,1344,1438],[1181,1377,1345],[1378,1346],[1379,1347],[1378,1323],[1379,1326],[1378,1327],[1379,1328],[1378,1346],[1379,1347],[1378,1348],[1379,1364],[1378,1365],[1379,1364],[1378,1365],[1379,1368],[1358,1384],[1181,1380,1385],[1181,1386],[1357,1387],[420,1363],[440,1364],[439,1365],[419,1322],[420,1323],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1378,1379,1378,[1379,1328],[1378,1347],[1379,1347],[1378,1344],[1379,1345],[1378,1346],[1379,1347],[1378,1323],[1379,1326],[1378,1327],[1379,1328],[1378,1346],[1379,1347],[1378,1348],[1379,1364],[1378,1365],[1379,1364],[1378,1367],[1379,1368],[1181,1380,1386],[1181,1387],[1181,1386],[1181,1357,1387],1363,1366,1367,1366,1367,[1358,1343],[1359,1346],[1358,1347],[1359,1346],[1358,1347],[1359,1348],1364,1365,[1358,1366],1367,1368,[1181,1384],[1181,1385],[1181,1384],[1181,1385],[1181,1384],[1181,1385],[1378,1363],[1379,1364],1365,1366,1311,1364,1365,1366,1367,[1181,1368],[1181,1385],[1181,1386],[1181,1387],[1181,1363],1364,1365,1366,1367,[1379,1322],[1358,1323,1362],[1359,1342],[1358,1747],[1359,1744,1727],[1358,1745,1728],[1359,1746,1729],1747,1368,[1379,1328,1388],[1359,1348],[1359,1368],[1181,1386],[1181,1357,1387],[1356,1386],[1181,1387],[1357,1384],[1358,1385],1363,1364,1365,1366,1311,1364,1365,1366,1367,[1358,1343],[1359,1346],[1358,1347],[1359,1348],1366,1367,[1379,1368],[1380,1384],[1181,1385],[1181,1396,1384],[1181,1397,1385],[1181,1398,1388],[1181,1399],[1181,1400],1421,[1181,1336],[1357,1383],[1379,1384],[1379,1385],[439,1342],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1358,1359,[1358,1328],[1359,1329],1367,1367,1364,1365,1366,1367,[1358,1343],[1359,1346],[1358,1347],[1359,1348],1366,1367,1368,[1181,1384],[1181,1385],[1181,1384],[1181,1387],[1181,1399,1388],[1181,1400],1181,1421,[1181,1336],[1357,1383],[1378,1386],[1378,1387],[1181,1356,1386],[1181,1387],[1378,1363],[1379,1366],[1378,1367],[1379,1366],[1378,1367],[1379,1368],[1181,1384],[1357,1385],[1356,1386],[1181,1387],[1181,1388],[1181,1295],[1181,1300],1181,1401,1181,1181,[1181,1383],[1181,1357,1384],[1356,1385],[1181,1386],[1181,1331],[1181,1384],[1181,1385],[1181,1357,1386],[1297,1387],[1298,1388],[1181,1299],[1181,1300],1181,[1181,1383],[1181,1384],[1181,1385],[1181,1386],[1181,1387],[1378,1342],[1379,1322],[1378,1323,1362],[1379,1767],[1378,1764],[1379,1765],[1379,1766],[1379,1767],[1359,1328,1388],[1359,1348],[1181,1368],[1181,1388],1411,[1181,1337],[1181,1338],1401,[1181,1337],1357,[1378,1383],[1356,1384],[1181,1385],[1181,1386],[1280,1331],[1181,1384],[1181,1385],[1181,1386],[1181,1387],[1378,1363],[1379,1366],[1378,1367],[1379,1368],[1181,1386],[1181,1387],[1181,1399,1388],[1181,1400],1181,[1181,1295],[1181,1296],[1181,1297],[1181,1298],[1181,1299],[1181,1319],1411,[1181,1395],[1181,1399],[1181,1357],[1181,1358,1321],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1378,1346],[1379,1347],[1378,1348],[1181,1379,1349],[1181,1387],[1181,1387],[1181,1384],[1181,1385],[1181,1386],[1181,1387],[1378,1363],[1379,1366],[1378,1367],[1379,1368],[1181,1386],[1295,1387],[1181,1300,1388],1181,1181,1401,1421,1181,1181,[1181,1317],[1181,1319],1181,[1181,1337],1357,1356,[1181,1339],1401,[1181,1383],[1357,1386],[1358,1387],[1378,1386],[1379,1387],[1181,1378,1388],[1181,1319],[1181,1395],[1181,1339],1428,[1181,1316],1377,1376,[1181,1318],1428,[1181,1317],[1181,1300],1411,[1181,1395],[1181,1338],1181,1257,1181,1428,[1181,1395],[1181,1396],[1181,1397],[1181,1398],[1181,1338],1428,1181,1411,[1181,1295],[1181,1300],1401,[1181,1362],[1181,1342],[1379,1343],[1379,1345,1231],[1379,1346,7],[1379,9],[1379,1346,63,10],[1379,1347,1231],[1338,1348],[1181,1295,1368],[1181,1388],1181,1428,1181,1181,1181,1181,[1181,1395],[1181,1399],[1181,1338],1401,1428,1257,1181,[1181,1295],[1181,1299],[1181,1300],[1181,1395,1383],[1181,1386],[1181,1387],[1181,1400,1388],1428,1411,1181,[1181,1223],[1181,1224],[1315,1224],[1358,1224],[1359,1224],[1715,1358,1224],[1716,1359,1227],[1181,1376,1249],[1181,1319],1181,1181,[1181,1375],[1181,1358,1321],[420,1322],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1366,1367,[1181,1368],[1181,1369],1181,1181,1428,1181,1181,1411,[1181,1383],[1181,1386],[1181,1387],[1181,1388],[1181,1316],1377,[1181,1376],[1181,1318,1223],[1181,1224],[1181,1317,1224],[1181,1300,1227],[1181,1227],[1181,1227],[1377,1227],[1376,1227],[1181,1227],[1181,1228],[1181,1395],[1181,1400],1181,[1181,1317],[1181,1300],[1181,1395],[1181,1399],[1181,1398],[1181,1399],[1181,1357],[1181,1376],[1181,1300],[1181,1223],[1181,1224],[1377,1227],[1358,1227],[1359,1227],[1376,1227],[1181,1299,1227],[1181,1377,1228],[1181,1376],[1181,1319],1181,[1181,1223],[1181,1224],[1181,1224,1678],[1181,1224,1679],[1181,1224,1680],[1181,1224],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1316,1228],[1181,1377],1376,[1181,1318],1401,[1181,1317,1362],[440,1181,1300,1363],[1181,1365,1251],[1366,7],[1398,9],[1399,1366,83,10],[1358,1367,1251],[1181,1379,1368],[1181,1380,1388],1181,[1181,1317],[1181,1296],[1181,1297],[1181,1298],[1181,1299],[1181,1300],1411,1181,[1181,1316],[1181,1296,1223],[1181,1297,1224],[1181,1224],[1181,1224],[1377,1224,1678],[1358,1224,1679],[1181,1376,1227,1680],[1181,1318,1228],1181,1181,1181,[1181,1317],[1181,1318,1223],[1181,1224],[440,1243],[439,1244],[440,1754,1244],[439,1755,1244],[440,1756,1244],[1735,1244],[1736,1247],[439,1716,1269],[1181,1320,1270],1181,1401,[1181,1395],[1181,1396,1341],[440,1342],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1181,1386],[1181,1387],[1181,1388],[1181,1389],[1181,1223],[1181,1224],[1181,1224],[1181,1224],[1181,1224],[1181,1227],[1181,1228],1421,1181,[1181,1316],1377,[1358,1223],[1359,1224],[420,1243],[419,1244],[420,1244],[420,1247],[419,1247],[420,1247],[419,1247],[420,1247],[419,1247],[420,1248],[1181,1227],[1181,1228],[1181,1295],1377,[1181,1376],[1181,1319],[1181,1223],[1181,1224],[1181,1227],[1181,1336,1227],[1399,1227],[1400,1227],[420,1243],[419,1244],[420,1247],[419,1247],[420,1247],[419,1247],[420,1247],[419,1248],[1358,1227],[1376,1227],[1181,1227],[419,1243],[420,1244],[420,1244,1698],[419,1244,1699],[420,1244,1700],[419,1244],[420,1247],[419,1247],[420,1247],[419,1247],[420,1247],[420,1247],[420,1248],[1358,1227],[1359,1227],[1376,1227],[1181,1299,1228],[1181,1377,1229],[1356,1383],[1181,1396,1385,1271],[1181,1379,1386,7],[1379,9],[1181,1379,1386,83,10],[1181,1378,1387,1271],[1181,1399,1388],[1181,1400],[1181,1317,1223],[1379,1224],[1379,1227],[1379,1228],1379,1359,[1181,1376,1223],[1181,1227],[1181,1227],[1715,1377,1227],[420,1716,1243],[1735,1244],[1736,1244],[1716,1244],[1713,1244,1698],[1714,1244,1699],[1715,1247,1700],[1716,1248],[420,1713,1181,1227],[1714,1181,1227],[1713,1181,1227],[419,1717,1377,1227],[420,1243],[419,1244],[420,1263],[419,1264],420,[419,1833],[420,1834],[419,1693],1735,[1736,1309],[1181,1310],1181,[1181,1295],[1181,1300],1421,[420,1181,1301],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1428,1181,1421,[1181,1242],[439,1243],[440,1244],[439,1244],[440,1244],[439,1244],[440,1247],[419,1248],[1181,1227],[1181,1227],[1377,1227],[1358,1227],[440,1243],[439,1244],[440,1263],[439,1264],440,440,439,[440,1223],[439,1224],[440,1227],[439,1249],[440,1268],[440,1247],[439,1248],[1377,1227],[1378,1227],[1379,1227],[1376,1227],[440,1243],[440,1244],[440,1247],[439,1247],[440,1247],[439,1247],[440,1263],439,[440,1678],[419,1679],[420,1680],439,440,[439,1268],[440,1247],[439,1247],[440,1247],[439,1263],440,[440,1718],[439,1719],[440,1720],439,440,439,440,439,1827,[440,1267],[440,1268],[439,1247],[440,1247],[439,1247],[440,1248],[1181,1356,1249],[1181,1338],1428,[1181,1317,7],9,[1181,1358,83,10],[1181,1376],[1181,1319],[1181,1223],[440,1243],[439,1244],[440,1247],[440,1248],[1379,1227],[1715,1379,1227],[439,1716,1243],[1715,1247],[1716,1247],[1735,1247],[1736,1263],1736,1735,1736,[1733,1718],[1734,1719],[1735,1267,1720],[1736,1268],[1733,1247],[1734,1247],[1733,1247],[439,1737,1247],[440,1263],[419,1264],440,439,419,[420,1853],[440,1854],[439,1855],[440,1732,1328],[1715,1329],[1181,1330],1428,[1181,1395],[1181,1400],[1181,1261],[440,1262],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1181,1181,[1181,1261],[419,1262],[420,1263],[419,1264],420,419,420,[419,1267],[439,1268],[440,1247],[420,1247],[419,1247],[420,1247],[419,1263],[420,1264],419,[420,1678],[419,1679],[420,1680],[419,1261],[420,1358,1262],[419,1359,1244],[420,1358,1247],[419,1359,1269],[420,1270],[420,1267],[419,1268],[420,1247],[419,1247],[420,1247],[420,1247],[419,1263],420,419,420,419,420,419,420,[419,1698],[439,1699],[440,1700],420,419,420,419,420,419,420,419,[420,1738],[419,1739],[420,1740],419,420,419,420,420,419,[420,1674],[1848,1653,1267],[420,1654,1223],[419,1224],[420,1227],[419,1268,1249],[420,1269],[1181,1378,1227],[1181,1379,1227],[1181,1379,1227,7],[1379,9],[1181,1379,1224,83,10],[1181,1379,1227],[1181,1379,1227],[420,1243],[419,1263,1223],[420,1224],[419,1227],[420,1268,1228],[1736,1247],[1735,1247],[1736,1263],1735,1736,1716,1716,1716,1715,1716,[1713,1738],[1714,1739],[1715,1740],1716,1713,1713,1714,[420,1757],419,439,420,419,1827,419,420,[419,1673],[1715,1309],[1716,1349],[1181,1300,1350],1181,1181,1181,[419,1181,1281],[420,1282],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1181,1181,[1181,1281],[420,1282],419,[420,1833],[440,1834],[439,1835],420,419,420,419,420,419,419,420,419,420,[419,1698],[420,1699],[419,1700],[420,1301],[419,1358,1302],[420,1359,1303],[419,1378],[419,1379,1289],[420,1290],419,420,419,419,420,419,420,419,420,419,420,419,420,419,[420,1718],[1828,1719],[420,1720],419,420,419,420,419,420,419,420,[419,1758],[420,1759],[419,1760],420,419,419,420,419,420,[419,1672],[420,1736,1261],[419,1262],[420,1244],[419,1267,1247],[420,1268,1269],[419,1715,1268,1228],[420,1716,1247],[419,1716,1247],[420,1737,1247,7],[419,9],[420,1672,1244,103,10],[419,1715,1247],[420,1716,1247],[419,1263,1261],[420,1262],[419,1244],[420,1247],[419,1248],[1736,1270],1735,1736,1736,1735,1736,1736,1736,1735,1736,[1733,1758],[1734,1759],[1735,1760],1736,1733,1733,[420,1737],419,420,419,[440,1652],[439,1653],[419,1654],[420,1655],[440,1656],[1715,1308],[1716,1309],[419,1359,1310],[1181,1320],1411,1181,1421,[420,1181,1301],[419,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1401,1181,[1181,1301],[440,1302],419,[439,1853],[440,1854],[420,1855],440,439,419,420,440,439,439,419,420,440,[439,1718],[419,1719],[420,1720],[440,1321],[439,1378,1322],[419,1379,1344],[420,1378,1345],[439,1379,1329],[440,1330],439,419,420,439,440,439,440,439,440,439,419,420,440,439,[419,1738],[420,1739],[440,1740],439,440,439,419,420,440,439,419,420,440,439,419,420,439,440,439,440,[439,1712],[440,1301],[439,1302],[1847,1303],420,[440,1289],[439,1735,1290],1715,1716,[440,1717,1084],439,[440,1712,1086],1715,1716,[420,1301],[440,1302],[439,1303],[419,1288],[420,1289],[1715,1290],1735,[419,1736],[420,1753],[439,1754],[440,1755],[420,1756],[439,1716],1715,1716,1713,1714,1715,1716,1713,1714,[440,1737],439,419,[420,1674],1715,1716,1715,1715,1716,[1735,1328],[1736,1329],[439,1379,1330],[1181,1340],1181,1181,[1181,1295],[419,1296,1301],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1181,1222],[1181,1261],[420,1262],[419,1263],420,419,420,419,420,419,1827,419,420,419,420,419,420,419,[420,1738],[419,1739],[420,1740],[419,1341],[420,1342],[419,1364],[420,1365],[419,1368],[420,1388],420,1848,420,419,420,[420,1652],[419,1653],[420,1654],[419,1655],[420,1656],[419,1657],420,419,420,[419,1758],[439,1759],[440,1760],420,419,420,419,420,419,420,419,420,419,420,419,420,419,420,420,419,[420,1732],[419,1281],[420,1282],419,420,[419,1268],[420,1248],[419,1716,1224],[439,1736,1224],[440,1696,1104],[420,1105],[419,1693,1106],[420,1735,1227],[419,1715,1224],[420,1243],[419,1263],420,1828,[420,1289],[1735,1290],1736,[419,1695],420,419,420,420,[419,1693],1735,1736,1733,1734,1735,1713,1714,[420,1734],[419,1696],420,[419,1652],1716,1735,1736,1715,1716,[1736,1288],[1716,1289],[419,1359,1349],[1359,1350],[1181,1360],1181,1401,[1181,1315,1261],[419,1262],[420,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,1181,[1181,1281],[419,1282],420,419,420,440,439,440,439,419,420,440,439,419,420,419,420,[419,1758],[420,1759],[419,1760],420,[419,1362],[420,1384],[419,1385],[419,1388],420,419,420,[419,1652],[419,1653],[420,1656],1716,1716,1713,1714,1715,[420,1716],[419,1676],420,419,420,419,420,419,420,419,420,419,420,419,420,419,420,419,420,419,419,420,419,420,[419,1693],[420,1736,1301],[419,1302],[420,1674],[419,1653],[420,1657],[419,1268],[420,1244],[419,1752,1244],[420,1734,1124],[419,1735,1125],[420,1736,1126],[419,1695,1247],[420,1244],[419,1263],420,419,420,[419,1289],[420,1736,1290],[419,1757],420,419,419,420,419,419,[420,1752],[419,1756],[420,1756],1714,1715,1733,[420,1734],[419,1696],420,[419,1674],1735,1736,1735,1736,1735,1736,[1735,1308],[420,1736,1309],[420,1379,1310],1379,[1181,1380],1181,1181,[419,1181,1281],[420,1282],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1181,1227],[440,1243],[439,1263],440,439,419,420,[440,1652],[420,1653],[419,1654],[439,1655],[440,1656],[419,1657],420,439,419,420,440,439,419,420,440,439,419,420,439,440,439,[419,1674],1734,1733,1735,1736,1736,1733,1734,1735,1715,[420,1716],[440,1655],[439,1656],[419,1657],420,440,439,440,439,419,420,440,439,419,420,440,439,419,420,439,440,439,440,439,[440,1732,1281],[439,1282],[419,1672],1736,[440,1737],439,419,420,[440,1752],[439,1753],[440,1757],439,419,420,[440,1673],[439,1657],419,[420,1289],[440,1696,1290],439,419,420,439,440,420,419,420,419,420,[419,1694],[420,1754],[419,1755],[439,1696],440,[420,1678],[419,1715,1679],[1716,1680],1716,1716,1715,1716,1715,[1716,1328],[419,1329],[420,1359,1330],[1181,1356],[1181,1338],1181,1401,[420,1181,1301],[419,1302],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,28,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1247,1228],[420,1263,1229],[419,1229],420,[419,1652],[420,1653],[419,1656],1716,1716,1713,1714,1715,1716,[440,1676],419,420,419,420,419,1827,419,420,419,420,419,[419,1678],[420,1655,1679],[419,1656,1680],[420,1713],1714,1715,1735,1736,1716,1713,1714,1715,1716,1713,1714,1713,[420,1677],419,420,419,420,419,420,419,420,419,420,419,420,419,420,419,419,420,419,420,419,[420,1752,1281],[419,1323,1282],[420,1712],1716,[420,1736],[419,1676],420,419,420,419,420,419,420,[419,1674],1716,[1716,1326],[420,1676,1327],[419,1328,1289],[420,1290],419,420,419,419,420,440,439,440,439,440,439,440,439,440,439,[440,1673,1698],[439,1735,1699],[1736,1700],1736,1716,1735,1736,1735,[1736,1289],[439,1359,1349],[1379,1350],[1181,1380],1181,1428,[1181,1295],[440,1377,1321],[439,1322],[440,1323],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1248],[440,1249],439,[440,1674],1734,1733,1735,[1736,1328],[1736,1724],[1733,1725],[1734,1726],[1735,1323],1715,[420,1716],[439,1655],[419,1656],[420,1657],440,439,419,420,440,439,419,420,[439,1698],[440,1714,1699],[1714,1700],1733,1734,1735,1715,1716,1736,[1733,1678],[1734,1679],[1735,1680],1736,1733,1734,1733,[419,1697],420,440,439,440,439,419,420,440,[439,1674],[419,1653],[420,1654],[440,1655],[439,1656],[419,1657],420,439,440,439,440,439,[440,1321],[439,1343],[419,1732,1346],[1716,1347],[1736,1323],1736,[419,1676],615,440,439,440,439,[419,1674],1733,[1736,1328],[1736,1346],[1736,1347],[420,1653,1348],[440,1330],439,419,420,439,440,420,419,420,419,420,420,420,419,420,[419,1674],[420,1715,1718],[419,1695,1719],[420,1694,1720],1735,1736,1735,1736,1715,[1716,1289],[1379,1290],1356,[1181,1339],1181,1181,[1181,1315],[1359,1341],[419,1359,1342],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1448],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1268],[420,1269],[419,1656,1270],1713,1714,1715,[1735,1328],[1736,1329],[419,1716,1304],[439,1713,1745],[440,1714,1746],[1715,1322],[1716,1323],1713,1714,1713,[440,1677],420,419,439,440,419,420,439,440,[419,1718],[420,1734,1719],[1734,1720],1713,1714,1715,1735,1736,1716,[1713,1698],[420,1714,1699],[1715,1700],1716,1713,1714,1713,[439,1717],440,420,419,420,419,439,440,[420,1674],[1715,1223],[1715,1224],[1716,1227],[1716,1249],1716,[439,1677],440,419,420,419,420,419,[420,1341],[420,1753,1363],[439,1693,1366],[1736,1367],[1756,1343],[1735,1323],[439,1737],1847,420,675,676,[419,945],[439,1732],[1715,1328],[1716,1348],[1755,1366],[1756,1367,1678],[440,1757,1368,1349,1679],[419,1350,1680],420,439,440,419,420,440,439,440,439,440,440,440,[439,1652],[440,1653],1715,[440,1695,1738],[439,1739],[440,1740],[419,1732],1716,1715,1716,1735,[1736,1289],[1399,1290],[1181,1400],1181,1181,1181,[1181,1335],1379,[439,1379,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],[4,1466],[4,1467],[4,1468],[4,1468],[4,1469],[4,1470],4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1288],[440,1289],[1714,1290],1733,1734,[1735,1328],[1715,1348],[1716,1349],[439,1764],[419,1765],[420,1766],1342,[1736,1343],[1733,1323],1734,1733,[420,1697],440,439,440,439,439,440,439,440,[439,1738],[440,1756,1739],[440,1734,1740],1734,1734,1735,1736,1735,1736,[1733,1718],[1734,1719],[1735,1720],1736,1733,1734,[1733,1245],[419,1737],420,440,439,440,439,419,[420,1673],[440,1715,1261],[1716,1358,1262],[1735,1359,1244],[1736,1358,1247],[1715,1359,1269],[1716,1270],[439,1697],440,439,440,439,440,439,440,[440,1383],[419,1386],[420,1693,1387],[440,1736,1363],[1715,1302],1716,[420,1675,961],440,695,696,[439,1674,965],1715,[1735,1309],[1736,1368],[439,1386],[440,1387,1698],[439,1388,1699],[439,1700],440,439,440,439,440,420,419,420,420,419,420,419,[420,1694],1715,1735,[419,1675,1758],[420,1759],[419,1673,1760],1735,1736,1735,1736,1715,[1716,1289],[1181,1290],1411,1181,1401,1181,[1181,1355],1359,[419,1359,1301],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],[4,1486],1487,1487,1488,[4,1489],[4,1490],4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1308],[420,1309],[1734,1310],1713,1714,[1715,1289],[440,1349],[420,1350],1827,439,1828,[420,1362],[419,1716,1363],[1713,1302],1714,1713,[440,1717],420,419,419,[420,1674],[419,1653],[420,1654],[419,1655],[420,1656],[419,1657,1758],[420,1759],[420,1693,1760],1734,1714,1715,1716,[1715,1246],1716,[1713,1738],[1714,1739],[1715,1740],[1716,1326],[1713,1327],[1713,1328],[419,1714,1265],[439,1757],440,420,419,420,419,[439,1673],1715,[1716,1301],[1736,1358,1302],[1735,1359,1303],[1736,1378],[1715,1379,1289],[1716,1290],[419,1717],420,419,420,419,420,419,420,419,439,440,[420,1321],[1735,1322],[1715,1323],[1716,981],[420,1653],[419,1654],[420,1656],[1715,985],[1716,1328],[1736,1329],[420,1330],419,[419,1718],[420,1719],[419,1720],[420,1652],[419,1653],[420,1654],[419,1655],[420,1656],[419,1653],[419,1676],420,419,420,419,420,419,[420,1672],1715,1716,[419,1653],1715,1715,[1715,1223],[419,1716,1224],[1715,1227],[1735,1249],[1736,1268],[419,1269],[1181,1270],1181,1181,1181,[1181,1375],1379,[420,1379,1301],[419,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],[4,1506],1487,1488,1488,[4,1509],[4,1510],4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1308],[440,1309],[1734,1310],1734,1734,[1735,1289],[439,1290],440,1847,440,1848,440,[439,1736,1301],[1733,1302],1734,1733,[439,1737],440,439,[439,1674],1715,1716,1715,1716,1715,1716,[440,1676],440,[439,1752],[440,1753],1735,1736,[1735,1266],[1736,1323],[1733,1324,1758],[1734,1325,1759],[1735,1328,1760],[1736,1346],[1733,1347],[1733,1348],[439,1737,1285],440,439,440,439,440,439,[440,1672,1678],[1715,1679],[1716,1321,1680],[1715,1378,1322],[1715,1379,1344],[1716,1378,1345],[1735,1379,1329],[1736,1330],[439,1737],440,439,440,439,440,439,440,439,440,439,[440,1341],[439,1342],[1735,1322],[1736,1345],[440,1715,1724],[439,1715,1725],[440,1716,1726],[1735,1347],[1736,1348],1349,[440,1350],439,[439,1738],[440,1739],[439,1740],[440,1732],1733,1733,1735,1736,1736,1733,[1827,1657],439,440,439,440,439,[419,1692],1735,1736,1735,1735,[1735,1261],[1735,1358,1262],[1736,1359,1244],[1735,1358,1247],[439,1736,1359,1269],[419,1270],[420,1309],[440,1181,1310],1181,1428,1181,[1181,1395],[1357,1261],[419,1262],[420,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],[4,1506],[1507,1606],[1508,1607],[1508,1608],[4,1509],[4,1510],4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1328],[420,1329],[420,1693,1330],1734,1714,[1715,1289],[419,1290],420,419,420,419,[420,1222],[419,1301],[1713,1302],1713,1714,[419,1757],420,[419,1673],1715,1716,1715,1716,1715,1716,1736,[420,1757],420,419,420,[419,1693],1716,[1715,1286],[1716,1343],[1713,1344],[1714,1345],[1715,1329],[1716,1366],[1713,1367],[1714,1368],[419,1737,1305],420,419,420,419,420,419,[420,1692,1698],[1735,1699],[1736,1341,1700],[1735,1342],[1735,1364],[1736,1365],[1716,1368],[1736,1388],[419,1737],420,419,420,419,420,420,420,419,420,419,420,[419,1362],[420,1342],[419,1364],[420,1735,1744],[419,1735,1745],[420,1736,1746],[419,1304],[420,1368],[419,1369],420,419,[420,1758],[420,1759],[419,1674,1760],[420,1733],1733,1735,1736,1736,1733,1734,1735,[420,1675],419,420,419,420,[419,1712],1715,1716,1715,1716,[419,1301],[1378,1302],[1379,1303],[419,1358],[420,1359,1289],[419,1290],[420,1309],[419,1376,1310],[1181,1300],1181,1421,1181,[420,1181,1281],[419,1282],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1525],[4,1526],[4,1527,1626],[1488,1627],[4,1528,1628],[4,1529],[4,1530],4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1309],[440,1349],[440,1350],[440,1752],[439,1753],[440,1735,1268],[439,1736,1248],[440,1249],439,1848,[419,1221],[420,1242],[1713,1243],[1733,1263],1733,[440,1737],439,440,[439,1672],1735,1715,1716,1736,1735,1736,[439,1696],440,440,439,440,439,[440,1693],[1735,1306],[1736,1363],[1733,1364],[1734,1365],[1735,1349],[1713,1386],[1714,1387],[1734,1388],[439,1696],440,419,420,439,440,439,[440,1712,1718],[1713,1719],[1714,1720],[1715,1362],[1716,1384],[1735,1385],[1736,1388],[440,1756],[439,1757],440,439,440,439,440,[440,1652],[440,1653],[439,1654],[440,1655],[439,1656],[440,1657],439,[440,1362],[419,1384],[420,1764],[439,1765],[440,1766],[439,1386],[440,1388],439,1828,439,440,[440,1674],[439,1733],[440,1715],1715,1735,1736,1716,1713,1714,1715,[419,1735],[420,1676],419,420,419,[420,1732],1735,1736,1735,1736,[419,1321],[1378,1322],[419,1379,1344],[420,1378,1345],[419,1379,1329],[420,1330],[419,1289],[420,1359,1290],1376,[1181,1319],1181,1181,[419,1181,1301],[420,1302],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547,1646],[4,1647],[4,1548,1648],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,4,4,0,0,[420,1309],[419,1310],420,419,420,[419,1693],[420,1716,1268],[419,1715,1269],[420,1224],[419,1224],[439,1224],[1713,1262],[1716,1263],1713,1714,[419,1737],420,419,[420,1692],1715,1735,1736,[420,1755],[419,1756],[420,1757],419,420,420,419,420,419,420,[420,1752],[419,1756,1383],[420,1756,1384],[419,1714,1385],[1715,1369],1733,1734,[419,1696],420,419,439,440,420,419,420,[419,1732,1738],[1733,1739],[1734,1740],1735,1736,[420,1756],[419,1695],420,419,420,419,420,[420,1673],[419,1656],1716,1716,1713,1714,1715,1716,[420,1676],419,439,440,420,419,420,[419,1674],[420,1653],[419,1654],[420,1655],[419,1656],1733,1715,1736,1736,1735,1736,1735,1736,1735,1736,1715,1716,[419,1717],1848,419,[420,1752],[419,1753],[420,1754],[419,1755],[420,1756],[419,1757,1341],[420,1342],[419,1364],[420,1365],[419,1368],[420,1388],[419,1268],[420,1269],[1359,1228],1376,[1181,1319],1181,[419,1181,1321],[420,1322],[419,1323],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1309],[420,1310],419,420,419,420,[419,1693],[420,1735,1268],[419,1736,1244],[420,1733,1244],[419,1734,1244],[1735,1263],1713,1714,1734,[420,1696],419,420,[419,1712],1735,1736,[420,1696],419,420,419,419,420,419,420,419,419,420,419,420,419,[420,1694],[419,1754],[420,1755],[419,1696],420,419,420,419,420,419,420,419,[420,1752,1758],[419,1753,1759],[420,1754,1760],[419,1755],[420,1696],419,420,419,420,419,419,420,[419,1672],1735,1736,1736,1733,1734,1735,1715,[419,1716],[420,1655],[419,1656],[420,1657],419,420,[419,1673],1733,1735,1736,1736,1733,1733,1736,1735,1736,1735,1736,1735,1736,1736,1735,1736,1736,[439,1737],440,439,419,420,440,439,419,420,[440,1362],[439,1384],[440,1385],[439,1388],419,420,[440,1732,1268],[1715,1248],[1181,1359,1249],[1181,1376],[1181,1300],[1181,1341],[419,1181,1342],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1655,1309],[440,1656,1310],[439,1676],440,439,419,420,[440,1752],[439,1756],[419,1756],[420,1714],1715,1733,1734,[439,1696],419,420,440,[439,1732],1735,[420,1695],440,439,419,420,439,440,439,419,420,439,440,439,440,439,1848,439,419,420,440,439,419,420,440,439,440,439,419,420,440,439,419,420,440,439,419,420,439,440,[439,1692],1735,1736,1716,1713,1714,1715,1716,1713,1714,1713,[440,1677],439,[440,1673],1733,1735,1736,1736,1733,1734,1736,1735,1736,1715,1736,1735,1736,1735,1736,1735,1736,[420,1756],[419,1757],420,420,439,440,420,419,439,440,420,419,420,419,439,[440,1673],1715,[1735,1268],[1736,1269],[1359,1270],[1181,1320],1181,[439,1181,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[419,1309],[1715,1310],[419,1716],[420,1676],420,439,440,420,419,439,[440,1694],[420,1754],[419,1755],[420,1696],419,439,1848,[420,1674],1716,[439,1737],440,[419,1678],[420,1679],[439,1680],440,419,420,420,439,440,419,420,419,420,419,420,420,439,440,[420,1652],[419,1653],[439,1676],440,420,419,[420,1673],[419,1656],[439,1657],440,420,419,439,440,419,420,439,440,419,420,[419,1712],1715,1716,1736,1733,1734,1735,1736,1733,1734,1733,[420,1697],419,[420,1672],1715,1735,1736,1716,1713,1714,1715,1716,1713,1736,1735,1736,1735,1736,1735,[440,1736],[439,1695],440,439,440,440,[419,1652],[420,1653],[440,1676],439,419,420,440,439,440,439,[419,1652],1715,1735,1715,[1716,1289],[1379,1290],[1181,1340],1428,[439,1181,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,28,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[439,1309],[1735,1310],[439,1736],[440,1696],440,419,420,440,439,419,420,440,439,440,439,[419,1652],[420,1653],1716,1736,[440,1737],439,[439,1698],[440,1699],[439,1700],440,439,440,440,439,440,439,440,439,440,439,[440,1326],[440,1327],[419,1328],[420,1674,1344],[1736,1345],[1736,1344],[1736,1345,7],[420,1676,8],[440,9],[439,1673,1344,10],[1736,1345],[1716,1323],[419,1737],420,440,439,440,439,439,440,439,440,439,440,[439,1732],1735,1736,1716,1713,[1714,1678],[1715,1679],[1716,1680],1713,1714,1713,[440,1717],439,[440,1692],1736,1735,1736,1735,1736,1735,1736,1735,1736,1735,1736,[439,1753],[440,1754],[420,1755],[419,1756],[420,1757],419,420,419,420,419,[439,1732],1715,1716,[419,1655],[439,1656],[440,1657],420,419,420,419,[439,1693],1735,1736,1735,[1736,1289],[1359,1290],[1181,1360],1181,[419,1181,1301],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,[4,1328],[4,1346],[28,1829],[4,1346],[4,1347],[4,1323],[4,1324],4,[4,1324],[4,1327],[4,1328],[4,1344],[4,1345],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[419,1309],[420,1695,1310],[419,1696],420,419,439,440,420,419,439,440,420,419,420,419,[439,1694],1735,[420,1736],[419,1756],[419,1757],420,[419,1718],[420,1719],[419,1720],420,419,420,420,419,420,419,420,[419,1326],[420,1327],[419,1328],[420,1346],[419,1347],[439,1348],[440,1364],1251,1364,[1365,7],8,9,[419,1364,63,10],1365,[1736,1322],[1736,1323],[440,1676],420,419,419,420,[419,1678],[420,1679],[419,1680],420,419,420,[419,1732],[1736,1246],1735,1736,1733,[1734,1698],[1735,1699],[1736,1700],1733,1734,[1733,1245],[420,1737],419,[420,1712],1733,1735,1736,1736,1733,[419,1733],[420,1753],[419,1754],[420,1755],[419,1756],[420,1695],419,420,440,439,440,439,440,439,440,[439,1674],1715,1716,1713,1714,1713,[439,1677],440,439,440,439,440,[439,1694],1735,1736,[1716,1309],[1379,1310],[1181,1380],1181,[439,1181,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1328],[4,1329],[4,1366],1849,[4,1366],[4,1367],[4,1290,1343],[4,1344],[4,1345],[4,1344],[4,1347],[4,1348],[4,1364],[4,1365],[4,1366],[4,1367],[4,1364],[4,1365],[4,1366],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,[439,1309],[440,1310],439,440,439,440,[439,1678],[440,1679],[439,1680],440,439,[440,1652],[439,1653],[440,1657],439,440,[439,1694],[440,1695],439,439,440,[439,1738],[440,1739],[439,1326,1740],[440,1327],[439,1328],[440,1346],[440,1347],[439,1346],[440,1347],[439,1346],[440,1347],[439,1346],[440,1347],[439,1348],[440,1366],[439,1367],[440,1368],[439,1181,1384],[440,1181,1271],[439,1181,1384],[440,1357,1385,7],8,9,[439,1379,1384,83,10],[440,1378,1385],[1379,1342],[1716,1322],[1716,1323],[440,1675],439,439,440,[439,1698],[440,1699],[439,1700],440,439,440,[439,1732],[1716,1266],[1715,1323],1716,1713,[1714,1718],[1715,1719],[1716,1720],1713,[1713,1328],[1714,1265],[419,1757],439,[440,1732],1736,[440,1753],[439,1754],[440,1755],[439,1756],[439,1757],440,[439,1678],[440,1679],[439,1680],440,439,440,420,419,[420,1652],[419,1653],[420,1676,1084],[420,1085],[420,1673,1086],[419,1734],1735,1736,1733,1734,1733,[419,1697],420,419,420,419,420,[419,1326],[420,1694,1327],[1735,1328],[1736,1329],[1356,1330],[1181,1338],1411,[419,1181,1301],[420,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[4,1290],[552,1386],[572,1869],[572,1308,1386],[572,1309,1387],[4,1310,1363],[4,1364],[4,1365],[4,1364],[4,1367],[4,1368],[4,1384],[4,1281,1385],[552,1282,1386],[552,1387],[553,1384],[552,1385],[552,1386],[553,1289,1387],[4,1290,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,0,0,[419,1329],[420,1330],420,420,[419,1673],[420,1653],[419,1654,1698],[420,1655,1699],[419,1656,1700],[420,1676],[419,1674],1715,1716,[420,1677],419,420,419,420,419,420,[420,1326],[419,1327,1758],[420,1674,1328,1759],[419,1653,1346,1760],[420,1656,1347],[419,1653,1348],[420,1366],[420,1367],[419,1366],[420,1367],[419,1366],[420,1367],[419,1366],[420,1367],[420,1181,1368],[420,1181,1379,1386],[419,1181,1356,1387],[1181,1388],1401,1181,1181,[1181,1395,7],8,9,[1181,1398,83,10],[1181,1399],[1181,1400,1362],[420,1736,1342],[1736,1322],[1716,1323],[419,1653],[420,1656],[420,1657],[419,1718],[420,1719],[419,1720],420,419,420,[419,1732],[1736,1286],[1735,1322],[1736,1323],[1733,1324],[1734,1325,1738],[1735,1326,1739],[1736,1327,1740],[1733,1328],[1733,1329],[419,1737,1285],420,419,[420,1752],[419,1757],420,419,420,419,420,420,[419,1698],[420,1652,1699],[419,1653,1700],[420,1654],[419,1655],[420,1656],[440,1657],439,[440,1672,1223],1224,[440,1104],[440,1105],[440,1732,1106],[1714,1249],1715,1716,1713,1714,1713,[419,1717],420,439,440,439,[440,1328,7],[439,9],[440,1347,10],[439,1694,1348],[1379,1349],[1181,1380,1350],1181,[1181,1295],[439,1181,1377,1301],[440,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[552,1290],552,552,[572,1328],[573,1329],[4,1330,1383],[4,1384],[4,1385],[4,1384],[4,1387],[4,1388],4,[4,1301],[552,1302],[552,1324],552,[552,1326],[552,1327],[553,1309],[4,1310,1362],[4,1342],[4,1322],[4,1323],4,4,4,4,4,4,0,0,[439,1349],[440,1350],440,[440,1674],1715,1716,[1715,1718],[1716,1719],[439,1715,1720],[440,1716],1715,[1716,1245],1736,[440,1717],439,440,1827,[440,1674],[439,1653],[440,1654,1326],[440,1655,1327],[439,1656,1328],[1716,1348],1366,1367,[439,1368],[440,1379,1386],[440,1356,1387],[439,1181,1386],[440,1181,1357,1387],[439,1181,1356,1386],[440,1181,1387],[439,1181,1386],[440,1181,1387],[1181,1398,1388],[1181,1399],[1181,1400],1181,[1181,1317],[1181,1300],1421,[1181,7],8,9,[1181,83,10],1421,1428,[1181,1375,1362],1342,[1736,1322],[1716,1323],1716,[440,1677],[439,1738],[440,1739],[439,1740],440,439,440,[439,1752],[1716,1306],[1715,1342],[1716,1343],[1713,1346],[1714,1347,1758],[1715,1346,1759],[1716,1347,1760],[1713,1348],[1714,1349],[419,1737,1305],420,439,440,439,440,439,440,439,[440,1652],[1827,1653],[439,1656,1718],[440,1716,1719],[1716,1720],1713,1714,1715,1716,[419,1261],[420,1358,1262],[1735,1359,1244],[1735,1358,1124],[1736,1359,1125],[1733,1358,1126],[1734,1359,1269],[1735,1270],1736,1733,1734,1733,[439,1737],440,420,419,[420,1328],[419,1348,7],[420,9],[419,1367,63,10],[420,1379,1368],[1356,1369],[1181,1339],1181,[1181,1315,1261],[419,1262],[420,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[552,1290],552,[572,1328],[573,1348],[4,1349],[4,1350],[4,1223],[4,1224],[4,1224],[4,1227],[4,1228],4,[4,1321],[552,1322],[552,1344],[553,1347],[553,1346],[553,1347],[553,1329],[4,1330,1382],[4,1362],[4,1342],[4,1322],[4,1344],[4,1345],[4,1346],[4,1345],[4,1323],4,0,0,[420,1310],419,[420,1673],[419,1715,1246],1716,1736,[1735,1738],[1736,1739],[1735,1740],1736,[1735,1328],[1736,1265],1736,[419,1757],420,419,[420,1674,1326],[1714,1327],[1715,1328],[1716,1346],[1715,1347],[1716,1348],1368,[1379,1386],[1378,1387],[1379,1388],1356,[1181,1339],1181,[1181,1395],[1181,1400],1181,1181,1181,1428,1181,1411,[1181,1316],1377,[1376,1222],[1181,1319,1223],[1181,1224,7],8,9,[1181,1227,83,10],[1181,1228],[1401,1229],[1181,1395,1230],[1181,1357,1341],1342,[1736,1322],[1716,1323],[420,1697],[419,1758],[420,1759],[419,1760],420,419,420,420,[1848,1693],[1735,1362],[1736,1363],[1733,1366],[1734,1367],[1735,1366],[1713,1367],[1714,1368],[419,1734,1369],[439,1696],440,439,440,[439,1652],[419,1653],[420,1654],[419,1655],[420,1656],1734,1733,[1735,1738],[1736,1739],[1736,1740],1733,1734,1735,1715,[419,1301],[420,1358,1302],[419,1715,1359,1303],[420,1715,1378,1303],[419,1716,1379],[420,1713,1358],[419,1714,1359,1289],[1715,1290],1716,1713,1713,1714,[419,1757],420,419,[420,1328],[419,1329],[420,1368,7],[419,9],[420,1181,1387,83,10],[1181,1399,1388],[1181,1400],1411,1181,[1181,1335,1281],[420,1282],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[552,1290],552,[572,1309],[4,1368],[4,1369],[4,1261],[572,1262],[552,1244],[572,1244],[552,1247],[572,1269],[4,1270],[4,1341],[4,1342],[4,1364],[4,1367],[4,1366],[4,1367],[4,1349],[4,1350],4,[4,1362],[4,1342],[4,1364],[4,1365],[4,1366],[4,1365],[4,1322],[4,1323],0,0,[420,1310],419,1736,[1735,1266],[1736,1323],[1733,1324],[1734,1325,1758],[1735,1326,1759],[1735,1327,1760],[1736,1328],[1733,1329],[419,1736,1285],[420,1696],419,420,[419,1673],1714,[1715,1328],[1716,1348],[1736,1366],[420,1735,1367],[419,1736,1368],[420,1379,1388],1356,[1181,1398],[1181,1399],[1181,1400],1181,1181,1181,1421,1181,[1181,1295],[1181,1296],[1181,1297],[1181,1298],[1181,1299],1377,1378,[1379,1242],1243,[1358,1244,7],[1359,8],[1358,9],[1358,1247,103,10],[1359,1248],[1181,1295,1249],[1181,1318,1250],[1181,1337],[1181,1357,1362],[1181,1342],[1736,1302],[419,1717],420,419,420,420,419,420,419,420,[419,1752,1382],[420,1756,1383],[419,1756,1386],[420,1714,1387],[1715,1386],[1733,1387],[440,1734,1388],[420,1696,1389],419,420,419,[420,1673],[419,1715],1716,1716,1715,1716,1714,1715,[1735,1758],[1736,1759],[1716,1760],1713,1714,1715,1716,[439,1716,1321],[440,1378,1322],[439,1735,1379,1344],[440,1736,1378,1345],[439,1735,1379,1346],[440,1736,1378,1347],[439,1733,1379,1329],[419,1734,1330],1735,1736,1733,[419,1737],420,440,439,[440,1309],[439,1349],[1181,1300,1388,7],[420,9],[1181,83,10],1401,1181,1181,1181,[1181,1355,1301],[419,1302],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1289],[552,1290],552,[572,1309],[4,1310],4,[4,1281],[573,1302],[572,1264],573,[572,1308],[573,1309],[4,1310],[4,1382],[4,1383],[4,1384],[4,1387],[4,1386],[4,1387],[4,1388],4,4,[4,1382],[4,1362],[4,1281,1384],[553,1282,1385],[552,1386],[572,1385],[4,1342],[4,1302],0,0,[419,1310],420,1716,[1715,1286],[1716,1343],[1713,1344],[1714,1345],[1715,1346],[1716,1347],[1713,1348],[1714,1349],[420,1737,1305],419,420,419,[420,1732],[1714,1328],[420,1715,1329],[419,1716,1368],[420,1181,1386],[419,1357,1387],[1379,1388],1356,[1181,1338],1401,1181,1411,[1181,1316],[1181,1299],[1181,1300],1181,[1181,1223],[1377,1224],[1378,1224],[1379,1224],[1379,1224],[1358,1224],[1359,1224],[1359,1224],[1358,1262],[1359,1263],[1378,1264],1379,1359,[1378,1267],[1379,1268],[1359,1269],[1376,1270],[1181,1300],[1181,1395],[1181,1357,1301],[1716,1302],[420,1737],419,419,420,419,420,419,420,419,420,419,420,[419,1694],[420,1754],[419,1755],[420,1696],419,420,419,[439,1673],[440,1715],[439,1716],1736,1736,1735,1736,[1735,1328],[1736,1346],[1735,1346],[1736,1347],[1735,1323],1736,1735,1736,1735,[1736,1341],1342,[1715,1364],[1716,1365],[420,1715,1366],[419,1716,1367],[1713,1368],[1714,1388],1715,1716,1713,[419,1737],439,440,420,[419,1309],[420,1359,1310],[1181,1320,7],9,[1181,83,10],[1181,1295],[1181,1300],1401,1421,[1181,1375,1321],[419,1322],[420,1323],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,1268],[4,1248],[552,1227],[572,1309,1228],[4,1310],4,[4,1321],[573,1343],[552,1345],[572,1346],[572,1347],[573,1329],[4,1330],4,4,4,4,[4,1223],[4,1224],[4,1224],[4,1227],[4,1228],4,4,[4,1281],[573,1282],572,573,[573,1281],[4,1282],0,0,[439,1310],440,[439,1693],[1735,1306],[1736,1363],[1733,1364],[439,1734,1365],[1735,1366],[1713,1367],[1714,1368],[1734,1369],[440,1696],439,419,420,[440,1694],[1734,1309],[419,1735,1379,1349],[1736,1181,1300,1388],1181,[1181,1395],[1181,1399],[1181,1400],[1181,1222],[1181,1223],[1181,1224],[1181,1224],[1181,1377,1224],[1181,1378,1224],[1181,1376,1224],[1181,1358,1224],[1359,1243],[1358,1244],[1359,1244],[1358,1244],[1359,1244],[1378,1244],[1379,1244],[1379,1244],[1378,1263],1358,1359,1378,1379,[1358,1287],[1378,1288],[1379,1289],[1379,1290],[1181,1320],1181,[1181,1301],[1736,1302],[419,1677],420,439,440,439,440,439,440,439,419,420,440,439,419,420,440,439,440,439,[419,1672,1246],1735,1736,1715,[1716,1328],[1715,1346],[1716,1347],[1715,1348],[1716,1304],[1715,1366],[439,1716,1367],[1715,1322],[1716,1323],1715,1716,1715,1715,[1716,1362],[1735,1384],[1736,1385],[1735,1386],[1736,1387],[1733,1388],1734,1735,1713,1714,[420,1737],419,420,[419,1328],[420,1329],[419,1379,1330],[1181,1340,7],9,[1181,83,10],[1181,1395],[1181,1400],1181,[1181,1316],[1181,1377,1341],[420,1342],[419,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,[4,1268],[4,1247],[4,1309,1248],[4,1310,1227],[4,1228],[4,1341],[4,1363],[572,1365,1304],[573,1366],[4,1367],[4,1349],[4,1350],4,4,4,[4,1261],[552,1262],[572,1244],[552,1244],[552,1247],[572,1269],[4,1270],4,[4,1301],[553,1302],552,553,[553,1301],[4,1302],0,0,[419,1310],420,1848,[439,1752],[440,1756,1383],[420,1756,1384],[419,1714,1385],[1715,1386],[1733,1387],[1734,1388],[419,1696],420,419,439,440,420,[419,1694,1289],[439,1379,1330],[1181,1320],1181,1401,1421,1181,[1181,1242],[1358,1243],[1359,1244],[1358,1244],[1359,1244],[1358,1244],[1359,1244],[1378,1244],[1379,1263],[1378,1264],1379,1378,1379,1358,1359,1358,1359,1358,1359,1358,1359,1378,1378,[1379,1289],[1359,1290],[1181,1340],1421,[1181,1301],[1716,1302],[439,1697],440,419,420,419,420,419,420,[420,1652],[439,1653],[440,1654],[420,1655],[419,1656],[439,1657],440,420,419,420,419,[439,1692,1266],[1735,1323],1736,[1735,1328],[1736,1348],[1735,1366],[1715,1367],[1716,1368],[439,1736,1385],[1735,1386],[1736,1387],[1735,1342],[1736,1343],[1735,1346],[1736,1346],[1735,1347],[1735,1323],1736,1715,1716,1715,1716,1713,1714,1715,1733,1734,[419,1696],420,419,[420,1309],[1359,1349],[1359,1350],[1181,1360,7],9,[1181,83,10],1181,1181,[1181,1295],1377,1359,[1359,1301],[419,1302],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,[4,1268],[4,1247],[4,1248],[4,1228],[4,1383],[4,1385],[4,1386],[4,1387],[4,1369],[4,1370,1223],[4,1224],[4,1227],[4,1228],[4,1281],[572,1282],[573,1264],572,[572,1267],[573,1289],[4,1290],4,[4,1301],[553,1302],[479,1164],[553,1165],[553,1301],[4,1302],0,0,[439,1310],440,440,419,420,440,[439,1694],[419,1754],[420,1755],[440,1696],439,[440,1652],[439,1657],419,1827,[440,1308],[439,1309],[440,1379,1310],[1181,1340],1181,1181,1181,[1181,1261],[1359,1262],[1378,1263],[1379,1264],1378,1379,1378,1379,1358,1359,1358,1359,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1358,1378,[1379,1289],[1379,1290],[1181,1360],1401,[1181,1301],[1716,1302],[439,1717],440,439,440,439,[440,1652],[439,1653],[440,1656],[440,1716],[419,1716],[420,1713],[440,1714],[439,1715],[419,1716],[420,1676],440,439,440,439,[419,1712,1286],[1715,1343],[1716,1347],[1735,1348],[1715,1368],[1716,1386],[1735,1387],[1736,1388],[439,1753],[440,1754],[439,1755],[440,1715,1362],[1716,1363],[1715,1304],[440,1716,1366],[1716,1367],[1715,1322],[1716,1323],1735,1736,1735,1736,[1733,1245],1734,1735,1736,[440,1695],439,440,[419,1308],[420,1309],[1379,1310],1379,[1380,7],9,[1181,83,10],1181,1421,[1181,1315],1359,[1379,1261],[419,1262],[420,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1268],[4,1248],[4,1227],[4,1227],[4,1227],[4,1227],[4,1227],[4,1243],[4,1244],[4,1247],[4,1248],[4,1281,1227],[572,1282,1227],[573,1227],[573,1227],[572,1227],[573,1309,1227],[4,1310,1227],[4,1227],[4,1281,1227],[573,1282,1183],[572,1184],[573,1185],[4,1262],[4,1263],0,0,[419,1310],420,[419,1678],[439,1679],[440,1680],420,419,439,440,420,[419,1674],1715,1716,[439,1676],440,[420,1328],[419,1329],[419,1379,1330],[1181,1360],1181,1181,[1181,1295],[1378,1281],[1379,1282],1358,1359,1358,1359,1358,1359,1378,1379,1378,1379,1358,1359,1358,1359,1358,1359,[1356,1229],[1181,1398],[1181,1399],1357,1378,1359,[1359,1289],[1359,1290],[1181,1380,1229],[1181,1230],[1181,1321],[1736,1322],[419,1737,1323],420,419,420,[419,1674],[420,1734],[419,1733],[420,1735],[419,1736],[439,1736],[440,1733],[420,1734],[419,1735],[439,1715],[440,1716],[420,1655],[419,1656],[420,1657],419,[439,1732,1306],[1735,1363],[1736,1304],[1715,1368],[1735,1388],1736,[419,1756],[420,1695],419,420,419,[420,1694],[420,1736,1383],[1735,1385],[1736,1386],[1736,1387],[1735,1342],[1736,1322],[1713,1323],1714,1715,[1716,1328],[420,1713,1265],[419,1714,1678],[420,1715,1679],[1716,1680],420,419,420,[419,1328],[420,1329],[1359,1330],1356,[1181,1338,7],9,[1181,83,10],1181,1181,[1181,1335],1379,[440,1379,1281],[439,1282],440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1370],[4,1268],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1263],[4,1264],[4,1267],[4,1268],[28,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1203],[4,1204],[4,1205],[4,1263],4,0,0,[439,1310],440,[439,1698],[440,1699],[439,1700],440,1827,440,[439,1328],[440,1344],[439,1715,1231],[1716,1344],[1715,1345],[440,1716,1346,7],[439,9],[440,1348,63,10],[439,1349],[439,1379,1350],[1181,1380],1411,1428,[1181,1375],[1358,1281],[1359,1282],1378,1379,1378,1379,1378,1379,1358,1359,1358,1359,1378,1379,1378,1379,1378,1379,[1181,1380],1181,1181,[1181,1337],1357,1379,[1379,1268],[1379,1248],[1376,1249],[1181,1319,1250],[1181,1341],[440,1736,1342],[439,1736,1322],[440,1654,1323],[439,1655],[440,1656],[439,1713],[440,1714],[439,1715],[440,1735],[439,1736],[440,1716],[439,1713],[440,1714],[439,1715,1678],[440,1716,1679],[439,1713,1680],[440,1714],[439,1713],[440,1677],439,[440,1693],[1736,1383],[1715,1387],[1735,1388],1736,[440,1696,1328],[439,1724],[440,1725],[439,1726],[440,1323],439,440,[440,1752],[439,1753],[440,1756],[439,1756],[440,1735,1362],[439,1715,1342],[440,1716,1343],[1734,1346],[1735,1347],[1736,1348],[440,1695,1285],[439,1694,1698],[440,1735,1699],[1736,1700],[440,1676],439,[1847,1288],[440,1289],[1359,1349],[1379,1350],[1181,1380],[1181,7],9,[1181,83,10],1181,1401,[1181,1355],1359,[420,1359,1301],[420,1302],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[420,1310],420,[419,1718],[420,1719],[419,1720],420,419,[420,1674,1328],[419,1329],[420,1364],[419,1735,1251],[420,1736,1364],[419,1735,1365],[420,1736,1366,7],9,[420,1181,1368,83,10],[1181,1398,1369],[1181,1399,1370],[1181,1400],1181,1181,[1181,1395],[1181,1378,1281],[1379,1282],1358,1359,1358,1359,1358,1359,1378,1379,1378,1379,1358,1359,1358,1359,1358,1359,1376,[1181,1299],[1181,1318],1421,[1181,1375],1359,1358,[1359,1268],[1358,1269],[1181,1400,1270],1181,[1181,1362],1363,[420,1713,1282],[419,1714],[420,1714],[419,1733],[420,1734],[420,1735],[420,1715],[419,1716],[420,1736],[419,1733],[420,1734],[419,1735,1698],[420,1736,1699],[419,1733,1700],[420,1734],[419,1733],[420,1697],419,420,[419,1732],1735,1736,[420,1696,1328],[420,1329],[419,1304],[420,1745],[419,1746],[420,1322],[419,1323],420,420,1847,420,419,[420,1694],[420,1735,1362],[419,1736,1363],[1713,1366],[1714,1367],[1715,1368],[419,1675,1305],[420,1718],[419,1694,1719],[1715,1720],1716,[420,1657],[419,1308],[419,1309],[1379,1310],1356,[1181,1339],[1181,7],9,[1181,83,10],1428,1181,[1181,1375],1379,[440,1379,1301,1678],[440,1302,1679],[439,1680],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[440,1269],[440,1270],[439,1738],[440,1739],[439,1740],440,[439,1673],[440,1716,1309],1349,[420,1379,1384],[439,1181,1380,1271],[440,1181,1384],[439,1181,1357,1385],[440,1181,1356,1386,7],9,[440,1181,1388,83,10],[1421,1389],[1181,1390],1181,1401,1181,[1181,1261],[1358,1262],[1359,1263],1378,1379,1378,1379,1378,1379,1358,1358,1359,1359,1378,1379,1378,1379,1378,1379,1378,1379,1376,[1181,1296],1377,1358,1359,[1379,1288],[1378,1289],[1181,1290],1401,1181,[1181,1281],[440,1733,1282],[439,1734],[440,1734],[439,1713],[440,1714],[440,1715,1246],[440,1735],[439,1736],[440,1716],[439,1713],[440,1714],[439,1715,1718],[440,1716,1719],[419,1713,1720],[420,1714],[439,1713],[440,1717],439,440,[439,1752],[440,1756],[439,1757],[440,1309],[440,1349],[439,1764],[440,1652,1765],[439,1653,1766],[440,1654,1342],[439,1655,1322],[440,1656,1323],[440,1657],439,440,439,440,[440,1693],[439,1736,1383],[1733,1386],[1734,1387],[1735,1388],[439,1677],[440,1738],[439,1739],[440,1694,1740],1736,[440,1677],[439,1328],[439,1329],[1356,1330],[1181,1338],1411,[1181,1317,7],9,[1181,1299,83,10],[1181,1300],1181,[1181,1395],[1181,1357,1261],[420,1262,1698],[419,1263,1699],[420,1700],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[420,1289],[419,1290],[420,1758],[419,1759],[420,1760],[419,1652],1716,[1736,1309],[439,1181,1379,1310],[1181,1379],[1181,1380],1181,[1181,1336],[1181,1400,7],9,[1181,83,10],1411,[1181,1317],[1181,1318],1421,[1181,1317],[1377,1281],[1378,1282],1379,1358,1359,1358,1359,1358,1359,1378,1378,1379,1379,1358,1359,1358,1359,1358,1359,1358,1359,1378,1379,1378,1378,1379,1359,[1358,1289],[1181,1376,1290],[1181,1300],1181,[1754,1181,1281],[420,1755,1282],[419,1756],[420,1734],[420,1734],[419,1734],[420,1735,1266],[419,1736,1323],[420,1735],[419,1736],[420,1733],[419,1734],[420,1735,1738],[419,1736,1739],[439,1733,1740],[440,1734],[420,1733,1245],[419,1737],420,419,420,419,420,[419,1289],[420,1290],419,[420,1694],[1715,1361],[1716,1362],[1716,1342],[1715,1302],[420,1716],[419,1676],420,419,1828,419,[420,1672],1713,1714,1715,[420,1697],[419,1758],[420,1759],[419,1674,1760],1716,[419,1697],[420,1289],1349,[1181,1350],1181,[1181,1317],[1377,1242,7],9,[1358,1228,103,10],1376,[1181,1319],1181,[1181,1281],[440,1282,1718],[439,1719],[440,1720],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[420,1289],[419,1290],420,419,420,[419,1672],[1736,1328],[1736,1329],[420,1181,1379,1330],[1181,1356],[1181,1400],1411,1181,[1181,7],9,[1181,1295,83,10],[1181,1296],[1181,1377],[1181,1376],[1181,1299],[1181,1377],[1181,1378,1301],[1379,1302],1359,1378,1379,1378,1379,1378,1379,1358,1359,1358,1359,1378,1379,1358,1359,[1378,1324],1379,1358,1359,1358,1359,1358,1358,1359,1379,[1378,1289,1420],[1181,1356,1290,1420],[1181,1338,1420],[1181,1420],[1181,1281,1420],[440,1282,1420],439,[419,1693],[420,1734],[439,1714],[440,1715,1286],[439,1716,1322],[440,1715,1323],[439,1716],[440,1713],[439,1714],[419,1715,1758],[420,1716,1759],[440,1713,1760],[439,1713,1328],[419,1714,1265],[420,1757],440,[439,1652],[440,1653],[439,1654],[419,1655],[420,1656,1268],[440,1657,1269],[439,1270],419,[420,1735],1736,[1736,1281],[1735,1282],1736,1716,[440,1675],439,440,439,[440,1692],1733,1734,1735,[440,1717],439,[440,1673],1736,1736,[439,1717],[440,1289],[1181,1290],1411,[1181,1295],[1377,1261],[419,1262,7],[419,9],[420,1248,10],[1358,1270],[1181,1380],1181,[1181,1301],[420,1302,1738],[419,1739],[420,1740],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[419,1289],[420,1290],419,420,419,[420,1692],[1736,1309],[1181,1349],[1181,1356,1350],[1181,1338],[1181,1221],[1401,1222],[1181,1223],[1181,1224,7],9,[1181,1378,1228,83,10],[1181,1378],[1181,1379],[1181,1378],[1181,1379],[1181,1378,1261],[1379,1262],[1378,1263],1379,1358,1359,1358,1359,1358,1359,1378,1379,1378,1379,1358,1359,1378,1379,1358,1359,1378,1379,1378,1379,1378,1378,1379,1358,1440,1440,1440,1440,1440,1440,1827,439,[440,1752],[419,1753],[420,1735,1306],[419,1736,1342],[420,1735,1343],[419,1736,1344],[420,1733,1345],[420,1734,1323],[439,1735],[440,1736],[420,1733,1328],[419,1733,1348],[439,1737,1285],440,420,[419,1732],1715,[1716,1678],[1715,1679],[1716,1288,1680],[420,1677,1289],[419,1290],439,[440,1672],1715,[1716,1301],[1735,1302],1736,1715,1716,[419,1657],420,419,[420,1712],1713,1714,1715,[420,1753],[419,1754],[420,1755],[419,1756],[420,1756],[419,1757],[420,1289],[1181,1290],1181,[1181,1395],[1357,1301],[419,1302],420,[420,1289],[1356,1290],[1181,1400],1181,[1181,1321],[440,1322,1758],[439,1323,1759],[440,1760],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[439,1268],[440,1269],[439,1270],440,439,[419,1712],[1716,1309],[1181,1356,1310],[1181,1400],1181,[1181,1241],[1181,1242],[1358,1243],[1359,1244,7],[1358,9],[1359,1248,103,10],[1181,1358,1224],[1181,1359,1224],[1181,1358,1224],[1181,1359,1224],[1358,1243],[1359,1263],1358,1359,1358,1359,1378,1379,1358,1359,1358,1359,1358,[1359,1678],[1359,1679],[1379,1680],1359,1356,1357,1379,1359,[1358,1370],1359,1358,[1359,1760],1359,1379,1378,1460,1460,1460,1460,1460,1460,440,439,440,439,[440,1693],[439,1716,1362],[440,1715,1363],[439,1716,1364],[440,1713,1365],[440,1714,1343],[419,1715,1344],[420,1716,1345],[440,1713,1348],[439,1714,1368],[419,1737,1305],1827,440,[439,1732],1735,[1736,1698],[1715,1699],[1716,1700],[440,1697,1289],[439,1290],[440,1084],[439,1692,1085],[1735,1086],[1736,1281],[1715,1282],1716,1735,1736,[439,1677],440,439,[440,1732],1735,1736,[439,1695],440,439,440,439,440,439,[440,1289],[1376,1290],[1181,1319],1181,[1181,1321],[439,1322,7],[440,9],[440,1348,63,10],1330,1181,1181,[1181,1316,1341],[420,1342],[420,1302],419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[419,1288],[420,1289],[419,1290],420,420,[439,1694],[440,1736,1309],[1181,1310],1181,1181,[1181,1261],[1358,1262],[1359,1263],[1379,1264],[1378,1267],[1379,1268],[1378,1244],[1379,1244],[1378,1244],[1379,1244],[1378,1263],1379,1378,1379,1378,1379,1358,1359,1378,1379,1378,1379,1378,[1358,1698],[1379,1699],[1378,1700],[1181,1379],[1181,1338],[1181,1315],1378,1379,[1378,1390],1379,1378,1379,1379,1359,1358,[1359,1309,1480],[1181,1310,1480],[1181,1480],[1181,1315,1480],[1181,1359,1301,1480],[419,1302,1480],[420,1678],[419,1674,1679],[420,1676,1680],419,420,[419,1693],[420,1735,1383],[419,1736,1384],[420,1733,1385],[419,1734,1363],[439,1735,1364],[440,1713,1365],[420,1714,1368],[419,1734,1388],[439,1696],440,420,[419,1732],1715,[1716,1718],[1735,1719],[1736,1720],[420,1717,1268],[419,1248],[419,1104],[420,1712,1105],[1715,1106],[1716,1243],[1735,1263],1736,1735,1736,[419,1697],420,420,[419,1752],[420,1753],[419,1757],420,419,420,419,420,419,420,[419,1268],[420,1269],[1376,1270],[1181,1300],[1181,1341],[1363,7],9,[1368,83,10],[1181,1350],1181,[1181,1295],[1181,1377],[440,1358,1301],[440,1302],439,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[439,1308],[440,1309],[439,1310],440,440,419,[420,1694,1309,1420],[1181,1310,1420],[1181,1420],[1181,1420],[1181,1281,1420],[1378,1282,1420],[1379,1283],[1358,1284],1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1379,1359,1358,1359,1358,1359,[1378,1718],[1379,1719],[1356,1720],[1181,1338],1181,[1181,1335],1378,1379,1358,1359,1359,1358,1359,1379,1378,[1379,1309],[1181,1310],1181,[1181,1335],[1654,1181,1379,1301],[439,1655,1302],[440,1656,1698],[439,1715,1699],[440,1716,1700],[439,1653],[440,1676],439,[440,1752],[439,1756],[440,1756],[439,1714,1383],[440,1715,1384],[439,1733,1385],[440,1734,1388],[439,1696],440,439,[440,1674],[439,1734],1735,[1736,1738],[1715,1739],[1716,1740],[440,1737],[439,1268],[439,1124],[440,1732,1125],[1735,1126],[1736,1263],1715,1716,1715,1716,[439,1717],440,440,439,440,439,440,439,440,439,440,439,440,439,[440,1309],[1359,1310],[1181,1320],1181,[1181,1383,7],9,[1181,1388,83,10],1428,1181,[1181,1315],[1181,1358],[420,1359,1301],[419,1302],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[419,1347],[420,1329],[419,1330],420,1848,439,[440,1460],[419,1460],1460,1460,1460,[1358,1460],1359,[1378,1678],[1379,1679],[1378,1680],1379,1358,1359,1378,1358,1358,1359,1378,1358,1359,1379,1378,1379,1378,1379,1378,1379,[1359,1738],[1379,1739],[1181,1380,1740],1181,1421,[1181,1355],1378,1379,1378,1379,1379,1378,1379,1359,1358,[1359,1309],[1181,1310],1181,[1181,1355],[1181,1359,1301],[1733,1302],[1734,1718],[1735,1719],[1736,1720],1736,[420,1735],[419,1676],420,420,420,[419,1694],[420,1754],[419,1755],[420,1696],419,420,[419,1673],1715,1716,1715,[1716,1758],[1735,1759],[1736,1760],[420,1677],419,420,[420,1672],1715,1716,1735,1736,1735,1736,[419,1737],420,419,420,419,420,[419,1652],[420,1653],[419,1654],[420,1655],[419,1656],[420,1657],419,[420,1327],[419,1309],[1379,1310],[1181,1360],1411,[1181,7],9,[1181,83,10],1421,1181,[1181,1335],1378,[440,1358,1281],[439,1282],440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[439,1367],[440,1349],[439,1350],440,439,440,[439,1309,1480],[439,1181,1310,1480],[1181,1480],[1181,1315,1480],[1181,1359,1301,1480],[1378,1302,1480],1379,[1358,1698],[1359,1699],[1358,1700],1359,1378,1379,1358,1378,1378,1379,1358,1378,1379,1359,1358,1359,1359,1358,1359,1378,[1379,1758],[1356,1759],[1181,1400,1760],1181,1181,[1181,1375],1358,1359,1358,1359,1358,1359,1378,1379,1378,[1379,1309],[1181,1310],1181,[1181,1375],[1181,1379,1301],[1713,1302],[1714,1738],[1715,1739],[1716,1740],1716,1713,1714,[440,1653],[440,1676,1678],[440,1679],[439,1680],440,439,440,1847,440,[419,1693],1735,1736,1715,1716,1715,1716,[440,1697],439,1827,[440,1692],1735,1736,1715,1716,1715,1715,1716,[440,1676],439,440,439,[440,1674],1715,[1716,1326],[1715,1327],[1716,1328],[1715,1344],[440,1716,1345],[439,1676,1346],[440,1347],[439,1348],[1379,1330],[1181,1380],1181,[1181,7],9,[1181,83,10],1181,1181,[1181,1355],1358,[420,1378,1301],[419,1302],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1359,1038],[558,1379,1348],[419,1368],[420,1328,1388],[419,1329],[420,1181,1377,1330],[1181,1356],[1181,1400],1181,1181,1181,1428,1181,[1181,1223],[1181,1317,1224],[1181,1300,1227],[1181,1228],1411,1181,1181,1181,1421,1181,[1181,1383],[558,1342],[419,1322],[420,1323,1383],[559,1342],[558,1378,1322],[559,1358,1033],0,0,[419,1387],[420,1350],420,420,419,[420,1327],[419,1309],[419,1181,1320,1310],1181,[1181,1335],[1181,1379,1281],[1358,1282],1359,[1378,1718],[1379,1719],[1378,1720],1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1378,1379,1379,1378,1379,1358,1359,[1181,1380],1181,1181,[1181,1295],[1181,1377],1358,1359,1378,1379,1378,1379,1358,1359,[1358,1328],[1359,1329],[1181,1330],1181,[1181,1395],[1181,1357,1321],[1733,1322],[1734,1323,1758],[1735,1759],[1736,1760],1736,1733,1734,1735,[1736,1698],[419,1657,1699],[420,1700],419,420,419,420,419,439,[440,1732],1715,1735,1736,1735,1736,[419,1717],420,419,[420,1712],1715,1716,1735,1736,1735,1735,1715,1716,[419,1653],[420,1653],[419,1653,1326],[1715,1327],1716,1736,[1735,1328],[1736,1348],[1735,1364],[1736,1365],1366,1251,1368,[1356,1350],[1181,1339],1181,[1181,1295,7],9,[1181,1300,83,10],1181,1181,[1181,1375],[1358,1261],[420,1262],[419,1263],[420,1673],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1038,[579,1379,1329],[419,1368],[439,1038,1388],[440,1348],[439,1349],[1181,1356,1350],[1181,1338,1221],[1181,1222],[1181,1223],[1181,1224],[1181,1227],[1181,1227],[1181,1227],[419,1243],[420,1244],[420,1247],[420,1248],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1299,1228],[1181,1300,1229],[1181,1230],[1181,1362],[439,1342],[440,1322],[419,1033,1362],[420,1342],[579,1378,1322],0,0,[439,1344],[440,1345],[440,1346],[440,1347],[439,1346],[440,1347],[439,1329],[439,1181,1340,1330],1181,[1181,1355],[1181,1359,1301],[1378,1302],1379,[1358,1738],[1359,1739],[1358,1740],1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1358,1359,1379,[1181,1380],1181,1181,[1181,1395],[1181,1357],1378,1358,1359,1358,1359,1358,1358,[1359,1328],[1378,1348],[1379,1349],[1181,1380,1350],1181,1181,[1181,1383],1342,[1716,1322],[1713,1323],[1714,1324],[1715,1325],1716,1713,1714,[1715,1718],[439,1675,1719],[440,1720],439,[440,1652],[439,1653],[440,1657],439,440,[439,1672],1735,1736,1713,1715,[1716,1328],[439,1737,1344,7],[440,8],[439,9],[440,1732,1347,63,10],[1735,1323],[1736,1034],[1715,1035],1716,1715,1716,1735,1736,1715,[1716,1328],[1715,1346],[1716,1724],[439,1736,1725],[1735,1726],[1736,1348],[1378,1368],[1379,1384],[1380,1385],[1181,1386],[1181,1271],[1181,1399,1388],[1181,1400],1181,[1181,1316],[1181,1377,7],9,[1181,1376,83,10],[1181,1318],1181,[1181,1395],[1378,1281],[440,1282],[439,1674],1716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1309,[419,1349],[439,1038,1388],[440,1348],[558,1368],[1181,1379,1369],[1181,1380,1370],[1181,1241],[440,1181,1242],[439,1243],[440,1244],[420,1247],[440,1247],[439,1247],[440,1263],[440,885],[439,886],[440,1268,887],[439,1247],[440,1247],[420,1247],[440,1247],[439,1248],[440,1181,1376,1249],[1181,1319,1250],1181,[1181,1362],[558,1342],[439,1343],[440,1033,1362],[559,1342],0,0,[420,1358,1364],[419,1359,1365],[420,1358,1366],[419,1359,1367],[420,1358,1366],[419,1359,1367],[420,1349],[1181,1360,1350],1181,[1181,1375],[1181,1379,1321],[1358,1322],[1359,1323],[1378,1758],[1379,1759],[1378,1760],1379,1378,1379,1378,1379,[1378,1324],[1379,1325],[1378,1326],[1358,1327],[1359,1328],[1379,1346],[1378,1231],[1379,1346],[1378,1347],[1379,1346],[1378,1347],[1379,1323],[1356,1324],[1181,1400,1325],1401,1428,1411,[1181,1395],1357,1358,[1359,1328],[1378,1344,7],[1379,8],[1378,9],[1378,1347,63,10],[1379,1348],1368,[1356,1350],[1181,1400],1181,1181,1181,[1181,1362],1342,[1733,1343],[1734,1344],[1735,1345],[1736,1323],1733,1734,[1735,1738],[419,1677,1739],[420,1740],1828,[420,1693],1736,[420,1677],419,420,[419,1692],1733,1734,1733,[1735,1328],[420,1736,1348],[419,1364,7],[420,8],[419,9],[420,1367,83,10],[1715,1343],[1716,1344],[1735,1345],[1736,1344],[1735,1345],[1736,1323],[1716,1326],[1736,1327],[1735,1328],[1736,1329],[1735,1366],[1736,1744],1745,[1181,1356,1746],[1181,1368],[1181,1398,1388],[1181,1399],[1181,1400],1181,1421,1181,[1181,1317],[1181,1299,1242],[1377,1224],[1378,1224,7],[1378,9],[1379,1224,103,10],[1376,1228],[1181,1300],1181,[1181,1301],[420,1302],[420,1752],1736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1290],[440,1309],[579,1181,1368],[1181,1356,1388],[1181,1399,1389],[1181,1400,1390],[1181,1261],[420,1262],[420,1263],[1828,1264],440,419,420,419,[420,905],[420,906],[420,907],675,676,440,[419,1267],[420,1268],[419,1269],[420,1181,1376,1270],[1181,1318],1181,[1181,1362],1363,[419,1282],[420,1281],0,0,[1181,1399,1384],[1181,1399,1385],[1181,1396,1386],[1181,1397,1387],[1181,1398,1386],[1181,1399,1387],[1358,1388],[1181,1380,1389],1181,[1181,1395],[1181,1357,1341],[1181,1378,1342],[1379,1343],[1358,1344],[1359,1347],[1358,1323],[1359,1324],[1358,1325],[1359,1326],[1358,1327],[1359,1328],[1358,1344],[1359,1345],[1358,1346],[1378,1347],[1379,1348],[1358,1366],[1359,1251],[1358,1366],[1359,1367],[1358,1366],[1359,1367],[1358,1343],[1181,1400,1344],[1181,1345],[1181,1346,1436],1291,[1181,1344,1438],[1181,1345],[1181,1337,1346],[1378,1347],[1379,1348],[1364,7],8,9,[1367,83,10],1368,[1356,1388],[1181,1338],1181,1181,1401,1181,1181,[1181,1375,1362],[1359,1363],[1714,1364],[440,1715,1365],[1716,1322],[1713,1323],1714,[1715,1758],[439,1697,1759],[440,1760],439,[440,1674],1716,[440,1697],439,1848,[439,1712],1713,1713,[440,1695,1038],[439,1694,1348],[440,1359,1368],[1181,1384,7],8,9,[4,1387,83,10],[1735,4,1363],[1736,1364],1365,[440,1364],1365,[1735,1343],[1736,1346],[1715,1347],[1716,1348],[1358,1349],[1359,1386],[1358,1764],[1359,1765],[1376,1766],[1181,1319,1388],1428,1181,1411,1181,[1181,1295],[1181,1296],[1377,1261],[419,1262],[420,1244],[419,1244,7],[420,9],[439,1244,10],[440,1248],[1181,1380,1270],1181,[1181,1321],[440,1322],[440,1323],[439,1693],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1290],[440,1289],[1181,1356,1290],[1181,1338],1181,1181,[1181,1281],[440,1282],419,420,419,439,440,439,440,1847,440,695,696,419,[439,997],[440,998],[439,1289],[440,1181,1356,1290],[1181,1400],1181,[1181,1316],[1181,1377,1301],[439,1302],[440,1281],0,0,1181,1181,1181,[1181,1401],1181,1181,[1181,1336],[1181,1400],1181,1181,[1181,1375],[1181,1379,1362],1363,[1378,1364],[1379,1367],[1378,1343],[1379,1344,7],[1378,8],[1379,9],[1378,1347,63,10],[1379,1348],[1378,1364],[1379,1365],[1378,1366],[1379,1367],[1359,1368],[1356,1386],[1181,1397,1271],[1181,1397,1386],[1181,1398,1387],[1181,1399,1386],[1181,1387],[1181,1363],1364,[1181,1365],[1181,1366],[1181,1311],[1181,1364],1365,1366,1367,[1181,1378,1368],[1181,1384,7],8,9,[1356,1387,83,10],[1181,1396,1388],[1181,1339],[1181,1317],[1181,1296],[1181,1296],[1181,1297],[1181,1299],[1181,1319],[1181,1395],[1181,1396,1383],[1181,1357,1384],[1359,1385],[419,1736,1342],[420,1733,1322],[1734,1323],1735,[419,1717],420,[419,1673],1735,1736,[420,1717],419,420,[419,1732],1733,[419,1695,1328],[420,1329],[1734,1368],[1181,1388],[1181,7],8,9,[1181,1336,83,10],[1181,1357,1383],[1358,1384],[1181,1380,1385],[1181,1384],[1379,1385],1363,1366,1367,1368,[1378,1369],1379,1378,1358,1359,1376,[1181,1300],1181,1181,[1181,1295],1377,1358,[1358,1301],[439,1302],440,439,440,419,[420,1289],[1376,1290],[1181,1300],[1181,1395,1341],[420,1342],[419,1282],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1290],[440,1289],[1181,1359,1290],[1181,1300],1181,[1181,1316],[1181,1377,1301],[420,1302],439,440,439,615,419,420,420,439,420,439,440,439,440,419,[420,1309],[439,1181,1310],1181,[1181,1317],[1181,1377],[1181,1379,1301],[419,1302],[420,1281],0,0,[1181,1297,1227],[1181,1298,1227],[1181,1299,1227],[1181,1298,1227],[1181,1299,1227],[1181,1299,1228],[1181,1318],[1181,1411],1181,1181,[1181,1395],[1181,1396],[1181,1399,1383],[1181,1357,1384],[1359,1387],[1358,1363],[1359,1364,7],8,9,[1359,1367,83,10],1368,[1378,1384],[1379,1385],[1378,1386],[1378,1387],[1181,1395,1388],[1181,1339],1181,1181,1411,1181,1428,[1181,1383],[1181,1384],[1181,1385],[1181,1386],[1280,1331],[1181,1384],[1181,1385],[1181,1386],[1181,1387],[1181,1388],[1181,7],[871,8],[872,9],[1181,1400,83,10],[1181,1317],[1181,1296,1223],[1181,1357,1224],[1379,1227],[1378,1227],[1379,1227],[1378,1227],[1379,1227],[1181,1299,1227],[1181,1318,1228],[1181,1395],[1181,1397],[1357,1362],[1713,1358,1342],[1714,1343],[1715,1344],[439,1716,1345],[440,1653,1344],[439,1714,1345],[1715,1344],[1716,1345],[440,1716,1344,7],[439,8],[440,62,9],[439,1752,1344,63,10],[440,1695,1345],[439,1348],[440,1714,1358,1349],[1181,1388],[1181,1295],[1181,1318,7],8,9,[1181,83,10],[1181,1395],[1181,1399],[1181,1400],1411,[1181,1395],[1181,1399,1383],[1181,1386],[1181,1387],[1181,1397,1388],[1181,1398,1389],[1181,1399],1357,1378,1379,1379,[1181,1380],1181,1401,[1181,1395],1357,1378,[1378,1321],[419,1322],[420,1344],[419,1345],[420,1346],[439,1347],[440,1348],[1379,1330],[1181,1380],1411,[440,1181,1301],[439,1302],440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1290],[440,1289],[1181,1379,1290],[1181,1320],1181,[1181,1375],[1181,1379,1301],[440,1302],419,420,419,420,439,440,440,419,440,419,420,419,1827,439,[440,1309],[419,1181,1310],1181,[1181,1375],[1181,1379],[1181,1379,1301],[439,1302],[440,1281],0,0,[35,1247],[36,1247],[35,1247],[36,871,1247],[872,1247],[871,1248],[1181,1376,1228],[1181,1299],[1181,1300],1181,[1181,1401],[1181,1428],1181,[1181,1395],[1181,1396],[1181,1396,1383],[1181,1397,1384,7],8,9,[1181,1399,1387,83,10],[1181,1399,1388],[1181,1398],[1181,1399],1357,[1181,1376],[1181,1300],[1181,1411],[1181,1401],[1181,1295],[1181,1296],[1181,1299],[1181,1300],1181,1181,[1181,1411],1181,1257,1181,1181,1181,1428,[1181,1317],[1181,1297,7],8,9,[1181,1298,1223,83,10],[36,1378,1224],[35,1243],[872,1244],[891,1247],[892,1247],[871,1247],[872,1247],[15,871,1247],[16,813,1247],[15,1248],[1181,1318,1249],1181,[1181,1337],[1357,1362],[1734,1379,1363],[1735,4,1364],[1736,4,1365],[1733,4,1364],[1734,4,1365],[16,1735,1358,1364],[1736,1359,1251],[16,1736,4,1364,7],8,9,[4,1364,83,10],[1358,1365],[1733,1359,1368],[1181,1369],[1181,1316],1377,[1379,1223,7],8,9,[1181,1227,83,10],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1300,1228],1428,1428,1181,1401,1181,1181,[1181,1336],1357,1356,[1181,1399],[1181,1400],1181,1181,1421,[1181,1336],[1181,1399],[1357,1341],1363,1364,1365,1366,1367,1368,[1356,1350],[1181,1338,1221],[1181,1222],[420,1181,1281],[419,1282],420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1289,[439,1359,1290],[440,1309],[1181,1359,1310],[1181,1340],1421,[1181,1395],[1181,1379,1301],[440,1302],439,1828,439,440,419,420,440,439,635,439,440,439,440,419,[420,1309],[439,1181,1310],1181,[1181,1395],[1181,1396,1261],[419,1262],[420,1263,1261],[579,1358,1262],0,0,[15,937],[16,937],[15,937],[16,891,937],[892,937],[891,938,1268],[892,1248],[1379,1227],[1181,1376,1228],[1181,1297],[1181,1298],[1181,1299],[1181,1296],[1181,1319],[1181,1401],1181,[1181,7],8,9,[1181,83,10],1181,[1181,1411],1181,[1181,1336],[1181,1399],[1181,1400],1181,[1181,1317],[1181,1377],[1181,1359],[1181,1358],[1181,1320,1223],[1181,1224],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1228],[1181,1295],[1181,1300],[1181,1337],[1359,1223,7],8,[871,9],[35,891,1243,103,10],[892,1244],[891,1263],[892,1264],892,892,[872,794],[892,795],[871,796],[16,893],[35,1268],[15,1269],[1181,1300,1228],1421,[1181,1395],[1181,1396,1383],[1181,1357,1384],[1359,1385],[1358,1384],[1359,1385],[1378,1384],[1379,1271],[1359,1384,7],8,9,[1356,1384,83,10],[1181,1385],[1181,1388],[1181,1316,1389],[1377,1223],[4,1224],[35,1243,7],[36,8],[35,9],[36,1247,103,10],[35,1247],[36,1247],[35,1247],[36,1247],[35,1269],[1181,1270],1181,1181,1181,1181,1181,1181,[1181,1395],[1181,1338],1181,1181,1181,1181,1181,1181,1181,[1181,1336],[1181,1357,1383],[1378,1384],[1379,1385],[1378,1386],[1379,1387],[1356,1388],[1181,1339],[1181,1241],[1181,1295,1242],[440,1243],[439,1263],440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1268,[439,1379,1269],[440,1268,1270],[420,1379,1269],[1181,1360,1270],1181,1181,[1181,1321],[420,1322],[419,1323],420,[419,993],420,439,440,420,419,420,419,420,419,420,[439,1038],[440,1348],[419,1181,1330],1401,1181,[1181,1281],[419,1282],[420,1281],[559,1358,1282],0,0,[35,957],[36,957],[35,957],[36,957],[35,957],[36,958],[35,872,938,1268],[871,1247],[872,1248],[36,1379,1227],[35,1378,1227],[1379,1227],[1378,1227],[1181,1376,1227],[1181,1297,1227],[1181,1298,1227],[1181,1299,1227,7],8,9,[1181,1299,1227,83,10],[1181,1296,1228],[1181,1296],[1181,1297],[1181,1298],[1181,1299],[1181,1296,1223],[1181,1296,1224],[1181,1379,1227],[1181,1378,1227],[1379,1227],[1378,1227],[871,1243],[35,813,1244],[36,1247],[35,1247],[36,1247],[35,1247],[36,1247],[35,1248],[1379,1227],[1181,1378,1227],[1181,1227],[36,893,1243,7],[35,872,8],[36,871,9],[872,1263,10],[872,1264],871,872,891,892,[892,814],[871,815],[871,816],[16,893],15,[35,1268],[15,871,1248],[1181,1300,1249],1181,[1181,1428],[1181,1395],[1181,1398],[1181,1399],[1181,1398],[1181,1399],[1181,1400],[1181,1336,7],8,9,[1181,1339,83,10],1401,[1181,1316],[1181,1377,1223],[15,1243],[16,1244],[15,973],[16,974],[15,977],[16,977],[15,977],[16,977],[15,977],[16,977],[15,1289],[1181,1376,1290],[1181,1299],[1181,1300],1181,[1181,1317],[1181,1318],1401,1428,1181,1181,[1181,1316],[1181,1296],[1181,1297],[1181,1298],[1181,1319],1181,1181,[1181,1336],[1181,1396],[1181,1397],[1181,1398],[1181,1399],[1181,1339],[1181,1223],[1181,1224],[420,1262],[419,1263],[420,1674,1264],[420,1653],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1358,1268],[439,1359,1269],[440,1268,1270],[420,1269],[1181,1270],1181,[1181,1316,1341],[440,1181,1342],[439,1343],[440,1033],[439,1013],440,419,420,440,439,440,439,440,655,[440,1038],[419,1348],[420,1368],[439,1181,1376,1350],[1181,1319],1421,[1181,1281],[419,1282],[420,1281],[579,1358,1282],0,0,[15,937],[16,937],[15,937],[16,938],15,[16,978],[15,958],[891,938],[892,939,1268],[891,940,1247],[892,1247],[891,1247],[892,1247],[891,1247],[892,1247],[891,1247],[36,853,1247,7],[35,891,8],[36,892,9],[35,888,1247,103,10],[892,1248],[1379,1227],[1378,1227],[1379,1227],[1378,1227],[891,1243],[892,1244],[891,1247],[892,1247],[891,1247],[892,1247],[891,1263],[15,833],16,15,36,35,36,[35,1268],[36,849,1247],[35,871,1247],[871,1247],[16,893,1263],15,16,[35,908],871,891,892,871,871,[871,834],[871,835],[872,836],[35,851],36,15,[35,1268],[36,1269],[35,1181,1227],[36,1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227],[1181,1227,7],8,9,[1181,1227,83,10],[1181,1227],[1379,1227],[36,1243],[35,973],[36,974,794],[35,795],[36,796],35,36,35,36,35,36,[35,1309],[1181,1358,1310],1359,[1181,1320],1181,[1181,1337],[1181,1400],1181,1181,1181,[1181,1295],1377,1358,[1358,1223],[1358,1224],[1376,1227],[1181,1227],[1181,1227],[1181,1228],1181,1181,[1181,1317],[1181,1299,1223],[1181,1224],[420,1243],[419,1244],[440,1263],[439,1674],1715,1716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1378,1328],[558,1379,1329],[439,1018,1330],[440,1289],[1181,1290],1181,[1181,1375,1071],[420,1181,1376,1362],[419,1342],[420,1302],[616,993],420,439,440,420,419,420,419,420,419,[420,1309],[439,1368],[440,1181,1379,1350],[419,1181,1379,1080],[1181,1380],1181,[1181,1281],[419,1282],[420,1281],[559,1378,1282],0,0,[35,957],[36,957],[35,957],[36,958],[35,959],36,[35,978],[36,958],[872,959],[871,960],872,871,872,871,872,871,[16,873],15,16,[15,888,1267],[872,1268],[871,1247],[872,1247],[871,1247],[872,1247],[871,1263],872,871,872,871,872,871,[35,853],36,35,16,15,16,15,16,[15,908],891,871,[35,831],36,15,[36,908],871,872,[16,871],[15,871],[871,854],[891,855],[16,893,856],15,16,36,15,[16,1268],[15,849,1247],[16,15,891,1247],[16,891,1247],[15,892,1247],[16,872,1247],[15,871,1247],[16,872,1247],[15,871,1247],[16,872,1247,7],[15,871,8],[16,872,9],[15,892,1247,103,10],[16,871,1247],[15,871,1247],[16,872,1263],[15,892],[16,892,814],[15,831,815],[16,816],15,16,15,16,15,16,[15,1309],[1181,1378,1310],1379,[1181,1360],1181,1181,1181,[1181,1316],[1181,1300],1181,[1181,1315,1223],[1358,1224],[1378,1227],[420,1243],[419,1244],[420,1247],[420,1247],[420,1247],1248,[1181,1297,1227],[1181,1298,1227],[420,1377,1227],[419,1243],[420,1244],[440,1263],439,[420,1673],1715,1735,1736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1309],[419,567,1349],[439,1038,1350],[440,1348],[1181,1330],1181,[1181,1395,1091],[1181,1396,1092],[419,1181,1357,1281],[420,1282],[420,1013],419,420,419,420,1847,420,419,420,419,[420,1289],[1181,1379,1290],[1181,1379],[1181,1356],[1181,1400],1181,[1181,1281],[419,1282],[420,1281],[579,1358,1282],0,0,15,16,15,[16,978],[15,979],[16,980],15,[16,978],[15,979],[891,980],892,891,892,891,892,891,[36,913],35,[36,829],[35,891],892,891,892,891,892,891,892,891,892,891,892,891,[15,873],[16,781],[15,782],[36,783],[35,784],36,35,36,35,[35,850],891,892,[16,832],35,16,[15,850],892,891,871,[872,874],[871,875],[36,893,876],35,36,16,36,36,[35,977],[36,35,908,977],[36,891,977],[871,977],[872,977],[891,977],[892,977],[871,977],[872,977],[891,977],[892,977],[892,974],[872,974],[891,974],892,871,[872,834],[35,871,835],[36,813,836],35,36,[35,714],[36,715],35,36,[35,1268],[36,1269],[1379,1270],1376,[1181,1318],1181,[1181,1316],1377,[1376,1223],[1181,1224],[420,1243],[419,1244],[420,1247],[440,1263],[439,1264],[440,1267],[440,1267],[440,1267],[420,1268],[419,1247],[420,1247],[420,1247],[439,1263],440,420,420,[440,1752],1735,1736,1716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1309],[1181,1368],[1181,1350],1181,1428,[1181,1261],[439,1262],[440,1263],440,439,440,[439,1564],[440,1565],439,440,420,440,439,[440,1289],[1181,1379,1290],[1181,1356],[1181,1338],1181,[1181,1316],[1181,1377,1281],[419,1282],[420,1281],[559,1358,1282],0,0,35,36,35,36,[35,999],[36,1000],35,36,[35,999],[871,1000],872,871,872,871,872,[15,852],16,[15,829],872,871,872,871,872,871,872,871,872,871,872,871,872,871,[35,893],[36,801],[35,802],[16,803],[15,804],16,15,16,15,15,[36,888],872,871,[15,813],36,35,[36,850],872,871,[872,894],[871,895],[16,872,896],[15,832],16,36,16,16,15,[16,15],[16,908],871,872,871,872,872,871,891,892,891,892,892,892,872,[892,854],[15,871,855],[16,893,856],15,16,[15,734],[16,735],15,16,15,[16,1289],[1358,1342],[1359,1228],1376,[1181,1296],[1181,1377,1223],[420,1358,1224],[419,1243],[420,1244],[440,1263],439,440,420,420,419,419,419,440,439,440,440,420,419,440,440,420,[419,1694],1735,1736,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[1181,1290],1401,1181,[1181,1261],[419,1262],[420,1263],419,420,419,420,655,[420,1585],420,439,440,419,420,[419,1268],[420,1269],[1181,1338,1270],1181,[1181,1295],[1181,1377,1261],[419,1262],[420,1263,1261],[1358,1262],[579,1378,1263],0,0,15,16,15,16,[15,1019],[16,891,1020],15,16,[15,999],[16,891,1000],892,891,[36,892],[35,909],[36,913],35,36,[35,908],[36,909],[35,910],892,891,892,891,892,891,892,891,892,891,892,[16,912],[15,913],[16,821],[36,892,822],[35,823],[36,824],35,36,35,36,[35,829],891,892,891,[35,833],36,35,36,[36,828],891,892,891,[36,892],[35,872],[36,832],16,36,36,35,[36,35],36,[35,891],871,891,892,872,871,872,872,871,872,891,892,892,[871,874],[35,871,875],[36,893,876],35,36,35,36,35,36,35,[36,1268],[558,1247],[559,1248],[1358,1227],[1359,1227],[558,1243],[559,1244],[559,1263],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1289],[1181,1290],1421,1181,[1181,1281],[439,1282],440,439,1827,439,440,439,440,419,420,419,439,440,439,[440,1289],[420,1181,1290],1181,[1181,1315],[1181,1379,1281],[439,1282],[440,1301],[558,1358,1302],[559,1358],0,0,16,15,16,[36,1038],[35,1039],[36,1040],35,36,[35,999],[36,871,1000],872,[15,871],[16,833],15,16,15,16,15,16,15,[16,850],871,872,871,872,871,872,871,872,871,[15,851],36,35,[36,841],[16,842],[15,843],[16,844],15,16,[15,808],[16,809,794],[871,795],[871,796],872,871,[15,853],16,15,16,[16,848],871,872,871,872,892,872,[36,809],[16,810],[16,811],[15,872],[16,873],16,[15,849],871,871,872,892,891,892,871,891,892,[871,794],[871,795],[871,796],[871,894],[15,872,895],[16,851,896],15,16,15,16,15,16,15,16,558,[559,1268],[558,1247],[559,1247],[578,1263],579,579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[1181,1376,1290],[1181,1299],[1181,1319],[1181,1301],[440,1302],439,440,420,440,439,1848,[420,1625],439,440,439,440,616,420,[439,1309],[440,1181,1310],1181,[1181,1335],[1181,1379,1301],[439,1302],[440,1321],[578,1378,1322],[579,1358,1033],0,0,[36,1055],[35,1056],[36,1057],[16,1058],[15,1059],[16,1060],15,16,[15,1019],[16,891,1020,794],[892,795],[891,796],[36,853],35,36,35,36,35,36,35,36,[35,850],892,891,892,[36,909],[35,910],[36,911],[35,912],[36,913],35,16,15,[16,861],[36,892,862],[35,863],[36,864],35,36,[35,828],[891,814],[871,815],[891,816],892,891,[35,873],36,35,36,[36,868],891,[892,757],[891,758],[892,759],872,871,871,871,872,892,[36,893],36,35,[36,908],[35,891],[36,871],872,871,871,[36,872],871,872,[871,814],[871,815],[871,816],891,[35,893],36,[35,714],[36,715],35,36,35,36,35,[36,971],[578,934],[579,937],[578,938],558,578,579,579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1289],[1181,1379,1290],[1181,1379],[1181,1320],[1181,1301],[420,1302],420,439,440,419,420,[419,1644],[420,1645],419,420,419,635,439,440,[419,1309],[420,1181,1310],1428,[1181,1355],[1181,1379,1321],[439,1322],[419,1323,1341],[420,1342],[559,1358,1302],0,0,[16,1075],[15,1076],[16,1077],[36,871,1078],[35,1079],[36,1036,1080],[35,1037],[36,1038],[35,872,1039],[36,871,1040,814],[872,815],[871,816],[16,873],15,[16,921],[15,922],[16,923],[15,924],[16,925],15,16,15,[15,908],[16,912],[15,913],16,15,16,15,16,15,36,35,[36,881],[16,882],[15,883],[16,884],15,16,[15,888],[892,834],[891,835],[871,836],872,871,[16,893],35,36,35,[36,888],871,[872,777],[871,778],[891,779],892,871,872,891,[35,892],[36,912],[35,913,794],[36,16,795],[15,796],16,[15,850],[16,891],892,891,871,872,891,892,[891,834],[16,871,835],[872,836],871,[15,893],16,[15,734],[16,735],15,16,15,16,15,[16,991],[558,953],[558,957],[559,958],[578,959],579,558,559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[1181,1379,1290],[1181,1379],[1181,1340],[1181,1321],[440,1343],[419,1033],420,419,439,440,439,440,439,440,439,440,419,420,[439,1309],[440,1181,1310],1181,[1181,1375],[1181,1379,1341],[578,1342],[419,1302],[420,1281],[579,1378,1282],0,0,[36,1095],[35,1096],[36,1097],[35,1098],[36,1038],[35,1056],[36,1057],[35,891,1058],[36,892,1059],[35,891,1060,834],[892,835],[891,836],[36,893],35,36,[35,942],[36,943],[35,944],36,35,36,35,35,36,35,36,35,36,35,[36,808],[35,812],[36,813],35,[36,901],[36,902],[35,903],[36,904],35,36,[35,908],[892,854],[892,855],[891,856],871,872,[36,913],35,35,[36,830],871,872,[892,797],[872,798],[871,799],891,891,892,872,[35,873],36,[35,35,814],[36,36,815],[35,816],36,35,[36,888],872,871,872,871,872,[36,871],[35,851,854],[36,855],[35,850,856],871,872,[36,832],35,36,35,36,35,36,[35,971],[36,972],[578,973],578,[558,978],[559,958],[558,937],[578,938],579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1289],[440,1181,1379,1290],[439,1181,1379],[440,1181,1360],[439,1181,1341],[440,1342],[420,1302],440,439,440,[419,1564],[420,1565],439,419,420,419,1827,439,440,[419,1268],[420,1269,1565],[1181,1270],[1181,1395],[1181,1357],[1181,1379,1281],[419,1282],[420,1281],[559,1358,1282],0,0,16,15,16,[15,1038],[16,872,1039],[15,871,1076],[16,872,1077],[15,871,1078],[872,1079],[871,1080,854],[872,855],[15,871,856],[16,913],15,16,[15,962],[16,963],[15,964],16,15,16,16,15,16,15,16,[15,830],[16,809],[15,812],871,872,871,[15,831],16,16,15,16,15,16,36,[35,908,874],[892,875],[892,876],891,[15,851],16,15,[16,829],892,891,892,[871,817],[871,818],[891,819],891,871,872,892,[35,893],36,[35,15,834],[36,16,835],[15,836],16,[15,829],[16,891],892,891,892,891,892,[16,893],[15,874],[16,891,875],[15,876],[16,888],892,[16,872],[15,832],16,15,16,15,16,[15,991],[16,992],578,578,578,[579,978],[578,957],[579,958],[559,937],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[420,1181,1379,1290],[420,1181,1356],[420,1181,1400],[420,1428],[439,1181,1281],[440,1282],419,675,676,420,1828,419,439,440,439,440,419,420,439,[440,1289,1585],[1181,1290],1181,[1181,1337],[1181,1357,1301],[419,1302],[420,1281],[579,1358,1282],0,0,[36,1055],[35,1056],[36,1057],[35,891,1058],[36,892,1059],[35,891,1096],[36,892,1097],[891,1098],892,[35,891,874],[36,852,875],[35,876],36,35,36,[35,982],[36,983],[35,984],36,35,36,36,35,36,35,[36,829],892,891,892,891,892,891,892,[36,813],36,35,36,35,35,16,[15,894],[16,850,895],[15,909,896],[36,910,955],35,36,[36,808],871,872,871,872,891,891,891,892,891,[35,892],[36,912],[35,913],36,[35,35,854],[36,36,855],[35,808,856],[15,809],871,871,872,871,872,871,872,871,[35,832,894],[36,895],[35,829,896],[36,871],872,[36,892],[35,872],[36,809],[35,810,794],[36,811,795],[35,872,796],[36,873],[35,1011],[36,1012],558,559,558,578,579,[578,978],[579,957],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1289],[440,1181,1356,1290],[419,1181,1338],[440,1181],[419,1181,1223],[420,1243],[419,973],439,695,696,440,420,439,419,615,419,420,439,440,419,[420,1309],[1181,1310],1181,1411,[1181,1301],[419,1302],[420,1281],[559,1358,1282],0,0,[16,1075],[15,1076],[16,1077],[15,871,1078],[872,1079],[871,1080],872,871,872,[15,833,894],[16,895],[15,896],[16,1835],[15,830],[16,809],[15,810],[16,811],[15,812,794],[16,813,795],[15,796],16,16,[15,808],[16,810],[15,812],871,872,871,872,871,872,871,872,871,[16,832],15,16,15,15,36,35,36,[35,1038],[16,975],15,35,[16,888],891,892,891,892,872,871,891,[36,892],[35,912],[35,913],[36,853],35,36,[35,15,874],[36,16,875],[15,828,876],891,871,891,892,891,892,891,892,891,[15,892],[36,809],892,891,892,872,871,871,[15,871,814],[16,872,815],[15,892,816],[16,893],[15,1011],[16,1012],578,579,[578,808],[579,809],[578,810],[579,811],[579,812],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1359,1289],[439,1290],[440,1289],[420,1181,1290],[439,1181],[420,1181],[439,1181,1281],[440,1282],439,440,419,420,439,[440,1625],419,419,420,439,440,419,420,439,[440,1309,1625],[1181,1310],1181,[1181,1317],[1181,1377,1301],[419,1302],[420,1281],[579,1378,1282],0,0,[36,1095],[35,1096],[36,1097],[35,891,1098],892,891,892,891,892,[35,853],36,35,[36,829],891,892,891,892,[891,814],[36,833,815],[35,816],[36,829],[36,809],892,891,892,[891,1038],[892,1110],[891,1111],[35,892,1112],[891,1113],[892,1114],[891,1115],[892,1033],[891,1034],[36,892,1035],[35,809,1036],[36,812,1037],[35,813,1038],[35,1114],[16,1115],[15,1116],[16,1117],[36,1058],[35,995],36,[15,830],872,871,872,871,872,871,872,[15,872],[16,851],15,35,36,35,36,[35,35,894],[36,36,895],[36,35,888,896],892,891,871,872,871,872,871,872,871,872,871,872,871,891,892,871,872,[35,891,834],[36,892,835],[35,912,836],[36,913],[35,1011],[36,1012],558,[559,829],871,872,892,891,892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1379,1289],[439,1290],[440,1309],[440,1181,1310],[419,1181,1295],[440,1181,1319],[419,1181,1301],[420,1302],419,420,439,440,[419,1644],[420,1645],[439,1084],[1848,1085],[420,1086],419,420,439,440,[419,1644],[420,1309,1645],[1181,1376,1310],[1181,1318],[1181,1395],[1181,1357,1301],[439,1302],[440,1281],[559,1378,1282],0,0,[16,1054],[15,1055],[16,1112],[15,1113],[16,1054],[15,871,1055],[872,1116],[871,1117],[872,1033],[15,873],[16,1071],[15,829],872,871,872,871,872,[871,834],[16,872,835],[15,871,836],872,871,872,871,[872,1038],[871,1058],[872,1130],[871,1131],[872,1132],[871,1133],[872,1134],[871,1135],[872,1053],[871,1110],[872,1111],[871,1112],[872,1113],[871,1058],[15,872,1134],[36,1135],[35,1136],[36,1137],[16,1078],[15,1015],16,[35,828],892,891,892,871,[35,872],[36,912],[35,912],[36,913],35,36,15,16,15,16,[15,15],[16,16],[16,15,908],892,892,[891,1564],[871,1565],872,871,872,871,[872,1564],871,872,892,872,871,891,891,892,[35,15,872,854],[36,16,873,855],[35,15,856],[36,16],[35,15,1011],[36,16,1012],[578,830],[579,871],872,892,872,871,872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1358,1268],[578,1359,1269],[419,978,1270],[440,1248],[439,1181,1377,1227],[440,1181,1376,1227],[439,1243],[440,973],439,440,419,420,[439,1223],[440,1224],[419,1104],[439,1105],[440,1106],[439,1227],[440,1228],419,420,419,[420,1268],[420,1269],[1181,1376,1227],[1181,1227],[419,1262],[420,1263,1261],[578,1358,1262],[579,1358,1263],0,0,[15,1074],[16,1075],[15,1132],[16,1133],[15,1074],[16,828,1075],[15,892,1136],[891,1137],[892,1032],[16,893,1054],[15,809,1033],[16,871],892,891,892,891,892,[891,854],[15,892,855],[16,891,856],892,891,892,[891,1038],[892,1058],[891,1078],[892,1150,794],[891,1151,795],[892,1152,796],[891,1153],[892,958,1154],[891,938,1155],[892,939,1073],[891,940,1130],[892,1131],[891,1132],[892,1133],[891,1078],[35,892,1154],[16,891,1155],[15,891,1156],[16,891,1157],[36,1098],35,36,[15,848],892,871,872,[16,912],[15,913],16,15,16,15,16,35,36,35,36,[35,35],[36,36],[36,35],[35,36,908],892,892,891,892,891,892,891,892,891,892,871,871,891,891,871,872,[892,892,874],[16,892,893,875],[15,872,876],[16,891],[15,892,1011],[16,830,1012],871,872,892,891,892,891,892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[559,1378],[559,1379,1268],[439,1359,1269],[420,978,1270],[419,1247],[420,1247],[419,973],[420,1223],[419,1224],[420,1227],[439,1227],[440,1227],[419,1358,1243],[559,1358,1244],[559,1358,1124],[559,1359,1125],[559,1358,1126],[559,1359,1247],[559,567,1359,1248],[439,1227],[440,1227],[439,1227],[419,1228],[420,978],[419,1247],[419,1247],[420,973,1261],[1358,1262],[558,1358,1263],[559,1378],0,0,[35,1094],[36,1095],[35,1152],[36,1153],[35,1094],[36,848,1095],[872,1156],[871,1157],[872,1052],[871,1074,1014],[872,1053,1032],[871,1033],[872,1037],[871,1038],[872,1056],[871,1057],[872,1033],[871,874],[872,875],[871,876],872,871,[872,1038],[871,1058],[872,1078],[871,1098],[872,814],[871,815],[872,816],871,[872,978],[871,958],[872,959,1093],[871,960,1150],[872,1151],[871,1152],[872,1153],[871,1098],[15,872],[36,871],[35,872],[36,893],16,15,16,[35,868],872,891,[16,913],36,35,36,35,36,35,36,35,36,35,36,35,16,16,15,[16,850],891,892,872,871,872,871,872,871,872,891,891,891,892,891,892,[892,912,894],[891,913,895],[892,896],892,[35,892,1011],[36,872,1012],891,892,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[579,1378],[579,1379],[578,1379,1289],[440,932,1290],[439,1223],[440,1224],[439,1224],[440,1358,1243],[439,1359,1244],[440,1359,1247],[419,1359,1247],[420,1359,1247],[439,1378,973],[579,1378],[579,1358],[579,1358],[579,1378],[579,1379,1267],[579,1379,1268],[579,1359,1247],[579,1359,1247],[579,1359,1247],[439,1359,1248],[440,1227],[439,1227],[439,1228],[440,1281],[1378,1282],[1378,1283],[579,1379],0,0,[15,980],16,15,[16,141],[15,142],[16,868,143],[892,1071],891,[892,1072],[891,1094],[892,1073,1052],[891,1053,1032],[892,1057],[891,1058],[892,1076],[891,933,1077],[892,1032],[891,1033,894],[892,895],[891,896],892,[891,1038],[892,1058],[891,1078],[892,1098],891,[892,834],[891,835],[892,836],891,[892,939],[891,978],[892,979],[891,980],892,891,892,891,[35,892],[36,891],[35,891],[36,913],36,35,[36,808],870,872,[35,913],36,16,15,16,[15,933],[16,934],[15,937],[16,937],[36,937],[16,938],[15,939],[16,940],15,36,36,35,36,[35,908],[891,1625],892,[891,921],[892,922],[891,923],[892,924],[891,925,1625],892,872,871,891,[35,892],[36,912],[16,913],872,871,872,[16,891,971],[15,892,972],[16,892,973],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1267,0,0,0,0,0,0,0,0,0,0,[35,1000],36,35,[36,161],[35,162],[36,888,163],872,871,872,871,[872,1093,1072],[871,1073,1052],[872,1077,1014],[871,1078],[872,933,1096],[871,953,1097],[872,1052],[871,1053,1032],[872,1351],[871,1352],[872,1353],[871,1058],[872,1078],[871,1098],872,871,[872,854],[871,855],[872,856],871,872,[871,998],[872,999],[871,1000],872,871,872,871,[15,872],[16,871],[15,851],16,16,15,[16,828],872,[36,833],35,36,[36,312],[35,313],[36,971],[35,953,1873],[36,954,1874],[35,957,1875],[36,957],[16,957],[36,958],[35,959],[36,960],35,16,16,15,16,15,[16,849],892,871,[872,942],[871,943],[872,944],[871,1645],872,871,872,[36,872],[35,851],36,36,[35,871],891,892,[36,871,991],[35,871,992],[36,871,993],871,872,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[15,1000],16,15,[16,181],[15,182],[16,828,183],892,891,[892,1071],891,892,[891,931,1093,1072],[892,932,1097],[891,933,1098],[892,953],[891,973],[892,1072],[16,891,1073,1052],[15,892,1371],[16,891,1372],[15,892,1373],[891,1078],[892,1098],891,892,891,[892,874],[891,875],[892,876],891,892,[891,1018],[892,1019],[891,1020],892,891,892,891,[35,892],[36,851],35,36,36,35,[36,848],872,[16,853],15,16,16,15,[16,1011],[15,1012,1893],[16,1894],[15,1895],[16,977],[36,977],[16,978],[15,979],[16,937],[15,938],[36,939],[36,940],35,36,35,36,[36,891,956],891,[892,962],[891,963],[892,964],871,[872,955],[15,912],[16,912],[16,913],15,16,16,[15,908],871,872,[871,1011],[15,871,1012],[16,871],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,1000],36,35,[36,201],[35,202],[36,848,203],872,871,[872,1091],[871,1092],872,871,[872,952],[754,953],[755,973],871,872,[36,1093,1072],[35,872,1391],[36,871,1392],[35,1393],[36,1098],[15,888],[16,871],872,871,872,[871,895],872,[871,998],872,[871,1038],[872,1039],[871,1040],872,871,872,871,[36,833],35,36,35,36,35,[36,868],871,[36,873],35,36,[36,830],[35,809],[36,871,1031],[35,872,1032],[36,1033],35,36,16,36,[35,978],[36,957],[35,958],[16,959],[16,960],15,16,15,36,[36,849,976],[36,892,1033],[892,982],[871,983],[872,984],[36,912,1038],[36,913,975],35,36,35,36,35,36,35,[36,850],892,[891,1011],[35,871,1012],[36,872],871,872,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[15,979],[16,980],15,16,[15,241],[16,868],892,[891,312],[892,313],891,[892,1013],[891,971],[892,972],[774,973],775,891,892,[16,832],15,16,15,16,[35,888],[36,891],892,[891,312],[892,313],891,892,[891,998],[892,1038],[891,1058],[892,1059],[891,1060,332],[892,333],891,892,891,[16,853],15,16,15,16,15,[16,888],872,[16,893],15,[16,808],[15,891],[16,892],[15,891,1051],[16,892,1052],[15,891,1053],[16,892,1054],[36,891,1033],[36,892],16,15,[16,977],[15,978],[16,979],[15,980],16,15,16,16,[16,996],[16,888,1053,1032],[872,1351],[36,891,1352],[35,913,1353],[36,1058],[16,995],36,35,36,35,36,16,15,16,[15,850],[16,872,1011],[15,871,1012],[16,872],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,999],[36,1000],35,36,[35,261],[36,888],872,871,872,871,872,[871,991],[872,992],[871,993],872,871,872,[36,871],[35,832],36,35,[36,829],872,871,872,871,872,871,872,[871,998],[872,999],[871,1059],[872,1060],[871,352],[872,353],871,872,871,[36,873],35,36,35,[36,312],[35,808,313],[36,872],892,[36,851],35,[36,828],[35,871,977],[36,872,977],[35,871,977],[36,872,1051],[35,871,1073],[36,872,1014],[16,871,1053],[16,872,1054],[36,873,1033],35,[36,997],[35,998],[16,999],[36,1000],35,36,35,36,[36,808,1016],[36,871,1073,1052],[35,872,1374],[16,1372],[15,1373],[16,1078],[16,1015],16,15,16,15,16,36,[16,794],[15,795],[16,796],[15,828,1011],[16,891,1012],[15,892],871,872,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[15,999],[16,1000],15,16,[15,829],891,892,891,892,891,[892,971],[891,972,332],[892,973,333],891,892,891,892,891,[15,892],[16,809],[15,812],[16,891],892,891,754,755,892,891,892,[891,998],[892,999],[891,1040],892,[891,372],[892,373],891,892,891,[16,893],15,16,15,[16,931],[15,888,932],[16,872,933],[15,851,934],[16,937],[15,829,938],[16,892],[15,891],[16,892],[15,891],[16,892],[15,891,1093],[16,892,1094],[36,891,1073],[36,892,1014],[16,893,1053],[15,1054],[36,1056],[35,1057],[36,1058],[35,1040],36,35,36,16,[16,828],[16,872,1093,1072],[15,833,1391],[36,1392],[35,1393],[36,1098],35,36,35,36,35,36,16,[36,814],[35,815],[36,816],[35,848,1031],[36,871,1032],[35,872,1033],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,978],[36,979],[35,980],[36,830],889,871,872,871,872,[871,971],[872,972],[871,973,352],[872,353],871,[872,312],[871,313],872,871,754,755,872,871,872,871,774,775,872,871,872,[871,1018],[872,1019],[871,1020],872,871,872,871,[35,872],[36,871],[36,913],35,36,35,[36,808,951],[35,872,952],[16,913,953],[35,954],[36,957],[35,958],[36,908,938],[35,871],[36,872],[35,871],[36,872],[35,909],[36,872],[16,871,1093],[16,872,1094],[15,833,1073],[16,1014],[16,1076],[15,1077],[16,1059],[15,1060],16,15,16,36,[36,848],[36,872],[35,853],16,15,16,15,16,15,16,15,16,36,[16,834],[15,835],[16,836],[15,868,1051],[16,891,1052],[15,892,992],871,872,871,872,871,872,871,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,[16,1019],[15,1020],[16,891],892,891,892,891,892,[891,991],[892,992],[891,372],[892,373],891,892,891,892,891,774,775,892,891,892,891,892,891,892,891,892,[891,1038],[892,1039],[891,1040],892,891,892,891,[15,892],[16,852],16,15,[16,893],871,[872,971],[16,893,972],[16,973],[15,974],16,[15,978],[16,958],[15,937],[16,850,938],[15,892,939],[16,851],15,[16,849],[15,891],[16,892],[15,893,1093],[16,1094],[36,1096],[35,1097],[36,1098],35,36,35,36,16,[16,868],[16,871],[15,873],36,35,36,35,36,35,36,35,36,16,[36,854],[35,855],[36,856],[35,888],[36,871,991],[35,872,992],891,892,891,892,891,892,891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,[16,1019],[15,1020],[16,908],872,871,872,871,872,[871,1011],[872,1032],[871,1112],[872,1113],[871,1112],[872,1115],[871,736,1033],[872,737,1034],[871,738,1035],[872,739,1036],[871,737,1037],[872,740,1038],[871,1116],[872,1117],[871,1112],[872,1113],[871,1110],[872,1111],[871,1114],[872,1115],[871,1058],[872,1059],[871,1060],872,871,872,871,[35,893],36,36,[35,829],871,[872,971],[36,872,972],[35,913,973],36,35,36,35,[36,978],[35,957],[36,958],[35,851,959],[36,714],[35,715],36,[35,888],[36,872],[36,893],[35,1017],[36,1018],35,36,35,36,15,16,36,[36,888],[36,872],[35,893],16,15,16,15,16,15,16,15,16,36,[16,874],[15,875],[16,830,876],[15,871],[16,872,991],[15,892,992],871,872,871,872,871,871,[15,872],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,[36,1019],[35,1020],36,[35,908],891,892,891,[892,1071],[891,1072],[892,1073],[891,1132],[892,1133],[891,1132],[892,1135],[891,1053],[892,1054],[891,1351],[892,1352],[891,1353],[892,1058],[891,1136],[892,1137],[891,1132],[892,1133],[891,1130],[892,1131],[891,1134],[892,1135],[891,1078],[892,1079],[891,1080],892,891,892,891,[15,893],16,[16,808],[15,872],[872,971],[15,872,972],[16,913,973],[15,715],[16,933],[36,937],[35,808,937],[36,813,934],[35,937],[36,937],[35,978,938],[36,979],[35,734,980],[36,735],[35,829],[36,890],[36,892],[16,851],15,16,[15,15],[16,16],[15,15],[16,16,794],[35,15,795],[36,16,796],[16,15,808],[16,16,872],[16,15,892],[15,16,851],[36,15],[35,16],[36,15],[35,16],[36,15],[35,16],[36,15],[35,16],[36,15],[16,16],[36,15,894],[35,829,895],[36,892,896],[35,891],[36,892,991],[35,871,992],871,872,871,872,871,871,[35,872],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,15,[16,978,332],[15,714,979,333],[16,715,980],15,[16,871],872,871,[872,1091],[871,1092],[872,1093],[871,1152],[872,1153],[871,1152],[872,1155],[871,1073],[872,1074],[871,1371],[872,1372],[871,1373],[872,1078],[871,1156],[872,1157],[871,1152],[872,1153],[871,1150],[872,1151],[871,1154],[872,1155],[871,1098],[872,1099],[871,1100],872,871,872,871,[35,833],36,[36,871],872,[851,991],[35,992],[36,734],[35,735,952],[36,953],[16,957],[15,888,957],[16,893,954],[15,957],[16,957],[15,958],[16,978,959],[15,979,960],[16,808,980],[15,872,960],[16,871],[16,872],36,35,36,[35,35],[36,36],[35,35],[36,36,814],[15,35,815],[16,36,816],[35,35,888],[36,36,872],[35,35,851],[36,36],[16,35],[15,36],[16,35],[15,36],[16,35],[15,36],[16,35],[15,36],[16,35],[36,36],[16,808],[15,871],[16,872],[15,871,971],[16,872,972],[15,891,973],891,892,[558,891],[559,892],[15,891],[16,891],[15,892],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1304,1704],[4,1745],[4,1746],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,35,[36,352],[35,734,1019,353],[36,735,1020],35,[36,908],[35,912],891,892,891,892,891,892,891,892,[891,1093],[892,1094],[891,1391],[892,1392],[891,1393],[892,1098],891,892,871,872,872,872,891,892,891,892,891,871,872,872,891,[15,853],16,[16,908],[15,913],[16,991],[15,992],[16,971],[15,972],[16,973],[36,829],[35,872],[36,891,974],[35,832],36,[35,978],[36,979],[35,829,978,980],[36,891,979],[35,892,980],[36,891,312],[36,913,313],16,15,[16,714],[15,715],[16,16],[15,15],[16,16,834],[35,15,835],[36,16,808,836],[15,15,872],[16,16,913],[15,15],[16,16],[15,15],[16,16],[15,15],[16,16],[15,15],[16,16],[15,15],[16,16],[15,15],[16,16],[15,888],[16,891],[15,892],[16,891,991],[15,892,992],[16,872],871,891,[578,892],[579,909],[35,911],[36,912],[35,913],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1346],[4,1347],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,[4,1328],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[552,1349],[1359,1764],[1359,1765],[1359,1766],[1359,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,15,[16,372],[15,1019,373],[16,1020],15,16,15,[16,908],[15,912],[16,912],872,871,872,871,872,871,872,871,872,871,872,871,872,871,872,892,892,871,872,872,872,872,891,892,892,871,[35,873],36,[35,931],[36,932],[35,991],[36,992],[35,991],[16,829,992],872,[891,974],892,[871,61,977],872,[16,810],[15,811],[16,812,999],[15,872,1000],[16,871,999],[15,872,1000],[16,913],16,36,35,[36,734],[35,735],36,35,[36,854],[15,871,855],[16,872,856],[35,893],36,35,36,35,36,35,36,35,[36,714],[35,715],36,35,[16,830],[15,872],[16,871],[15,872,971],[16,871,972],[15,872,973],[16,871],891,892,[15,852],16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,[4,1328],[4,1347],[4,1345],[4,1348],[4,1366],[4,1367],[4,1366],[4,1367],[573,1366],[572,1367],[4,1322],[4,1323],4,4,4,4,[4,1328],[4,1348],[4,1304,1704],[4,1745],[4,1746],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1368],[1359,1369],1379,1379,1379,[1379,1341],[1359,1342],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,35,36,[35,1019],[36,1020],35,36,35,36,35,36,[35,850],891,892,891,892,891,892,891,892,891,892,891,892,891,892,891,892,891,892,892,892,892,871,872,892,871,[15,893],16,[15,951],16,[15,1011],[16,1012],[15,829,991],[891,992],892,891,892,[891,81],892,[36,891],[35,892],[36,891,1019],[35,892,1020],[36,891,999],[35,892,1000],36,36,16,15,16,15,16,[15,829],[16,871,874],[15,872,875],[16,872,876],[15,913],16,15,16,15,16,15,16,15,[16,734],[15,735],[16,794],[15,795],[16,828,796],[15,892],[16,891,971],[15,892,972],[16,871,973],[15,872],[16,912],[16,912],[36,913],35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,[4,1328],[4,1329],[553,1364],[1358,1365],[1359,1368],[1358,1386],[1359,1387],[1358,1386],[1359,1387],[1358,1386],[1359,1387],[553,1342],[4,1343],[4,1323],4,4,[4,1328],[4,1348],[1358,1349],[1359,1764],[1358,1765],[1359,1766],[4,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,1378,1379,1378,[1379,1361],[1379,1321],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,[15,1019],[16,1020],[15,960],16,15,16,15,[16,312],[15,313],[16,850],[15,912],[16,910],[15,911],[16,912],871,872,872,871,872,871,872,871,872,871,871,872,871,872,872,872,891,892,871,872,[35,913],36,35,36,[35,829,1011],[36,891,1012],[35,871,1011],[872,1012],872,871,872,871,872,[16,871],[15,872],[16,871,1019],[15,912,1020],[16,912,1019],[15,913,1020],16,16,36,35,36,35,[36,808],[35,872],[36,872,894],[35,872,895],[36,913,896],35,36,35,36,35,36,35,36,35,36,35,[36,814],[35,815],[36,848,816],[35,892],[36,871,1011],[35,872,1012],[36,912],[35,913],36,36,16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1328],[4,1348],[1358,1349],[1359,1384],[1378,1385],[1379,1388],1378,1379,1378,1379,1378,1379,[1358,1362],[1359,1363],[4,1302],[4,1324],4,[4,1289],[4,1368],[1378,1369],1379,1378,1379,[1358,1341],[1359,1342],[4,1282],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1359,1358,1359,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,35,[36,312],[35,978,313],[36,979],[35,980],36,35,36,35,36,35,[36,702],35,36,35,[36,908],891,892,889,890,[35,891],[36,892],871,[872,312],[871,313],872,871,872,[15,891],[16,892],892,872,891,871,[15,891],[16,852],15,16,[15,808],[16,809,971],[15,872,972],[16,891,973],[15,891,1031],[871,1032],[872,1033],[872,1035],[892,1036],[891,1034],[892,1035],[36,891,1036],[35,892,1038],[36,851,1039],[35,1040],[36,999],[35,1000],36,36,16,15,16,15,[16,871],[15,872],[16,851],15,16,15,16,15,16,15,16,15,16,15,16,15,[16,834],[15,835],[16,868,836],[15,872],[16,891,1011],[15,913,1012],16,15,16,16,15,16,15,16,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1289],[1358,1368],[1359,1369],1379,1358,1359,1358,1359,1358,1359,1358,1359,1378,[1379,1321],[4,1322],[4,1344],[4,1231],[1358,1348],[1359,1330],1358,1359,1358,1356,[1181,1399],[1379,1321],[4,1282],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,1378,1379,1378,1379,[1359,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,[15,332],[16,978,333],[15,979],[16,980],15,16,15,[16,701],15,[16,722],[15,725],[16,703],15,16,[15,908],[16,908],[15,909,781],[16,910,782],[15,911,783],[16,912,784],891,892,891,892,891,892,[35,909],[36,910],891,892,871,891,[35,852],[36,931],[35,932],[36,933],[35,849,934],[891,972],[892,973],871,[35,891,1051],[891,1052],[892,1053],[871,1055],[872,1054],[872,1832],[872,1056],[16,891,1055],[15,892,1058],[16,813,1059],[15,1060],[16,1019],[15,1020],16,16,15,16,15,16,[15,908],[16,913],36,35,36,35,36,35,36,35,36,35,36,35,36,35,[36,854],[35,808,855],[36,870,856],[35,872],[36,913,1011],[35,1012],36,35,36,36,35,36,35,36,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1289],[1378,1290],1379,1379,1378,1379,[1378,1223],[1379,1224],[1378,1224],[1379,1227],[1378,1228],1379,1358,[1359,1341],[572,1342],[572,1364],[573,1251],[1378,1368],[1379,1350],1378,1379,1356,[1181,1338],1181,[1181,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1359,1358,1359,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,[15,352],[16,998,353],[15,999],[16,1000],15,16,15,[16,721],15,[16,742],[15,745],[16,723],[15,725],[16,685],15,16,[15,801],[16,802],[15,803],[16,804],[15,908],[16,909],[15,910],[16,911],[15,912],[16,913],15,16,[15,849],[16,891],[15,891],[16,913],15,[16,951],[15,952],[16,953],[15,954],[16,888,973,312],[871,313],891,[15,892],[891,1072],[871,1073],[872,1014],[871,1074],[872,1852],[892,1076],[36,871,1075],[35,872,1078],[36,833,1079],[35,1038],[36,1039],[35,1040],36,35,36,35,36,35,[36,932],[35,714,933],[16,715,934,1561],[15,937,1562],[16,938,1563],[15,939],[16,940],15,16,15,16,15,16,15,16,15,[16,874],[15,828,875],[16,872,876],[15,833],[16,1011],[15,1012,1561],[16,1562],[15,1563],16,16,15,16,15,16,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1289],[1358,1290],1359,1358,1359,[1358,1261],[4,1243],[4,1244],[4,1244],[4,1247],[4,1248],[1359,1249],[1378,1250],[1379,1382],[1358,1362],[1359,1384],[1358,1271],[1359,1388],1359,1358,1359,[1181,1380],[1181,1222],[1181,1223],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,1378,1379,1378,1379,[1359,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,35,36,[35,372],[36,1018,373],[35,1019],[36,1020],35,36,35,[36,741],35,[36,762],[35,765],[36,743],[35,745],[36,705],35,36,[35,821],[36,822],[35,823],[36,714,824],[35,715],36,35,[36,312],[35,313],36,35,36,35,36,35,36,35,[36,971],[35,972],[36,1873,973],[35,829,1874,974],[892,1875],891,[36,892],[35,892],[892,1092],[891,1093],[871,1095],[891,1094],[892,1872],[891,1096],[16,891,1095],[15,892,1098],[16,853],[15,1019],[16,1059],[15,1060],16,15,16,15,[16,312],[15,313],[16,971],[15,734,972],[36,735,954,1581],[35,957,1582],[36,958,1583],[35,959,1584],[36,960],35,36,35,36,35,36,35,36,35,[36,894],[35,848,895],[36,872,896],[35,853,971],[36,972],[35,973,1581],[36,1582],[35,1583],[36,1584],16,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1289],[1378,1290],[1379,1163],[1378,1164],[1379,1165],[1378,1281],[4,1282],4,4,[4,1267],[4,1268],[4,1269],[1358,1228],1359,1358,1359,1358,1359,1358,1359,1356,[1181,1400],[1181,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1359,1358,1359,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,[16,1038],[15,1039],[16,1040],15,16,15,[16,761],15,16,15,[16,763],[15,765],16,15,16,[15,841],[16,842],[15,843],[16,734,844],[15,735],16,15,16,15,16,15,16,15,16,15,16,[15,714],[16,715,991],[15,992],[16,1893,993],[15,888,1894,994],[871,1895],[872,332],[16,892,333],[15,851],[16,849],891,891,891,892,872,871,872,[16,873,1038],[15,1058],[16,1040],15,16,15,16,15,16,[36,931],[35,991],[36,992],[16,974,1601],[15,977,1602],[16,978,1603],[15,979,1604],[16,980,1605],15,16,15,16,15,16,15,16,15,16,[15,868],[16,871],[15,873,991],[16,992],[15,1601],[16,1602],[15,1603],[16,1604],[36,1605],16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,[4,1268],[4,1269],[1359,1183],[1358,1184],[1359,1185],[4,1243],[4,1263],4,4,4,4,[4,1268],[1378,1248],[1379,1224],[1378,1224],[1379,1224],[1378,1224],[1379,1224],[1378,1224],[1379,1224],[1378,1224],[1181,1224],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1359,1290],1379,1378,1379,1378,1379,[1359,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,[36,1019,312],[35,1059,313],[36,1060],35,36,35,36,35,36,35,36,35,36,35,36,[35,861],[36,862],[35,863],[36,864],35,36,35,36,35,36,35,36,35,36,35,36,[35,734],[36,735,1011],[35,1012],[36,829],[35,871],872,[892,352],[36,871,353],[35,832],[36,830],871,872,[871,1038,312],[872,1054,313],[872,1351],[891,1352],[871,1353],[36,893,1058],[35,1078],[36,1098],35,36,35,36,35,36,[16,951],[15,1011],[16,1012],[15,1621],[16,997,1622],[15,998,1623],[16,999,1624],[15,1000],16,15,16,15,16,15,16,15,16,15,[16,888],[15,872],[16,893,1011],[15,1012],[16,1621],[15,1622],[16,1623],[15,1624],16,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,[4,1268],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1244],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1379,1290],1359,[1359,1163],[1359,1164],[1359,1165],1359,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,[16,1019],[15,1020],16,15,16,15,16,15,16,15,16,15,16,15,16,[15,881],[16,882],[15,883],[16,884],15,16,15,16,15,16,15,[16,714],[15,715],16,15,16,15,[16,1031],[15,1032],[871,1033],[891,1034],[892,1035],[891,372],[871,373],891,892,891,[871,1038],[872,1058],[892,1074],[892,1371],[892,1372],[891,1373],[16,892,1078],[15,832,1098],16,15,16,15,16,15,[16,933],[36,934],[35,972],[36,973],[35,1641],[36,1642],[35,1018,1643],[36,714,1019],[35,715,1020],36,35,36,35,36,35,36,35,36,[35,808],[36,872],[35,892],[36,851,1011],[35,1012],[36,1641],[35,1642],[36,1643],35,36,16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[1379,1227],[1379,1183],[1379,1184],[1379,1185],[1379,1227],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,[36,1019],[35,714,1020],[36,715],35,36,35,36,35,[36,241],35,36,35,36,35,36,[35,901],[36,902],[35,903],[36,904],35,36,35,36,35,36,35,[36,734],[35,735],36,35,36,35,[36,1051],[35,1052],[871,1053],[871,1054],[871,1055],[872,1033],[891,1034],[891,1035],871,[872,1038],[891,1058],[892,1078],[891,1094],[892,1391],[872,1392],[871,1393],[36,872,1098],[35,872],[36,813],35,36,35,[36,951],[35,952],[36,953],[16,954],[15,973],16,15,16,15,[16,734,999],[15,735,1000],16,15,16,15,16,15,16,[15,714],[16,715],[15,888],[16,872],[15,851],[16,1031],[15,1032],[16,1033],[15,1034],[16,1035],15,16,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1203],[4,1204],[4,1205],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,[16,1019],[15,734,1020],[16,735],15,16,15,16,15,[16,261],15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,[16,829],[15,812],[16,813],15,16,15,16,15,[16,1071],[15,1072],[16,849,1073],[15,891,1074],[16,891,1075],[892,1032],[872,1054],[871,1055],[872,1057],[871,1058],[872,1078],[871,1098,704],872,892,871,871,[16,872,703],[15,892],[16,892],[15,831],16,15,[16,971],[15,972],[16,973,332],[36,333],35,36,35,36,35,[36,1019],[35,1020],36,35,36,35,[36,956],35,36,[35,734],[36,735],35,36,35,[36,1051],[35,1052],[36,1053],[35,1054],[36,1055],[35,1033],36,16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,36,35,[36,1019],[35,1020],36,35,36,35,36,[35,956],36,35,36,35,36,35,36,35,36,35,36,35,36,35,[36,808],[35,809],[36,872],[35,871],[36,872],[35,813],36,35,36,35,36,35,[36,1093],[35,908,1094],[36,891,1095],[871,1052],[872,1014],[891,1076],[892,1077],[871,1078],[872,1098],[891,724],[892,725],[892,685],872,891,[892,723],[871,725],[872,685],[35,871],[36,813],[35,952],[36,953],[35,714,973],[36,715,352],[16,353],15,16,15,16,[15,1038],[16,1039],[15,1040],16,15,16,15,[16,976],[15,1033],[16,1034],[15,1035],16,15,16,15,16,[15,1072],[16,1073],[15,1074],[16,1075],[15,1032],[16,1033],15,16,15,16,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,15,[16,1019],[15,1020],16,15,16,15,16,[15,976],[16,1033],15,16,15,16,15,16,15,16,15,16,15,16,[15,829],[16,871],[15,872],[16,891],[15,891],[16,892],[15,833],16,15,16,15,16,15,16,15,[16,908],[871,1072],[872,1094],[871,1096],[872,1097],[872,1098],871,[891,744],[892,745],[891,705],892,892,[892,743],[872,745],[892,705],[15,871],[16,893,971],[15,972],[16,973],[15,734,974],[16,735,372],[36,373],35,[36,1038],[35,1056],[36,1057],[35,1058],[36,1059],[35,1060],36,35,36,35,[36,996],[35,1032],[36,1056],[35,1352],[36,1353],[35,1056],[36,1351],[35,1352],[36,1353],[35,1033],[36,1093],[35,1094],[36,1095],[35,1052],[36,1053],[35,1054],[36,1055],[35,1033],36,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,36,35,[36,978],[35,979],[36,980],35,36,35,36,[35,714,996],[36,715,1032],[35,1033],[36,1034],35,[36,1038],[35,1112],[36,1113],[35,1110],[36,1111],[35,808,1114],[36,809,1115],[35,810,1112],[36,812,1113],[35,871,1033],[36,872],[35,872],[36,871],[35,891],[36,892],[35,853],36,35,36,35,36,35,36,35,36,891,871,891,892,872,871,[872,764],[872,765],871,872,891,[892,763],[892,765],871,[35,871],[36,893,991],[35,992],[36,993],[35,994],36,16,[15,1038],[16,1058],[15,1076],[16,1077],[15,1078],[16,1079],[15,1080],16,15,16,15,[16,1016],[15,1052],[16,1374],[15,1372],[16,1373],[15,1076],[16,1371],[15,1372],[16,1373],[15,1053],[16,1054],[15,1055],[16,1033],[15,1072],[16,1073],[15,1074],[16,1075],[15,1053],[16,1054],[15,1055],[15,1056],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,[16,757],[15,758],[16,759],[15,978],[16,979],[15,980],16,15,16,[15,734,1016],[16,735,1052],[15,1053],[16,1054],[15,1057],[16,1058],1132,1133,[552,1130],[553,1131],[828,1134],[871,1135],[872,1132],[16,872,1133],[15,891,1053],[16,892,1033],[15,892],[16,891],[15,892],[16,891],[15,873],16,15,[16,312],[15,313],16,15,16,15,16,[15,849],871,871,872,892,891,892,871,891,892,871,871,[871,312],871,[15,872],[16,851,1031],[15,1053],[16,1056],[15,1057],[16,1112],[36,1113],[35,1058],[36,1078],[35,1096],[36,1097],[35,1098],36,35,36,35,36,35,36,[35,1072],[36,1391],[35,1392],[36,1393],[35,1096],[36,1391],[35,1392],[36,1393],[35,1073],[36,1074],[35,1075],[36,1032],[35,1033],[36,1093],[36,1094],[35,1095],[36,1073],[35,1074],[36,1075],[35,1076],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,[36,777],[35,778],[36,779],[35,998],[36,999],[35,1000],36,35,36,35,[36,1072],[35,1073],[552,1074],[553,1077],[552,1078],[553,1152],[552,1153],[35,572,1150],[36,573,1151],[35,828,1154],[36,891,1155],[35,892,1152],[36,892,1153],[35,891,1073],[36,892,1053],[35,871,1033],[36,872],[35,872],[36,872],[35,833],36,[35,714],[36,715],35,36,35,36,35,36,35,[36,908],891,871,872,871,871,872,871,872,871,871,871,891,[35,893],[36,1093],[35,714,1073],[36,715,1076],[35,1077],[36,1132],[16,1133],[15,1078],[16,1098],15,16,15,16,[15,714],[16,715],15,16,15,16,15,16,15,16,15,16,15,16,[15,1093],[16,1094],[15,1095],[16,715,1052],[15,1012],16,16,15,[16,1093],[15,1094],[16,1095],[15,1096],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,[16,797],[15,798],[16,799],15,[16,1019],[15,1020],16,15,16,15,[16,1092],[15,1093],[572,1094],[573,1097],[572,1098],573,572,[15,573],[16,533],[15,848],[16,871],[15,872],[16,871],[15,872,1093],[16,871,1073],[15,891,1053],[16,892,1033],[15,871],[16,872],[15,853],16,[15,734],[16,735,332],[15,333],16,15,16,15,16,15,16,[15,850],891,892,891,871,872,891,[892,241],891,871,872,871,[15,893],16,[15,734,1093],[16,735,1096],[15,1097],[16,1152],[36,1153],[35,1098],36,35,36,35,36,[35,734],[36,735],35,36,[35,332],[36,333],35,36,35,36,35,36,35,36,35,36,[35,98],[36,735,99,1011],[35,1012],36,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,[36,817],[35,818],[36,819],35,[36,978],[35,958],[36,959],35,36,35,36,35,[36,589],[35,590],[36,591,1118],[35,592],[36,593],[35,594],36,[35,868],[36,891],[35,892],[36,891],[35,892],[36,891,1093],[35,892,1073],[36,871,1053],[35,891,1033],[36,892],[35,873],36,[35,98],[36,99,352],[35,353],36,35,36,[35,1018],[36,955],35,36,35,[36,888],872,[871,312],[872,313],871,872,[871,261],872,871,872,871,872,[36,832],35,36,35,36,16,15,16,15,16,15,16,15,16,15,16,[15,352],[16,353],15,16,15,16,15,[16,714],[15,715],16,15,16,15,[16,1011],[15,1012],16,16,15,16,15,16,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,15,16,15,16,[15,978],[16,979],[15,959],16,15,16,[15,13],[16,14],15,16,15,16,[15,714],[16,715],[15,888],[16,889],[15,891],[16,892],[15,891],[16,892],[15,891,1093],[16,871,1073],[15,871,1053],[16,891,1033],[15,892],16,15,[16,372],[15,373],16,15,16,[15,1038],[16,975],15,16,[15,829],[16,891],892,891,892,891,892,891,892,891,892,891,[892,98],[16,872,99],[15,832],16,15,16,36,35,36,35,36,35,36,35,36,35,36,[35,372],[36,373],35,36,35,36,35,[36,734],[35,735],36,35,36,35,[36,991],[35,992],36,36,35,36,35,36,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,36,35,36,35,36,35,[36,978],[35,979],[36,980],35,36,[35,33,617],[36,34,618],[35,619],[36,620],35,36,[35,734],[36,735],[35,908],[36,909],[35,911],[36,912],[35,909],[36,910],[35,911],[36,891,1093],[35,891,1073],[36,891,1053],[35,892,1033],[36,1034],[35,1035],[36,1036],[35,1037],[36,1038],[35,1110],[36,1111],[35,1058],[36,995],[35,808],[36,809],871,871,872,871,872,871,872,871,872,871,872,871,872,892,872,[36,809],[35,810],[36,811],[16,872],[15,873],16,15,16,15,16,15,16,15,16,15,16,[15,808],[16,812],[15,813],16,15,16,15,16,15,16,[15,971],[16,972],[15,973],16,16,15,[16,505],[15,484],[16,485],[15,486],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,15,16,15,16,15,16,[15,999],[16,491,1000],[15,492],[16,493],[15,513,637],[16,638],[15,639],[16,640],15,16,15,16,[15,929],[16,930],[15,931],[16,932],[15,929],[16,930],[15,931],[16,908],[15,909,1093],[16,910,1073],[15,911,1053],[16,912,1112],[15,1113],[16,1114],[15,1115],[16,1058],[15,1130],[16,1131],[15,1078],[16,1015],[15,828],891,871,891,892,891,892,891,892,891,892,891,892,891,892,872,871,871,871,[16,872],[36,892],[35,893],36,35,36,[35,714],[36,715],35,36,35,[36,808],[35,809],[36,809],[35,871],[36,872],[35,833],36,35,36,35,36,35,36,[35,991],[36,992],35,36,[35,505],[36,487],[35,546],547,546,547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1346],[4,1347],[4,1346],[4,1347],[4,1346],[4,1347],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,36,35,36,35,36,[35,1019],[573,1020],552,553,[35,553,483,657],[36,513,484,658],[35,488,659],[36,660],35,36,35,36,35,36,35,36,35,[36,714],[35,715],36,[35,929],[36,930,1093],[35,931,1073],[932,1132],1133,[13,1134],[14,1135],[36,1078],[35,1150],[36,1151],[35,1098],[36,1099],[35,888],892,[891,757],[871,758],[872,759],871,872,871,872,871,[872,119],871,872,871,891,892,871,872,891,[36,892],[16,912],[15,913],16,15,16,[15,734],[16,735],15,16,[15,830],[16,871],[15,872],[16,871,781],[15,872,782],[16,871,783],[15,872,784],[16,832],15,16,15,16,15,16,[15,1011],[16,1012],15,[16,504],546,547,566,567,[15,566],567,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1345],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1304],[4,1366],[4,1367],[4,1366],[4,1367],[4,1366],[4,1367],[4,1366],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,16,15,16,15,16,[15,1019],[552,1020],572,573,[573,503,677],[553,566,678],[15,547,679],[16,488,680],15,[16,1857],[15,505,1858],[16,487,1859],[15,11,506,1860],[16,12],15,[16,483],[15,506],[16,734],[15,735],16,15,16,[15,1093],[16,1152],[15,1153],[16,33,1154],[15,34,1155],[16,1098],15,16,[15,1118],16,[15,908],[16,892],[892,777],[891,778],[871,779],872,871,872,871,872,871,872,892,872,871,891,891,892,872,[36,873],35,36,35,36,35,36,35,[36,808],[35,809],[36,871],[35,872],[36,892],[35,891,801],[36,892,802],[35,891,803],[36,892,804],[36,871],[35,809],[36,810],[35,811],[36,812],[35,813],36,[35,991],[36,483,992],[35,484],546,566,567,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1364],[4,1365],[4,1366],[4,1367],[4,1364],[4,1365],[4,1366],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,[4,1289],[553,1349],[552,1385],[553,1386],[552,1387],[553,1386],[553,1387],[552,1386],[553,1387],[552,1386],[553,1387],[4,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,36,35,36,[35,1038],[36,1057],[35,1058],[36,572,1040],573,552,[553,523,697],[573,566,698],[35,553,567,699],[36,567,700],[35,485],[36,486,1877],[35,566,1878],[36,567,1879],[35,31,567,1880],[36,32,485],[35,484],[36,547],[35,508],36,35,36,35,[36,483],[35,484],[36,488],35,36,35,36,35,36,35,36,35,[36,908],[892,797],[892,798],[891,799],892,891,892,891,892,891,892,871,871,891,891,871,872,892,[16,893],15,16,15,16,15,16,15,[16,849],[15,871],[16,891],[15,892],[16,892],[15,891,821],[16,892,822],[15,871,823],[16,891,824],[16,892],[15,871],[16,871],[15,871],[16,871],[15,872],[16,813],[15,991],[16,503,992],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1348],[4,1368],[572,1384],[573,1385],[572,1386],[573,1387],[572,406,1384],[573,1385],[572,1386],[573,1387],[572,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,[4,1309],[573,1310],572,573,572,573,573,572,573,572,573,[573,1362],[572,1363],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,16,15,[16,1038],[15,1039],[16,573,1077,1014],[15,573,1078],[16,550,1060],[15,551],[16,550],[15,551,543,717],[16,572,546,718],[15,573,546,719],[16,547,720],546,[547,1897],[547,1898],[546,1899],[547,1900],566,567,567,[15,548],16,[15,483],[16,484],[15,487],547,566,[567,601],[15,506,602],[16,603],[15,604],16,15,16,15,16,15,16,[15,850,817],[891,818],[892,819],872,871,872,[871,119],872,871,872,891,891,891,892,891,892,[35,912],[36,913],35,36,35,36,35,36,35,36,[35,908],[36,891],[35,871],[36,872],[35,871,841],[36,871,842],[35,872,843],[36,871,844],[36,872],[35,871],[36,871],[35,871],[36,891],[35,892],[36,913,1071],[35,714,1011],[36,715,523,1012],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[553,1304],[552,1368],[553,1388],552,553,552,[553,670],[552,406],[553,688],[552,747],553,[552,746,1362],[553,649,1363],[4,1322],[4,1323],4,4,4,4,4,4,4,4,[4,1309],[553,1310],[552,1163],[553,1164],[552,1165],553,553,552,553,552,553,553,[552,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,36,35,[36,1019],[35,552,1059],[36,553,1097],[35,550,1098],[36,570],[35,571],[36,570],[35,571,563],[36,546],[35,544],[36,545,101],[546,102],[547,1917],[567,1918],[566,1919],[546,1920],566,[567,61],[566,62],[35,567],[36,484],547,567,[547,119],567,546,[547,621],[35,546,622],[36,485,623],[35,486,624],[36,487],[35,506],36,35,36,35,36,35,[36,908],891,892,891,892,891,892,891,892,872,871,891,[16,892],[15,912],[16,913],15,16,15,16,15,16,[15,483],[16,484],[15,488],16,15,[16,850],[15,891],[16,892],[15,891,861],[16,871,862],[15,872,863],[16,891,864],[16,892],[15,891],[16,871],[15,872],[16,871],[15,893],16,[15,734,1011],[16,735,543,1012],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1309],[572,1368],[573,1386],[572,1388],573,572,573,572,573,[572,630],[573,406],[572,688],[573,689],[572,690,1382],[573,406,1383],[572,628,1342],[4,1302],4,4,4,4,4,4,4,4,[4,1268],[4,1248],[572,1183],[573,1184],[572,1185],[573,1227],[573,1228],572,573,572,573,573,[572,1321],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,15,16,15,16,15,[16,1019],[15,552,1020],[16,553],[15,570],[16,571],[15,552],[16,552],[15,553,563],[16,566],[15,564],[16,565,121],[566,122],567,546,547,546,547,[547,81],[546,82],[546,717],547,[567,617],[566,720,618],[567,61,619],[547,62,620],566,[546,641],[566,642],[567,643],[566,644],567,[15,526],16,15,16,15,16,[15,483],[16,488],[15,849],892,871,872,871,872,871,872,871,872,872,[36,851],[35,11],[36,12],35,36,35,[36,483],[35,484],[36,487],547,566,567,[36,506,98],[35,99],36,[35,888],[36,872],[35,871,881],[36,872,882],[35,871,883],[36,872,884],[36,871],[35,872],[36,871],[35,872],[36,871],[35,872],[36,832],[35,991],[36,503,992],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1288],[4,1289],[552,1290],553,552,553,552,553,552,553,552,[553,629],[552,629],[553,629],[552,630],[553,406],[552,668,1281],[4,1282],4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1247],[4,1269],[552,1270],553,552,553,553,[552,1341],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,35,36,35,36,[35,1038],[36,1039],[35,572,1040],[36,573],[35,552],552,552,[572,483],[573,546],547,[566,61],[567,62],546,547,[546,101],[547,102],546,547,567,547,546,547,[546,637],[547,638],[546,81,639],[547,82,640],567,[566,661],[567,662],[567,663],[566,664],546,[35,488],36,35,36,35,[36,504],[35,566],[36,568],35,[36,891],891,892,891,892,871,872,[35,912,118],[16,912],[15,913],16,[15,31,956],[16,32],[15,483],[16,484],[15,484],547,567,547,567,546,547,546,[15,485],[16,829,486],[15,891,487],[16,892,506],[15,891,901],[16,892,902],[15,891,903],[16,892,904],[16,891],[15,851],[16,850],[15,892],[16,891],[15,892],[16,872],[15,832,1011],[16,523,1012],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1308],[4,1309],[572,1310],573,572,573,572,573,572,573,572,573,572,573,[572,650],[573,406],[572,688,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1270],572,460,573,572,[573,1362],[4,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,0,0,15,16,15,16,[15,1019],[16,553,1059],[15,553,1060],553,553,552,553,[553,503],[552,566],[553,567],[547,81],[546,82],546,547,[870,546,121],[871,547,122],566,[567,140],566,[567,61],[566,62],[567,120],[566,657],[567,658],[566,659],[567,660],567,[547,681],[546,682],[547,683],[15,546,684],[16,547,61],[15,587,62],[16,484],[15,485],[16,486],[15,487],[16,546],[15,55,547],[16,56,588,118],15,[16,849],892,892,871,872,[15,912],[16,913,617],[15,618],[36,619],[35,620],36,[35,976],[36,504,1033],566,567,547,567,566,567,547,566,546,[808,566],[809,567],[871,566],[871,567],[36,872,526],[35,871],[36,872],[35,871],[36,872],[36,871],[35,872,483],[36,488],[35,888],[36,871],[35,872,951],[36,892,952],[35,872,953],[36,809,543,973],[810,567],546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,552,553,479,553,552,553,552,553,552,553,552,[553,629],[552,629,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,552,553,552,553,[552,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,35,36,35,36,[35,999],[36,573,1000],[35,550],551,551,552,553,[573,523],[572,546],[573,547],567,566,566,567,[35,890,566],[36,891,584],546,566,567,[566,81],[567,82],566,[567,677],[547,678],[566,679],[567,680],566,567,566,567,566,[36,526,81],[35,82],[36,524],[35,584],[36,585],[35,586],[36,587],[35,75,588],[36,76],35,36,[35,888],872,891,[36,913],35,[36,637],[35,638],[16,639],[15,640],16,[15,483,996],[547,1032],[546,1033],547,547,546,[547,381],[546,382],[547,383],[567,384,617],[566,618],[828,567,619],[891,567,620],[871,546],[891,547],[16,892,487],[15,891,488],[16,892],[15,891],[16,892],[16,891,504],[15,892,566],[16,568],[15,888],[16,891,951],[15,892,952],[16,872,953],[15,871,973],[16,871,563],[872,547],566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1309],[572,1310],573,572,573,572,573,572,573,572,573,572,573,572,573,[572,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],573,572,573,572,573,572,[573,1362],[4,1342],[4,1282],4,4,4,4,4,4,4,4,0,0,15,16,15,16,[15,1019],[16,552,1020],[15,570,504],[571,488],571,552,553,[572,543],[573,566],567,546,[547,61],[566,62],[16,11,546],[15,12,912,527],[16,912],[15,912,524],[16,584],[15,546],547,567,566,[567,697],[567,698],[567,699],[546,700],547,[546,61],[547,62],566,567,[16,488],15,16,15,[16,714],[15,715],16,15,16,[15,98],[16,808,99],[13,871],[16,14,872,140],15,16,15,[16,657],[15,658],[36,659],[35,505,660],[36,484],[35,566,1016],[567,1052],[566,1032],[36,567,1033],567,566,[567,401],[566,402],[567,403],[567,404,637],[547,638],[888,546,639],[892,547,640],[891,546],[871,547],[872,547],[35,871,587],[36,872,485],[35,871,486],[36,872,487],[36,871,546],[35,872,547],[36,871,588],[35,872],[36,871,971],[35,891,972],[36,892,973],[35,872],[36,910,503],[911,567],546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1227],[552,1228],553,552,553,552,460,572,[573,1222],[552,1223],[553,1227],[552,1227],[553,1227],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[553,1227],[552,1228],553,552,553,572,[573,1222],[4,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,35,36,35,[36,483,1038],[35,484,1039],[36,553,487,1040],[35,573,566],546,[572,488,381],[552,382],[552,383],[552,563,384],[552,567],[553,547,61],[566,62],[567,81],[546,82],[36,31,568],[35,32,138],[36,714],[35,715],36,[35,524],546,[546,61],[547,62],[546,717],[547,718],[546,719],[566,720],567,[566,81],[546,82],547,567,567,[35,485],[36,486],[35,487],[36,734,488],[35,735],36,35,36,35,[36,828],[33,872],[36,34,833],35,36,35,[36,677],[35,505,678],[16,484,679],[15,566,680],[16,567,141],[15,547,142,1071],[546,143,1072],[546,1052],[547,1012],566,567,[547,421],[566,422],[567,423],[566,424,657],[567,658],[908,566,659],[892,567,660],[892,566],[891,567],[16,871,526],[15,872,955],[16,871,583],[15,872,585],[16,871,586],[16,872,587],[15,871,588],[16,872],[15,892],[16,872,991],[15,871,992],[16,891,993],[15,893],[16,523],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1248],[573,1227],[572,1227],[573,1228],[572,1163],[573,1164],[552,1165],[553,1242],[4,1243],[4,1247],[4,1247],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1248],[573,1228],[572,1163],[573,1164],[552,1165],[553,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,0,0,15,16,15,[16,503,1019],[553,546,1059],[573,547,1060],[573,566],[552,566],[552,547,401],[572,485,402],[572,487,403],[572,546,404],[572,566],[573,567,81],[547,82],566,566,566,[15,506],[16,734],[15,735],[16,13],[15,14],[16,583],[15,566,81],[16,546,82],547,546,[547,140],567,567,546,566,567,566,567,[15,566],[16,587],[15,567],[16,568],15,16,[15,504],[16,487],[15,488],[16,848],872,[16,853],15,16,15,[16,504,697],[566,698],[567,699],[15,547,700],[16,566,161],[15,567,162],[15,566,163],[15,566,1011],[16,587,1012],[566,993],567,[567,441],[567,442],[546,443],[547,444,677],[546,678],[547,679],[908,566,680],[892,567],[36,892,527],[35,891,1038],[36,892,975],[35,891],[36,892],[35,891],[36,892],[35,891],[36,892],[35,871],[36,871,1011],[35,891,1012],[36,891,1013],[35,892],[36,813,543],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1267],[4,1268],[4,1247],[4,1247],[4,1269],[552,1183],[553,1184],[572,1185],[4,1262],[4,1263],4,[4,1267],[4,1267],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1183],[553,1184],[572,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,0,0,35,36,[35,998],[36,523,999],[573,566,1000],567,[546,617],[572,546,618],[572,547,421,619],[573,567,422,620],[567,423],[566,424],567,546,546,547,546,566,[35,567],[36,484],[35,488],[36,33],[35,34],[36,483],546,546,547,566,567,546,[547,617],[566,618],[567,119,619],[546,620],546,547,[35,11,526],[36,12],[35,583],[36,546],[35,485],[36,487],[35,586],[36,587],[35,588,677],[36,868],871,[36,873],35,36,35,[36,563,717],[567,718],[566,719],[546,720],[547,181],[35,546,182],[35,547,183],[35,546,1011],[36,1012],[35,525,1013],546,[547,461],[546,462],[566,463],[567,464,697],[566,698],[546,699],[547,700],[15,850,527],[16,891,1038],[15,892,1058],[16,872,486,995],[871,487],[16,872,488],[15,871],[16,872],[15,871],[16,872],[15,891],[16,891,1031],[15,891,1032],[16,892,1033],[15,892,1034],[16,893,563],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,15,[16,710],[15,711,1018],[16,543,1019],[552,547,1020],[553,546],[566,637],[566,638],[567,441,639],[567,442,640],[546,443],[546,444],547,566,566,567,566,546,[546,119],547,[15,546],[16,484],[15,487],[16,546],546,566,567,547,[546,717],566,[567,637],[566,720,638],[567,639],[546,640],547,[16,567],[15,31,506],[16,32],[15,504],[16,566],[15,11,567],[16,12,526],15,16,15,[16,888],872,[16,893],[15,119],16,[15,505],547,547,547,[15,566],[567,201],[15,566,202],[15,567,203],[15,566,1031],[16,1032],[15,1033],[16,583],[15,584],[16,587],[15,584],[16,585,717],[15,586,718],[16,587,719],[15,588,720],[16,1038],[15,908,1058],[16,891,566,1078],[15,892,587,1015],[891,567],[15,892,568],[16,891],[15,892],[16,891,504],[15,892,487],[16,872,488],[15,871,1051],[16,891,1052],[15,892,1053],[16,912,1033],[15,913,503],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,[36,730],[35,731,998],[36,563,999],[572,546,1000],[573,547],[546,657],[546,658],[546,461,659],[547,462,660],[566,463],[566,464],567,567,[546,717],546,547,[566,720],566,[567,61],[566,62],567,547,566,566,[566,61],[546,62],[547,381],[547,382],[567,383],[546,384,657],[547,658],[567,659],[566,660],567,566,[35,567],[36,484],[35,587],[36,587],[35,31,526],[36,32],35,36,[35,808,717],872,[35,892],[36,851,720],35,[36,505],566,567,567,[36,546],547,[36,546],[35,544,241],[35,545],[35,547,1051],[36,547,1052],[35,1053],[36,1110],[35,1111],[36,1110],[35,1351],[36,1352],[35,1353],[36,1110],[35,1111],[36,1058],[35,547,1078],[36,849,526,1098],[35,892],[36,871,583],[35,872,546],[36,871,485],[35,872,487],[36,871,586],[35,872,587],[36,871,588],[35,872,1071],[36,872,1072],[35,851,1073],[36,1032],[35,523,1033],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,[15,483,1018],[16,573,547,1019],[566,1020],567,[547,677],[566,678],[566,679],[546,680],547,[547,617],[546,618],[547,619],[566,620],566,546,547,566,[567,81],[547,82],566,567,546,566,[567,140,81],[566,82],[546,401],[547,402],[567,120,403],[546,404,677],[547,678],[547,679],[546,680],547,566,[15,567],[16,526],15,16,15,16,15,16,[15,888],872,[15,851],16,[15,504],566,567,547,566,566,567,566,[15,564,261],[35,565],567,[567,1072],[566,1073],[567,1130],[547,1131],[16,546,1130],[15,566,1371],[16,567,1372],[15,566,1373],[16,567,1130],[546,1131],[547,1078],[567,1098],[16,506],[15,891],[16,891,504],[892,566],[891,567],[15,892,526],[16,871],[15,872],[16,912],[15,912,1091],[16,913,1092],[15,1093],[16,1052],[543,1012],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,486],[36,487],[573,566,998],[567,999],[566,1000],546,[547,697],[546,698],[547,699],[566,700],567,[567,140,637],[566,638],[567,639],[547,640],[546,120],[566,61],[567,62],566,567,[35,871,567],[36,872,586],[35,872,584],[36,872,566],566,567,546,[566,421],[546,422],[547,423],[35,566,424,697],[36,567,698],[35,567,699],[36,566,700],[35,567,118],[36,587],[35,567],[36,488],35,36,[35,505],[36,487,140],[35,488],[36,808],[35,872],[36,913,120],35,[36,483],546,547,566,546,566,567,546,546,547,[15,547],566,[567,1092],[566,1093],[546,1150],[547,1151],[36,547,1150],[35,1391],[36,1392],[35,1393],[36,567,1150],[566,1151],[567,1098],566,[36,567],[35,849,484],[36,892,587],[35,892,587],[36,871,526],[35,872],[36,912],[35,913],36,35,36,35,[36,1011],[563,992],547,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,547,547,[566,1018],[567,1019],[567,1020],546,[547,717],[35,544,718],[35,545,719],[546,720],547,[567,657],[547,658],[567,659],[567,660],566,[567,81],[11,566,82],[15,12,871,567],[16,872,587],[15,11,871,526],[16,12,871],[15,872],[16,892,524],[872,566],546,546,[547,441],[566,442],[567,443],[15,546,444,717],[16,584,718],[15,585,719],[16,586,720],[15,588],16,[15,524],[16,508],15,16,[15,583],[16,584],[871,526],872,[15,893],16,[15,504],566,566,546,[547,617],[566,618],[546,619],[547,620],546,566,567,567,566,567,567,566,546,[16,547],[15,507],16,[15,504],547,546,547,566,567,[15,526],[16,888],[15,872],[16,891],[15,913],16,15,16,15,16,15,[16,1011],[566,1012],567,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,547,566,[567,978],[547,979],[547,980],567,[35,564],[35,565],566,567,[546,677],[547,678],[546,679],[546,680],547,566,[31,567],[35,32,891,588],[36,892],[35,31,872],[36,32,872],[35,872,138],[36,892],[35,892,583],[36,566],566,[567,461],[546,462],[714,547,463],[35,715,527,464],[36,13],[35,14],36,35,36,[35,504],[36,528],35,36,[35,829],871,872,872,[35,913],[36,505],547,546,547,566,[567,637],[546,638],[566,639],[567,640],566,546,546,546,566,567,567,546,566,[36,546],[35,547],[36,484],[35,567],567,566,567,[35,587],[36,567],[35,808,488],[36,871],[35,872],[36,505],[35,487],[36,488],35,36,35,36,35,[36,546,1031],[546,1032],[547,1033],566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,567,566,567,[567,1019],[546,1000],547,566,[567,138],566,567,[566,697],[567,698],[566,699],[566,700],567,[15,567],[16,871,527],[15,872],[16,872],[15,909],[16,714,910],[15,715,911],[16,912],[15,892],[16,872,525],[15,566],[16,546],566,[734,567],[15,735,507],[16,33],[15,34,140],16,15,[16,504],[15,567],[16,548],[15,714,138],[16,715,808],872,872,[15,872],[16,913],15,[36,583,617],[35,584],[36,566],[35,567,620],547,[546,657],[547,658],[546,659],[547,660],566,566,566,546,566,567,546,546,547,566,567,546,[15,584],[16,585],[15,586],[16,588,617],[15,618],[16,524,619],[15,828,508,620],[16,872],[15,833],[16,583],[15,584],[16,526],15,16,15,16,15,[16,1051],[15,566,1052],[567,1012],546,[547,974],546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,547,546,547,[546,999],[566,1000],567,567,567,547,566,[546,717],[566,718],[546,719],[871,566,720],[36,872,567],[35,872,526],[36,872],[35,892,140],[36,913],35,[36,734],[35,735],36,[35,908],[36,892],[35,55,872,524],[36,56,546],567,546,[35,546],[36,484],[35,485],[36,486],[35,487],[36,546],[35,547],[36,568],[35,734],[735,871],872,[36,55,851],[35,56],36,[35,483],[16,507],15,[16,525],[15,566,140],567,[566,677],[567,678],[566,679],[567,680],[13,546],[36,14,526],[35,524],[35,566],566,567,546,547,546,547,546,547,[35,506],36,35,[36,637],[35,638],[36,483,639],[35,848,484,640],[36,872,488],[35,853],36,35,36,35,36,35,36,35,[36,1071],[35,1011],[545,1012],566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,567,566,567,[566,1019],[567,1020],566,567,566,[567,956],566,[566,993],567,566,[891,567],[16,912,547],[15,912,507],[16,912],[15,913],16,[15,712],16,15,16,15,[16,908],[15,75,892],[16,76,871,525],[872,547],547,[15,547],[16,567],[15,584],[16,585],[15,586,138],[16,566],[15,567],[16,568],15,[16,908],[15,913],[16,75],[15,76],[16,504],[15,566],[53,567,118],[54,488],53,[54,563],547,[566,697],[567,698],[566,699],[567,700],[15,33,568],[16,34],15,[15,503],566,567,546,[547,736],[567,739],[546,738],[566,737],[546,738],[15,547,740],[16,484],[15,485],[16,486,657],[15,487,658],[16,567,659],[15,868,587,660],[16,871,567],[15,873,488],16,15,16,15,16,15,16,15,16,[15,991],[567,992],546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,567,567,[546,1038],[546,1039],[547,1040],566,[11,566],[12,567],[567,976],[546,1033],[546,1013],547,566,566,[36,567],[35,567],[36,485],[35,486],[36,11,487],[35,12,506],[36,733,955],35,36,35,36,35,[36,908,504],[892,547],547,[35,567],[36,526],[35,505],[36,487],[35,488],[36,583],[35,584],[36,588],[35,483],[36,484],[35,485],[36,486],[35,487],547,546,547,[35,568],36,[35,583],567,[546,717],[547,718],[546,719],[547,720],[35,588],36,35,[35,543],566,567,566,567,546,546,547,566,[35,567],[36,546],[35,584],[36,585,677],[35,586,678],[36,588,679],[35,888,680],[36,872,524],[35,893,508],36,35,36,35,36,35,36,35,36,[35,1011],[547,1012],566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[567,1036],[567,1037],567,[566,1019],[566,1059],[546,1060],547,[31,547],[32,546],[547,996],[566,1032],[566,1033],[546,736],[547,737],[566,737],[567,738],[567,739],[567,738],[567,739],[31,567,740],[15,32,567,1038],[16,975],15,16,15,[16,505],[15,484],546,566,567,[15,566],16,[15,583],[16,584],[15,526],16,15,16,[15,524],[16,584],[15,585],[16,586],[15,587],[16,585],[15,586],[16,587],[15,526],16,15,[16,524],[15,585],[16,586],[15,587],[16,527],15,16,15,[15,524],566,567,546,547,546,547,567,546,[15,547],[16,11,527],[15,12],[16,697],[15,698],[16,808,699],[15,872,700],[16,892,504],[15,851,528],16,15,16,15,16,15,16,[15,951],[16,952],[546,972],[547,973],546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,567,567,567,[546,999],[547,1000],566,567,567,566,[567,1016],[547,1052],[546,1032],[566,1110],[567,1111],[566,1110],[567,1351],[567,1352],[567,1353],[567,1110],[567,1111],[35,567,1058],[36,995],35,36,[35,505],567,567,566,567,566,[35,567],36,35,36,35,36,35,36,35,36,35,36,35,36,35,[36,717],35,53,[54,720],36,35,36,35,36,35,36,35,35,[35,525],567,566,567,566,567,546,566,567,[36,31,507],[35,32],[36,717],[35,718],[36,888,719],[35,872,504,720],[36,851,567],[35,548],36,35,36,35,36,35,36,[35,971],[546,972],[566,973],567,566,567,566,567,566,567,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1447],[4,1448],[4,1449],[4,1446],[4,1447],[4,1446],[4,1447],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1447],[4,1448],[4,1449],[4,1446],[4,1447],[4,1446],[4,1447],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,0,0,567,567,[567,1018],[566,1019],[566,1020],567,567,546,546,[547,1071],[566,1072],[566,1052],[567,1130],[566,1131],[567,1130],1371,1372,[567,1373],[546,1130],[566,1131],[15,567,1078],[16,505,1015],[15,484],[16,484,617],[15,547,618],[546,619],[546,620],547,566,[16,567],[15,588],16,15,16,15,16,15,55,56,16,15,16,15,16,15,16,15,73,74,16,15,[16,140],[15,483],[16,484],[15,488],16,15,15,15,[16,583],[15,587],[16,587],[15,526],[16,524],[15,584],567,546,546,[15,484],[16,485],[15,808,486],[16,872,487],[913,546],547,[15,568],16,15,[16,1857],[15,1858],[16,1859],[15,1860],16,[15,991],[566,992],567,547,546,547,546,547,546,547,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1465],1466,1467,1467,1468,1467,1468,1467,1468,1467,1468,1469,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],1466,1467,[1467,1669],[1468,1670],[1467,1671],1468,1467,1468,1467,1468,1469,[4,1470],4,4,4,4,4,4,4,4,4,0,0,[710,566],[711,566],[567,998],[547,999],[547,1000],546,547,566,566,546,[547,1092],[566,1093],[566,1150],[36,567,1151],[35,588,1150],[36,1391],[35,1392],[36,584,1393],[35,566,1150],[36,566,1151],[35,567,1098],546,566,[567,637],[567,638],[566,639],[566,640],567,567,[36,527],35,36,35,36,35,36,35,75,76,36,[35,955],36,35,36,35,[36,956],35,36,35,[36,483],[35,484],[36,487],[35,547],[36,566],[35,567],[36,506],35,35,35,36,35,36,35,36,35,[36,583],566,547,[35,567],[36,871,584],[35,872,585],[36,893,586],[566,141],[567,142],[35,568,143],36,35,[36,1877],[35,1878],[36,1879],[35,1880],36,[35,1011],[563,1012,617],[566,618],[567,619],546,547,546,547,546,546,547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,[1488,825],[1487,826,885],[1488,826,886],[1487,826,887],[1488,827],1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],1486,[1487,1609],[1487,1610,1689],[1488,1610,1690],[1487,1610,1691],[1488,1610],[1487,1610],[1488,1610,1666],[1487,1610,1667],[1488,1611,1668],1489,[4,1490],4,4,4,4,4,4,4,4,4,0,0,[730,546],[731,547],[566,1018],[567,1019],[567,1020],566,567,547,546,566,567,566,[15,567],[16,527],15,16,15,16,[15,524],[16,566],[15,546],546,547,[546,657],[546,658],[546,659],[566,660],[16,567],[15,526],16,15,[16,98],[15,99],16,15,16,15,16,15,[16,1038],[15,552,975],[16,513],15,16,[15,510],[16,553,976],[15,483,1033],[16,484],[15,484],[16,547],[15,567],[16,547],[15,567],[16,546],[15,547],[16,546],[15,485],[15,486],[15,487],[16,506],15,16,15,[16,13],[15,14],16,[15,563],[16,829,567],[15,871,526],[16,872,505],[15,872,487],[16,913,488],[15,583,161],[16,584,162],[15,588,163],16,15,[16,1897],[15,1898],[16,1899],[15,1900],16,[15,991],[16,583,992,637],[36,584,638],[16,585,639],[566,640],567,566,567,566,566,567,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,[1508,845],[1507,846,905],[1508,846,906],[1507,846,907],[1508,847],1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],1506,[1507,1629],[1507,1630,1709],[1508,1630,1710],[1507,1630,1711],[1508,1630],[1507,1630],[1508,1630,1686],[1507,1630,1687],[1508,1631,1688],1509,[4,1510],4,4,4,4,4,4,4,4,4,0,0,[15,544],[16,545],[546,998],[547,999],[567,1000],547,567,567,566,567,566,567,[35,526],36,[35,61],[36,62],35,36,35,[36,583],[35,566,61],[566,62],567,[566,677],[566,678],[36,566,679],[35,567,680],[36,588],35,36,11,12,35,36,35,[36,1038],[35,1055],[36,1056],[35,1057],[36,1058],[35,572,156,995],[36,573,116],[35,490],[36,493],572,[504,573,996],[35,566,1053],[36,567,1054],[35,547,1055],[36,546,1033],[35,547],[36,567],[35,547],[36,566],[35,546],[36,566],[35,546],[35,547],[35,546],[36,547],[35,484],[36,488],35,[36,33],[35,34],36,[35,808,583],[36,872,588],[35,872],[36,872,583],[35,913,584],[36,526],[35,181],[36,182],[35,183],36,35,[36,1917],[35,1918],[36,1919],[35,1920],36,[35,1011],[36,1012,657],[35,658],[36,583,659],[15,584,660],[15,585],[16,586],[15,584],[16,585],[15,586],[16,587],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1525],1486,1487,1487,[1488,845],[1487,846],[1488,846],[1487,846],[1488,847],1487,1488,1489,[4,1530],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1525],1486,[1487,1629],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1630,1706],[1487,1630,1707],[1488,1631,1708],1489,[4,1530],4,4,4,4,4,4,4,4,4,0,0,[35,564],[36,565],[566,1018],[567,1019],[546,1020],547,546,546,547,566,567,[16,588],15,16,[15,81],[16,82],15,16,15,16,[15,525,81],[566,82],546,[546,697],[566,698],[16,567,699],[15,526,700],16,15,16,31,32,15,16,[15,1038],[16,1058],1014,[155,1076],[156,1077],[175,1078],[552,155,1015],[16,553,117],[15,552],[16,553],[15,552],[553,113,1016],[155,1073],[155,1074],[15,175,1075],[16,566,1032],[15,567,1033],[16,547],[15,546],[16,547],[15,546],[16,547],[15,566],[15,567],[15,566],[16,567],[15,566],[16,567],[15,506],16,15,16,[15,871],[16,872],[15,851],16,15,16,[15,201],[16,202],[15,203],16,15,16,15,16,15,16,[15,991],[16,992,677],[15,678],[16,679],[35,680],35,36,35,36,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1465],1506,1507,1507,[1508,845],[1507,846],[1508,846],[1507,846],[1508,847],1507,1508,1509,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],1506,[1507,1629],[1507,1630],[1508,1630],[1507,1630],[1508,1630],[1507,1630],[1508,1630],[1507,1630],[1508,1631],1509,[4,1470],4,4,4,4,4,4,4,4,4,0,0,566,567,[714,566],[715,567,978],[566,979],[567,980],566,566,567,567,[35,527],[36,61],[35,62],36,35,36,35,36,35,36,35,[36,524],[35,584],[36,566,717],[35,567,718],[36,588,719],[35,720],[36,1036],[35,1037],36,35,36,35,[36,1038],[35,1058],[156,1078],[156,1215,213],[175,1214,214],[176,1215,215],[159,1098,216],[35,572,175],[36,573,137],[35,572],[36,573],[35,572,114],[36,573,156],[35,175,1093],[175,1214],[176,1095],[36,175,1052],[35,566,1053],[36,567,1054],[35,566,1055],[36,567,1033],[35,566,1034],[36,567],[35,547,736],[35,567,737],[35,547,737],[36,567,738],[35,546,739],[36,547,740],[35,546],[36,485],[35,486],[36,487],[35,908,506],[36,913],35,36,35,36,35,36,35,[36,241],35,36,35,36,35,36,[35,1011],[36,1012,697],[35,698],[36,699],[15,700],15,16,15,16,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,[1488,845],[1487,846],[1488,846],[1487,846],[1488,847],1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],1486,[1487,1629],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1631],1489,[4,1490],4,4,4,4,4,4,4,4,4,0,0,567,567,[734,547],[735,566],[546,999],[566,1000],546,566,567,[16,526],15,[16,81],[15,82],16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,[15,1037],[16,1038],[15,1054],[16,1058],[175,1078],[176,1098],[15,156,233],[16,155,234],[15,156,235],[16,155,236],[15,552,156],[16,553,157],[15,459],[16,460],[15,552,112],[16,553,176],[15,158],[16,155],[15,156],[155,1072],[175,1073],[176,1074],[15,504,176,1075],[16,566,1169],[15,567,1054],[16,547,1055],[15,567,1056],[15,566,1055],[15,567,1054],[16,547,1055],[15,566,1056],[16,546,1057],[15,566,1033],[16,567],[15,566],[16,567],[15,588],16,15,16,15,16,15,16,15,[16,261],15,16,15,16,15,16,[15,1031],[16,1032,717],[15,1033,718],[16,1034,719],35,35,36,35,36,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1465],1506,1507,1507,[1508,845],[1507,846],[1508,846],[1507,846],[1508,847],1507,1508,1509,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],1506,[1507,1649],[1507,1650],[1508,1650],[1507,1650],[1508,1650],[1507,1650],[1508,1650],[1507,1650],[1508,1651],1509,[4,1470],4,4,4,4,4,4,4,4,4,0,0,567,566,567,566,[566,999],[567,1000],566,567,[35,588],36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,[35,1038],[36,1056],[35,1057],[36,1058,213],[35,155,1074,214],[156,1078,215],[155,1098,216],[36,156],[35,155,253],[36,155,254],[35,156,255],[36,175,256],[35,572,176],[36,573,177],[35,479],[36,480],[35,572,132],[36,573,155],[35,156],[36,175],[35,176],[36,175],[35,155,1093],[156,1094],[156,1211],[155,1189],[35,156,1074],[155,1075],[156,1076],[155,1075],[155,1074],1075,1076,1077,[35,546,1032],[36,546,1033],[35,547],[36,526],35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,[35,1051],[36,1052],[35,1053],[36,1056],[15,1057],[15,1056],[16,1057],[15,1056],[16,1057],[15,1056],[16,1057],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,[1488,845],[1487,846],[1488,846],[1487,846],[1488,847],1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,1488,1487,1488,1487,1488,1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,0,0,567,567,567,567,[15,567,1019],[16,567,1020],[15,587],[16,588],15,16,15,16,15,16,15,16,15,16,15,16,15,[16,1036],[15,1037],[16,1038],[15,1056],[16,1057],[15,1056],[16,1057],[15,1058],[16,1076],[175,1077],[176,1078,233],[175,1094,234],[176,1098,235],[15,175,236],[16,176],[15,175,273],[16,175,274],[15,176,275],[16,155,276],[15,160],[16,176],[15,552,116],[16,553],[15,552,152],[16,553,175],[15,176],[16,155],[15,156],[16,155],[15,175],[16,176],[15,176],[16,175,1209],[176,1094],[175,1095],[176,1096],[175,1095],[175,1094],[156,1095],[155,1096],[156,1097],[566,155,1052],[16,566,1053],[15,547,1149],[16,507],15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,[15,1071],[16,1072],[15,1073],[16,1076],[35,1077],[35,1076],[36,1077],[35,1076],[36,1077],[35,1076],[36,1077],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,[1508,865],[1507,1606,866],[1508,1607,866],[1507,1608,866],[1508,867],1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,1508,[1507,1606],[1508,1607],[1507,1608],1508,1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,0,0,567,567,567,[567,1038],[16,567,1039],[36,1040],35,36,[15,1038],[16,1056],[35,1057],[15,1033],[15,1034],[16,1035],[15,1036],[15,1037],[16,1038],[36,1056],[35,1054],[36,1351],[35,1352],[36,1353],[35,1057],[36,1058],[35,1076],[36,1077],[35,175,1076],[36,176,1077],[35,155,1078],[156,1096],[155,1097],[156,1098,253],[155,254],[36,156,255],[35,155,256],[36,156],[35,155,293],[36,175,294],[35,176,295],[36,175,296],[35,155],[36,156],[35,572,177],[36,459],[35,460,172],[36,573,156],[35,176],[36,175],[35,176,213],[36,175,214],[35,155,215],[36,156,216],[35,155],[36,156],[35,155],[36,156],[35,155],[35,156],155,176,257,258,[35,175,1072],1052,[35,547,1012],[36,568],35,[36,11],[35,12],36,[35,1038],[36,1055],[35,1056],[36,1351],[35,1352],[36,1353],[35,1114],[36,1057],[35,1056],[36,1057],[35,1110],[36,1111],[35,1177],[36,1033],[35,1093],[16,1096],[35,1097],[35,1096],[36,1097],[35,1096],[36,1097],[35,1096],[36,1097],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1525],1526,1527,1527,1528,[1487,1626],[1488,1627],[1487,1628],1528,1527,1528,1529,[4,1530],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1525],1526,1527,1527,1528,[1487,1626],[1488,1627],[1487,1628],1528,1527,1528,1529,[4,1530],4,4,4,4,4,4,4,4,4,0,0,[567,1036],[567,1037],[567,1038],[567,1039],[15,1059],[16,1060,1038],[15,1056],[16,1057],[35,1058],[36,156,1076],[155,1077],[35,1053],[35,1054,213],[36,1055,214],[35,1056,215],[35,1057,216],[36,1058],[156,1133],[155,1074],[156,1371],[156,1372],[155,1373],[155,1014],[156,1078],[155,406,1096],[156,1097],[155,1096],[156,1097],[155,1098],156,155,[156,273],[155,274],[156,275],[155,276],156,155,[155,314],[156,315],[155,140],175,155,[552,117],479,[480,192],[553,176],156,155,[155,233],[156,234],[155,235],[156,236],155,156,155,156,155,[156,138],155,156,277,278,[155,1092],[156,1031],[15,567,1053],[15,588,1033],[16,1034],[15,31],[16,32,1037],[15,1038],[16,1039],[156,1014],[155,1076,702],[156,1371],[155,1372],[156,1373],[155,1134,701],[156,1077],[155,1076],[155,1077],[156,1130],[156,1131,213],[155,1197,214],[156,1032,215],[155,1033,216],156,175,175,176,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547],[4,1547],[4,1548],[4,1646],[4,1647],[4,1648],[4,1548],[4,1547],[4,1548],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547],[4,1547],[4,1548],[4,1646],[4,1647],[4,1648],[4,1548],[4,1547],[4,1548],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,0,0,[35,567,1056],[35,567,1057],[36,567,1058],[15,1059],[16,1060,1038],[36,1058],[35,175,1076],[36,176,1077],[175,1078],[176,1096],[175,1097],[175,1073],[176,1074,233],[175,1075,234],[155,1076,235],[156,1077,236],[175,1078],[176,1096],[175,1094],[176,1391],[176,1392],[155,1393],[156,1097],[176,670,1098],[175,406],[176,668],175,155,155,156,155,[156,293],[175,294],[176,295],[175,296],176,175,175,176,175,155,156,[572,137],573,572,[573,172],176,155,[156,253],[176,254],[175,255],[176,256],175,155,155,156,155,156,175,176,175,176,175,[156,1031],[35,175,1052],[35,1053],[36,1054],[35,1832],[36,1057],[35,1058],[36,155,1078],[156,1095],[552,155,1096,722],[553,1391],[552,1392,685],[553,1393],[175,1154,721],[176,1097,725],[155,1096,685],[156,1097],[176,1150],[176,1151,233],[175,1217,234],[176,1052,235],[175,1053,236],[176,1033],155,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[36,1076],[15,1077],[16,1078],[16,1079,1038],[36,1058],[156,1078],[159,1096],[156,1097],[155,1098],155,156,[155,1093],[156,1094,253],[155,1095,254],[175,1096,255],[176,1097,256],[155,669,1098],[156,747],155,155,156,175,[155,746],[156,690],[155,406],[155,668],155,175,175,176,175,176,[159,314],[156,315],155,257,258,155,[156,213],[155,214],[175,215],[176,216],[552,157],553,552,[553,192],[552,156],[553,175],[155,273],[156,274],[155,275],[155,276],155,175,175,176,175,176,155,156,155,159,155,[156,1072],[155,1094],[156,1073],[155,1074],[156,1852],[155,1077],[156,1078],[156,1098,703],156,[572,175,742],[459,116,745],[460,705],[573,113],[155,741],[155,745],[175,705,704],176,160,[156,253],[155,254],[156,1072,255],[155,1011,256],[156,1012],175,155,156,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[16,1096],[15,1097],[16,1098],[36,1019],[175,1059],[176,1098],155,156,175,175,176,176,[175,273],[176,274],[175,670,275],[176,406,276],[175,406],[176,688],[175,747],175,176,155,[156,670],[156,406],[156,628],175,175,176,175,176,175,[176,138],155,156,175,277,278,176,[175,233],[176,234],[175,235],[176,236],[459,177],460,572,573,[572,172],[573,155],[156,293],[156,294],[156,295],[175,296],175,176,175,[176,140],175,176,175,176,175,176,155,156,175,[176,1093],[552,1210],[552,1872],[553,1097],[156,1098],[176,723],176,[175,762,685],[479,176,765],[480,93],155,[155,761],[175,765],[176,724],[155,725],[156,685],[176,273],[175,274],[176,275],[175,1011,276],[176,1012],175,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,[35,113],[36,96],[16,97,1019],[155,1020],156,155,156,155,156,155,156,[155,293],[156,294],[155,670,295],[155,406,296],[155,406],[155,406],[155,688],[156,689,7],[175,9],[159,689,10],[175,690],[176,406],[176,668],158,155,156,155,156,155,156,155,156,[155,213],[156,214],[155,215],[156,216],[155,253],[156,254],[155,255],[156,256],[479,117],480,460,552,[553,192],[552,175],[553,176],[176,314],[176,315],158,155,156,155,156,155,156,[155,118],156,155,155,175,176,155,156,[572,116],460,[553,113],176,[155,743],[156,745],[156,705],155,156,155,156,175,[176,744],[175,745],[176,705],[156,293],[155,294],[156,295],[155,1011,296],[156,1012],156,155,155,156,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[15,113],[16,156],[35,155],[36,156,1019],[175,1020],176,155,156,175,176,175,176,175,[176,314],[175,315],[175,630,213],[155,406,214],[175,406,215],[175,406,216],[176,406,7],[155,9],[156,406,10],[155,406],[155,628],156,156,155,156,175,176,175,155,155,156,[175,233],[176,234],[175,235],[176,236],[175,273],[176,274],[175,275],[176,276],[572,137],479,[480,113],[572,96],[573,116],[572,134],[573,193],176,155,156,175,176,175,176,175,155,156,[176,213],[155,214],[175,215],[176,216],176,175,176,175,[572,93],[573,176],175,[155,763],[156,765],156,175,176,175,155,156,[176,764],[176,765],175,176,[175,314],[176,971,315],[159,972],[176,973],176,155,175,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[35,175],[36,176],175,[176,1019],[155,1020],[156,213],[175,214],[176,215],[175,216],176,155,156,155,156,155,[156,233],[175,629,234],[176,629,235],[156,629,236],[155,629],156,[155,629],[156,629],175,155,156,175,176,155,156,155,155,175,176,[175,253],[176,254],[155,255],[156,256],[155,293],[156,294],[155,295],[156,296],[552,157],552,[553,112],160,[552,176],[553,116],552,[553,192],[552,195],[553,196],[552,155],[553,156],[552,155],[553,156],155,155,156,[155,233],[175,234],[175,235],[176,236],156,[155,119],155,[156,314],156,155,156,175,176,156,156,155,175,175,176,156,155,155,156,155,[156,991],[155,992],156,156,175,176,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,156,[175,1038],[176,1039],[175,1060],[176,233],[175,234],[176,235],[175,236],176,175,176,175,155,156,[176,253],[155,254],[155,255],[156,256],155,155,175,257,258,175,176,155,155,[156,213],[196,214],[175,215],[175,216],175,176,[175,273],[176,274],[175,275],[176,276],[175,119],[155,314],[156,315],176,[572,177],572,[573,152],155,[572,156],[573,156],[572,94,213],[573,95,214],[572,96,215],[573,116,216],[553,192],[459,194],[460,195],[573,196],175,175,176,[175,253],[175,254],[155,255],[156,256],176,155,[175,213],[176,214],[176,215],[175,216],176,175,175,[552,196],[553,193],175,155,175,[176,213],[176,214],[175,215],[175,216],176,175,[176,1011],[175,1012],176,155,156,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,176,[155,1019],[156,1020],155,[156,253],[155,254],[156,255],[175,256],176,155,156,155,175,176,[156,273],[175,274],[175,275],[176,276],175,155,156,277,278,175,175,155,156,[155,233],[155,234],[155,235],[156,236],155,156,[175,293],[176,294],[155,295],[156,296],155,[175,213],[176,214],[156,215],[552,117,216],553,[553,172],175,155,156,[175,233],[176,234],[176,235],[572,156,236],[573,97],479,480,552,[553,134],156,155,[156,273],[155,274],[175,275],[176,276],155,156,[176,233],[155,234],[156,235],[155,236],156,155,[552,135],553,[573,113],156,175,155,[156,233],[156,234],[155,235],[155,236],156,155,[156,1031],[155,1032],[156,1033],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,156,[175,1019],[176,1020],175,[176,273],[175,274],[176,275],[158,276],176,175,176,175,176,175,[176,293],[175,294],[176,295],[156,296],155,156,176,175,176,175,176,175,176,[175,253],[175,254],[155,255],[156,256],175,176,158,[176,314],[175,315],176,175,[176,233],[175,234],[176,235],[572,137,236],573,[573,132],155,156,176,[175,253],[176,254],[175,255],[176,256],155,[459,94],[460,95],[572,96],[573,115],[553,134],[552,175],[553,176,293],[552,175,294],[553,155,295],[552,155,296],[553,155],156,[176,253],[175,254],[176,255],[175,256],[552,176],[553,136],459,[460,92],175,158,175,175,[176,253],[176,254],[175,255],[175,256],176,175,[176,1051],[175,1052],[176,1012],176,176,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,176,[155,1019],[156,1020],155,[156,293],[155,294],[156,295],[155,296],156,155,156,155,155,156,156,[155,314],[175,315],176,175,176,156,156,156,155,156,175,155,[156,273],[156,274],[175,275],[155,276],156,156,155,156,155,156,155,[155,253],[156,254],[156,255],[552,157,256],553,[552,152],[553,175],176,156,[156,273],[156,274],[155,275],[156,276],175,[479,155],[480,156],156,[572,155],[573,115],[572,134],[573,194],[459,195,314],[460,196,315],[572,194],[573,175],176,[156,273],[155,274],[156,275],[155,276],[572,177],573,[479,92],[480,176],156,155,156,155,[155,273],[156,274],[156,275],[155,276],156,155,156,[155,1011],[156,1012],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,[156,1038],[175,1039],[176,1020],175,176,[155,314],[156,315],175,176,175,176,175,175,176,176,155,156,156,175,155,155,156,176,175,176,175,175,[176,293],[176,294],[155,295],[175,296],176,156,175,176,175,176,175,[175,273],[176,274],[176,275],[572,177,276],573,[572,172],[573,175],155,155,[156,293],[176,294],[175,295],[176,296],175,175,176,176,155,156,[552,115],553,479,480,552,[553,133],155,[156,293],[175,294],[176,295],[155,296],[552,136],[553,114],[572,156],[573,176],155,156,176,155,[175,293],[176,294],[176,295],[175,296],[176,746],[175,649],[176,689],[175,689,1011],[176,1012],155,155,156,155,156,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,[156,1019],[155,1059],[156,1060],155,156,155,[156,213],[175,214],[176,215],[155,216],156,155,155,156,156,175,176,176,176,175,155,156,156,155,156,155,156,156,[156,314],[175,315],176,155,[156,140],175,176,155,156,155,[155,293],[156,294],[156,295],[552,117,296],552,[553,112],176,175,155,156,[156,314],[155,315],156,155,156,156,156,175,176,[572,176],[573,93],[572,94],[573,95],[572,94],[573,115],[552,133],[553,156],[156,314],[552,156,315],[553,135],[572,113],[573,175],176,156,175,176,156,175,[176,746],[155,649,314],[156,689,315],[155,689],[156,690],[155,406],[156,628],[155,629,1011],[156,1012],175,155,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[175,1038],[176,1039],[175,1040],176,175,176,155,[156,233],[155,234],[156,235],[155,236],156,175,159,176,176,155,155,156,155,156,175,176,155,156,176,155,156,156,176,175,155,155,156,155,[552,193],[553,194],[552,195],[553,196],159,[176,314],[176,315],[459,137],460,[573,132],155,156,175,176,155,156,[176,140],155,156,156,176,175,155,155,156,175,176,175,176,[572,97],[573,134],[573,194],[572,135],[573,114],156,175,155,156,176,175,[155,746],[156,649],[176,690],[175,406],[176,406],[175,406],[176,406],[175,628],176,[175,1011],[176,1012],175,175,176,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[155,1019],[156,1059],[176,1060],175,155,156,155,[156,253],[175,254],[176,255],[175,256],176,155,155,156,156,175,175,176,175,176,156,155,175,176,156,175,158,155,156,155,175,155,156,[552,135],553,573,553,459,[460,133],[553,156],156,[479,157],480,[553,152],[175,213],[176,214],[156,215],[155,216],175,176,156,175,158,155,156,155,175,175,[176,213],[155,214],[156,215],[155,216],156,155,[459,115],460,[552,113],[553,175],176,155,175,176,156,155,[156,650],[176,406],[156,628],[155,629],[156,629,213],[155,629,214],[156,629,215],[155,216],[156,971],[155,972],[156,973],155,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[28,1829],[4,1346],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[28,1829],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[175,1019],[176,1020],156,175,175,176,175,[176,273],[175,274],[176,275],[155,276],156,175,175,176,[176,141],[155,142],[175,143],176,176,155,155,156,[156,213],[175,214],[176,215],[175,216],175,175,155,156,155,[552,175],[459,135,119],[460,113],[573,93,213],[572,94,214],[573,95,215],[479,96,216],[480,97],[553,134],176,[572,177],573,[573,172],[176,233],[155,234],[155,235],[156,236],156,175,176,175,175,175,155,156,155,155,[155,233],[155,234],[156,235],[175,236],159,175,[479,117],[480,113],[572,155],[573,175],176,153,176,175,176,175,[176,650],[176,406],[176,668],175,[176,233],[175,234],[176,235],[175,236],[176,991],[175,992],176,175,155,156,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1348],[4,1364],1849,[4,1304],[4,1343],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],1849,[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,[155,978],[156,979],[176,980],176,155,156,155,[156,293],[155,294],[156,295],[175,296],176,155,155,156,[156,161],[175,162],[176,163],[176,141],[156,142],[175,143],160,176,[156,233],[156,234],[156,235],[155,236],156,176,175,176,[552,175],[553,136],[479,114],[480,155],[156,233],[175,234],[176,235],[155,236],[572,155],[573,116],[459,192],[460,197],553,[552,112],[553,156,253],[175,254],[160,255],[176,256],156,156,156,155,156,176,175,176,175,175,[175,253],[175,254],[176,255],[155,256],156,155,[552,137],[553,112],175,176,155,156,156,155,156,158,[175,650],[176,406],[156,688],[155,747],[156,253],[155,254],[156,255],[155,256],[156,1011],[155,1012],156,175,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1304],[4,1368],[552,1384],[553,1869],[552,1386],[553,1363],[4,1304],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1368],[1359,1869],[1359,1342],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,0,0,[175,998],[176,999],[175,1000],176,175,155,156,176,[175,314],[155,315],155,156,175,175,155,[155,181],[156,182],[155,183],[156,161],[176,162],[175,163],155,156,[155,253],[156,254],[155,255],[156,256],156,175,[552,176],[459,196],[460,135],[573,113],176,175,[155,253],[155,254],[156,255],[175,256],175,[572,155],[479,115],480,573,[572,132],[573,176,273],[175,274],[155,275],[156,276],155,156,155,156,156,175,176,175,155,155,[156,273],[175,274],[155,275],[156,276],257,258,[572,157],[573,132,213],[176,214],[175,215],[175,216],176,156,175,176,175,[176,650],[175,406],[176,406],[155,688],[156,747,273],[175,274],[176,275],[175,276],[176,1031],[175,1032],[176,1033],156,155,155,156,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[4,1349],[552,746,1384],[553,406,1388],[572,668],573,572,[552,1383],[553,1387],[4,1342],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1346],[4,1347],[4,1348],[1378,1330],1379,[1379,1321],[4,1343],[4,1346],[4,1347],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,0,0,[155,1018],[156,1019],[155,1020],156,[155,213],[155,214],[156,215],[156,216],155,175,175,176,175,176,175,[175,201],[176,202],[175,203],[176,181],[155,182],[156,183],175,176,[175,273],[155,274],[156,275],[176,276],176,155,[572,136,140],479,[480,113],156,156,155,[175,273],[175,274],[176,275],[175,276],176,175,176,[552,115],459,[460,152],[553,155,293],[156,294],[175,295],[176,296],[175,213],[155,214],[156,215],[176,216],176,155,156,155,156,175,[176,293],[156,294],[155,295],[155,296],277,278,[552,197],[553,152,233],[156,234],[155,235],[175,236],[155,213],[156,214],[155,215],[156,216],155,155,[156,630],[156,406],[175,406],[176,668,293],[155,294],[156,295],[155,296],[156,1051],[155,1052],[156,1012],176,155,175,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,689,1290],[572,690],[573,406],[460,668],553,552,572,573,[553,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1367],[4,1747],[4,1367],[4,1368],[1358,1350],1359,[1358,1341],[1359,1363],[1358,1366],[1359,1367],[1358,1747],[1359,1367],[4,1343],[4,1323],4,4,4,4,4,4,0,0,[175,1038],[176,1039],[175,1040],176,[175,233],[175,234],[176,235],[158,236],175,155,156,176,155,156,175,175,[175,241],176,[156,201],[175,202],[155,203],156,176,[176,293],[552,175,294],[553,176,295],[552,193,296],[553,193],[552,197],553,[572,113],[573,176],176,158,175,[155,293],[156,294],[176,295],[155,296],156,[175,241],175,[572,177],479,[480,172],[573,175],[155,314],[156,315],176,[176,233],[175,234],[176,235],[155,236],156,175,[176,140],175,176,175,175,[176,314],[175,315],175,[552,176],[459,135],[460,113],[573,176,253],[176,254],[175,255],[175,256],[175,233],[176,234],[156,235],[176,236],175,155,[156,650],[176,406],[175,406],[176,688],[175,669,314],[176,747,315],175,176,[175,1011],[176,1012],156,175,176,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,406,1290],[573,628],[553,629],572,573,572,[480,1846],553,[573,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1368],[1358,1386],[1358,1387],[1358,1767],[1359,1387],[1359,1388],1359,1379,1378,[1379,1383],[1378,1386],[1379,1387],[1378,1767],[1379,1387],[4,1363],[4,1302],4,4,4,4,4,4,0,0,[175,999],[176,1059],[175,1060],156,[155,253],[156,254],[155,255],[156,256],155,175,176,156,155,156,155,155,[156,261],175,176,155,156,156,[552,155],[553,156],[572,193,314],[573,135,315],459,460,[572,114],[573,93],176,[155,213],[155,214],[156,215],[155,216],175,[176,314],[156,315],155,156,[155,261],159,[552,117],553,[552,112],[553,156],175,176,155,[156,253],[156,254],[175,255],[175,256],176,155,155,156,155,156,156,156,156,156,[572,135],[479,113],[480,176],[156,273],[155,274],[156,275],[155,276],[156,253],[175,254],[176,255],[156,256],155,175,176,[156,630],[155,406],[156,406],[155,406],[156,688],[155,689],[156,689],[155,1011],[156,1012],155,156,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[572,648,1228],573,573,572,573,[553,1222],[573,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[1379,1310],1358,1378,1378,1358,1359,1379,1358,1359,1358,1359,1358,1359,1358,[1359,1301],[4,1302],4,4,4,4,4,4,0,0,[156,999],[156,1000],175,176,[155,273],[156,274],[175,275],[176,276],175,175,176,155,175,176,175,175,176,155,156,175,176,176,[459,175],[460,135],552,553,[479,113],[480,93],175,175,176,[175,233],[175,234],[176,235],[175,236],175,176,155,175,176,175,175,[572,137],573,[572,132],[573,257],258,176,175,[176,273],[176,274],[155,275],[155,276],156,175,175,176,175,176,176,155,156,[552,135],[553,113],156,155,[156,293],[175,294],[155,295],[156,296],[176,273],[155,274],[155,275],[156,276],155,175,176,176,[155,629],[156,629],[175,630],[176,406],[175,406],[159,406],[175,1011],[176,1012],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1228],[553,1163],[479,1164],[553,1165],[573,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[1378,1227],[1379,1227],[1378,1227],[1378,1227],[1379,1228],1379,1378,[1379,1222],[1378,1223],[1379,1224],[1378,1224],[1379,1224],[1378,1224],[4,1262],[4,1263],4,4,4,4,4,4,0,0,[176,999],[176,1000],176,156,[175,293],[176,294],[155,295],[156,296],155,155,156,175,176,156,155,155,156,175,176,155,156,156,[479,135],480,[572,113],[573,93],[572,175],[573,176],155,156,155,[156,253],[155,254],[156,255],[155,256],155,156,175,176,156,155,155,[459,157],460,[552,152],[553,277],278,156,155,[156,293],[155,294],[175,295],[175,296],176,155,156,[155,138],156,155,155,[552,176],[553,135],[572,92],[573,175],176,155,156,[175,314],[175,315],176,[160,293],[175,294],[155,295],[156,296],175,176,176,[155,213],[156,214],[156,215],[155,216],[156,629],[155,629],[156,629],[155,1011],[156,1012],176,176,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1183],[572,1184],[573,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1247],[4,1247],[4,1247],[4,1248],[1358,1270],1359,[1358,1261],[4,1243],[4,1244],[4,1244],[4,1244],[4,1244],[4,1263],4,4,4,4,4,4,4,0,0,[155,999],[156,1000],176,175,155,[155,314],[156,315],176,175,175,176,[155,213],[156,214],[156,215],[175,216],175,176,155,156,175,[552,176],[553,135],572,[573,92],175,176,175,176,175,176,175,[176,273],[156,274],[176,275],[175,276],175,176,155,156,156,[175,138],175,[479,117],480,[572,172,213],[573,176,214],[175,215],[176,216],175,176,[175,314],[176,315],175,176,175,176,175,176,175,175,[572,176],[573,116],[552,192],[553,155],158,175,176,156,175,175,176,[156,314],[155,315],156,175,176,175,[175,233],[176,234],[176,235],[175,236],176,175,176,[175,1011],[176,1012],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,[1378,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,0,0,[175,978],[176,979],[156,980],175,175,175,176,156,155,160,155,[175,233],[176,234],[176,235],[155,236],156,155,175,176,156,[572,155],[573,116],552,[553,172],155,156,155,156,155,156,155,[156,293],[176,294],[156,295],[155,296],160,155,175,176,176,155,[459,156],[460,137],553,[552,112,233],[553,156,234],[155,235],[156,236],155,156,155,156,155,156,155,156,155,156,155,176,[552,176],[553,176],[572,115],[573,134],175,176,175,176,[155,119],175,175,176,175,176,155,156,155,[156,253],[155,254],[156,255],[155,256],160,155,156,[155,1011],[156,1012],155,155,156,155,156,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[1359,1227],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,0,0,155,[156,978],[176,979],[176,980],175,176,175,176,175,176,175,[176,253],[175,254],[176,255],[175,256],176,155,156,[155,213],[156,214],[552,175,215],[553,177,216],572,[573,112],175,176,175,176,175,176,175,176,[175,314],[176,315],175,176,175,[176,213],[175,214],[176,215],[175,216],[479,176],[480,157],573,[572,132,253],[573,156,254],[175,255],[176,256],175,176,175,176,175,176,175,176,175,176,175,176,[572,175],[573,176],175,[1715,115],[1716,134],176,175,176,175,176,175,176,175,[176,119],175,176,175,[176,273],[175,274],[153,275],[154,276],176,175,[176,971],[175,972],[176,973],175,155,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,176,[155,978],[156,979],[155,980],156,159,156,155,155,155,[156,273],[156,274],[155,275],[175,276],176,175,176,[175,233],[176,234],[572,156,235],[573,177,236],552,[553,132],155,155,155,175,175,176,175,176,159,156,155,257,258,[155,233],[156,234],[155,235],[175,236],[552,176],[553,177],459,[460,152,273],[553,155,274],[156,275],[175,276],155,156,155,155,155,175,175,176,175,176,155,156,155,159,155,[1735,156],[1715,97],[1716,134],[552,155],[553,156],155,156,156,156,175,176,155,156,155,[155,293],[175,294],[176,295],[160,296],156,[155,971],[156,972],[155,973],156,176,175,175,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,176,155,156,[176,999],[175,1000],176,155,156,175,175,155,[156,293],[175,294],[176,295],[175,296],176,175,175,[176,253],[155,254],[552,156,255],[459,137,256],460,[573,152],156,175,175,176,175,176,175,176,155,156,175,277,278,[176,253],[175,254],[176,255],[175,256],[572,176],[573,117],479,[480,172,293],[573,155,294],[156,295],[155,296],156,156,156,175,175,176,175,176,175,176,175,176,175,176,155,156,[459,117],460,[553,112],[573,176],155,156,176,[176,213],[175,214],[176,215],[175,216],155,155,175,[176,314],[155,315],156,176,[175,991],[176,992],[175,993],176,156,155,156,155,156,155,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,156,175,176,[156,1019],[155,1020],156,155,[156,213],[155,214],[156,215],[175,216],176,[155,314],[156,315],155,156,155,175,[176,273],[156,274],[572,176,275],[479,157,276],480,[553,172],176,[158,213],[155,214],[156,215],[155,216],156,155,156,155,156,155,156,155,[156,273],[155,274],[156,275],[155,276],[552,156],[552,137],552,[553,112],[156,314],[176,315],175,176,176,176,158,155,156,155,156,[155,118],156,155,156,155,155,175,176,[479,137],480,[573,152],[553,155],175,176,155,[156,233],[156,234],[155,235],[156,236],155,156,175,176,175,176,156,[155,1011],[156,1012],[155,1013],156,176,175,176,175,153,154,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,176,156,156,[176,999],[175,1000],176,155,[156,233],[175,234],[176,235],[175,236],176,175,176,175,176,175,176,[156,293],[156,294],[552,176,295],[553,177,296],572,[573,172],155,[156,233],[175,234],[176,235],[175,236],176,175,155,155,156,175,176,175,[176,293],[175,294],[176,295],[175,296],[572,176],[572,157],572,[573,132],156,176,155,156,155,155,156,175,176,175,176,175,155,156,176,155,175,176,176,[572,157],573,[572,192],[573,193],176,175,155,[156,253],[156,254],[155,255],[156,256],175,155,156,176,176,175,[176,971],[175,972],[176,973],159,176,156,155,155,175,176,160,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,176,176,[156,1019],[155,1020],156,175,[176,253],[175,254],[176,255],[155,256],[156,213],[155,214],[156,215],[155,216],155,156,175,176,[156,314],[572,176,315],[573,135],[552,113],[553,175],175,[155,253],[156,254],[155,255],[156,256],156,155,155,175,176,175,176,155,156,[155,314],[156,213],[155,214],[552,156,215],[553,177,216],552,[553,152],156,[176,138],175,176,175,[175,213],[155,214],[156,215],[155,216],156,156,155,155,156,155,175,175,176,156,[552,155],[553,97],552,553,[552,134],[553,156],175,[176,273],[155,274],[156,275],[176,276],175,175,176,[156,213],[155,214],[155,215],[156,991,216],[155,992],[156,993],155,156,155,155,175,176,155,156,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,155,156,[175,1038],[176,1039],[175,1040],176,175,[176,273],[175,274],[176,275],[175,276],[176,233],[175,234],[155,235],[156,236],175,176,155,156,176,[552,135],[553,113],[572,175],[573,159],175,[156,273],[176,274],[155,275],[155,276],156,175,175,175,176,175,176,175,176,175,[155,233],[156,234],[572,176,235],[573,117,236],572,[573,172],176,155,155,156,155,[156,233],[156,234],[176,235],[155,236],155,156,175,175,176,175,175,155,156,176,[572,155,213],[573,175,214],[572,93,215],[573,96,216],[572,97],[573,134],175,[155,293],[156,294],[156,295],[176,296],155,175,176,[176,233],[175,234],[175,235],[176,1011,236],[175,1012],[176,1013],175,176,155,156,175,176,175,176,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,[176,1038],[155,1039],[156,1059],[155,1060],156,155,[156,293],[175,294],[176,295],[155,296],[156,253],[155,254],[175,255],[176,256],156,155,175,[552,196],[553,135],[572,113],[573,176],155,156,155,[155,293],[155,294],[175,295],[155,296],156,156,156,155,156,175,176,155,156,155,[175,253],[176,254],[552,156,255],[459,137,256],460,[553,112],175,175,175,155,156,[155,253],[155,254],[155,255],[175,256],155,156,156,156,155,156,155,175,176,155,[156,233],[176,234],[155,235],[156,236],[552,177],553,[552,172],[553,156],[156,314],[176,315],176,175,155,156,[156,253],[155,254],[155,255],[156,1031,256],[155,1032],[156,1033],155,156,175,155,156,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,155,[156,1019],[175,1059],[176,1060],175,176,175,176,[158,314],[176,315],175,[176,273],[175,274],[176,275],[175,276],176,[552,175],[459,135],460,[573,113],156,155,156,257,258,175,[175,314],[155,315],156,176,[176,119],[176,213],[175,214],[176,215],[158,216],176,175,176,175,[176,273],[175,274],[572,176,275],[479,157,276],480,[573,132],155,156,176,155,155,[175,273],[175,274],[175,275],[155,276],156,176,176,[176,140],155,156,156,155,156,156,[156,253],[176,254],[175,255],[176,256],[572,176],[573,116],[572,192],[573,155],156,155,156,175,175,176,[176,273],[175,274],[175,275],[176,1051,276],[175,1052],[176,1012],175,176,175,175,176,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,[176,1019],[155,1020],156,155,156,155,156,155,156,155,[156,293],[552,155,294],[553,155,295],[156,296],156,[572,135],[479,113],[480,93],[553,175],176,155,155,277,278,155,156,155,156,156,155,[155,233],[155,234],[156,235],[155,236],156,155,156,155,[155,293],[156,294],[552,156,295],[553,177,296],552,[553,152],175,176,156,[175,140],175,[176,293],[155,294],[156,295],[155,296],156,156,155,155,155,156,176,175,176,176,[156,273],[156,274],[155,275],[156,276],155,[552,176],[553,116],[552,134],[553,176],175,176,[156,138],155,155,[156,293],[156,294],[155,295],[156,296],[155,991],[156,992],155,156,155,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,155,[156,1019],[175,1020],176,175,176,155,156,175,176,175,176,[572,193,314],[573,194,315],[552,195],[553,197],552,[553,172],[572,176],[573,175],[155,213],[155,214],[156,215],[176,216],175,175,176,175,176,176,155,[175,253],[155,254],[156,255],[175,256],176,175,176,175,175,[176,314],[572,176,315],[573,117],572,[573,172],175,155,155,156,176,175,[175,314],[176,315],175,176,176,155,175,[175,213],[155,214],[155,215],[156,216],175,176,[176,293],[156,294],[175,295],[176,296],175,[572,176],[573,177],572,[573,172],176,156,176,155,175,176,[176,314],[175,315],176,[175,1011],[176,1012],175,176,175,155,156,156,155,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,[176,1019],[155,1020],156,155,156,155,156,175,176,[552,155],[553,135],459,460,572,573,[572,113],[573,176],156,176,[175,233],[155,234],[156,235],[156,236],155,156,155,156,156,156,175,[175,273],[155,274],[156,275],[175,276],176,155,156,155,155,156,[552,156],[553,137],459,[460,112],176,175,155,156,156,155,[156,213],[155,214],[156,215],[156,216],156,175,175,[176,233],[175,234],[155,235],[155,236],155,156,155,[155,314],[156,118],155,156,[552,176],[553,117],552,[553,152],175,176,156,175,176,155,156,155,156,[155,1031],[156,1032],[155,1033],156,175,175,176,176,175,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,[176,978],[175,979],[176,980],175,176,[552,155],[553,156],[459,193],[460,193],[572,135],[573,113],[479,93],[480,94],[552,95],[553,96],175,175,176,155,[156,253],[175,254],[176,1036,255],[155,256],156,176,155,156,156,176,175,[155,293],[155,294],[156,295],[155,296],156,155,156,175,159,176,[572,176],[573,157],479,[480,132],155,156,175,176,155,156,[176,233],[155,234],[156,235],[156,236],176,175,155,[155,253],[156,254],[175,255],[175,256],175,176,175,155,155,175,176,[572,175],[573,137],572,[573,172],176,175,[155,213],[156,214],[176,215],[175,216],176,175,176,[175,1051],[176,1052],[175,1012],176,156,155,155,156,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[28,1829],[4,1346],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,[15,156],[16,156,998],[15,175,999],[16,156,1000],[15,175],[16,175],[15,572,176],[16,573,197],[15,479],[16,480],[15,552,113],[16,553,175],[15,176],[16,176],[15,572,155],[16,573,156],[15,155],[16,175],[15,176],[16,156],[15,155,273],[16,156,274],[15,155,275],[16,156,276],[15,155],[16,156],[15,155],[16,156],[15,155],[16,156],[15,155],[16,156],[15,155,314],[16,156,315],[15,175],[16,176],[15,175],[16,176],[15,155],[16,155],[15,156,1007],[16,156],[15,552,177],[16,553],[15,553,152],[16,175],[15,176],[16,156],[15,155],[16,175,1008],[15,176],[16,156,253],[15,175,254],[16,158,255],[15,155,256],[16,156],[15,155],[16,175],[15,175,273],[16,176,274],[558,155,275],[559,156,276],[558,155],[559,156],[558,155],[559,175],[558,175,213],[559,175,214],[558,176,215],[559,552,176,216],[558,552,157],[559,553],[558,1565,552,152],[559,553,156],[558,155],[559,156,233],[558,1564,176,234],[559,1565,156,235],[558,155,236],[559,156],[558,155],[559,156],[558,155,140],[559,156,1011],[558,155,1012],[559,156],176,155,175,176,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1345],[4,1348],[4,1704],[4,1745],[4,1746],[4,1343],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1345],[4,1348],[4,1364],1849,[4,1304],[4,1343],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[35,176],[36,176,1018],[35,176,1019],[36,176,1020],[35,175],[36,176],[35,552,135],[36,553],[35,552,92,956],[36,553,93],[35,572,175],[36,573,176],[35,175],[36,176,1038],[35,175,1054],[36,714,176,1055],[35,715,155,1112],[36,156,1113],[35,155,1033],[36,156],[35,175,293],[36,176,294],[35,175,295],[36,176,296],[35,175],[36,176],[35,175],[36,176],[35,175],[36,176,1158],[35,175,1054],[36,176,1115],[35,175,1116],[36,176,1173],[35,175,1176],[36,176,1177],[35,11,155,1149],[36,12,156],[35,175],[36,175,1158],[35,176,1027],[36,176],[35,572,175],[36,573,116],[35,573,192],[36,176],[35,155],[36,155],[35,156],[36,156,1028],[35,175,1149],[36,176,273],[35,175,274],[36,175,275],[35,175,276],[36,155],[35,156],[36,155],[35,155,293],[36,155,294],[578,155,295],[579,156,296],[578,175],[579,159],[578,175],[579,155],[578,175,233],[579,176,234],[578,175,235],[579,572,176,236],[578,572,177],[579,573],[578,572,172],[579,573,155],[578,156],[579,176,253],[578,176,254],[579,176,255],[578,175,256],[579,176],[578,175],[579,176],[578,175],[579,176,1011],[578,175,1012],[579,176],156,175,176,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1747],[552,1368],[553,1764],[552,1765],[553,1766],[4,1363],[4,1747],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[1358,1329],[1359,1747],[1358,1368],[1359,1384],[1358,1869],[1359,1386],[1358,1363],[1359,1747],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,[15,155],[16,156,1038],[15,155,1039],[16,156,1040],[15,11,552,155],[16,12,459,135],[15,460,113],[16,573,93],[15,572,155,976],[16,573,155,1033],[15,155,1034],[16,156],[15,156,1038],[16,155,1058],[15,175,1074],[16,734,176,1075],[15,735,175,1132],[16,176,1133],[15,175,1032],[16,176,1033],[15,156],[16,175,314],[15,155,315],[16,156],[15,155],[16,155],[15,155,1158],[16,175,1172],[15,155,1173],[16,156,1178],[15,155,1074],[16,156,1135],[15,155,1136],[16,156,1193],[15,155,1196],[16,156,1197],[15,31,175,1169],[16,32,176,1170],[15,155,1171],[16,155,1178],[15,156,1047],[16,155],[15,156],[16,552,177],[15,553],[16,552,134],[15,553,176],[16,160],[15,176],[16,156,1048],[15,156,1169],[16,156,1149,293],[15,155,294],[16,11,156,295],[15,12,176,296],[16,175],[15,176],[16,175],[15,175],[16,175,314],[558,175,315],[559,176],[558,155],[559,156],[558,155],[559,175],[558,176,253],[559,176,254],[558,176,255],[559,155,256],[558,552,177],[559,553],[558,552,192],[559,553,175],[558,552,176],[559,553,156,273],[558,176,274],[559,156,275],[558,155,276],[559,156],[558,155],[559,156],[558,155],[559,156,1031],[558,155,1032],[559,156,1033],155,156,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1349],[553,1767],[572,1388],573,572,573,[552,1383],[553,1767],[552,1342],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1349],[1379,1767],[1378,1388],1379,1378,1379,[1378,1383],[1379,1767],[4,1342],[4,1302],4,4,4,4,4,4,4,4,0,0,[35,175],[36,176,1019],[35,175,1059],[36,176,1060],[35,31,552,177],[36,32,479],[35,480,172],[36,156],[35,175,996],[36,175,1053],[35,155,1170],[36,156,1171],[35,175,1058],[36,176,1078],[35,175,1094],[36,176,1095],[35,175,1152],[36,175,1153],[35,176,1052],[36,155,1053],[35,156,1056],[36,155,1057],[35,156,1112],[36,156,1113],[35,156,949],[36,175,950],[35,175,1178],[36,176,1192],[35,175,1193],[36,176,1198],[35,175,1094],[36,155,1155],[35,714,156,1156],[36,715,176,1213],[35,175,1216],[36,155,1217],[35,155,1189],[36,156,1190],[35,175,1191],[36,175,1198],[35,155,1067],[36,175],[35,176],[36,572,136],[35,573],[36,572],[35,573,134],[36,174],[35,175],[36,176,1068],[35,156,1189],[36,155,1169],[35,156,1170,314],[36,31,156,1171,315],[35,32,175,1172],[36,176,1173],[35,175,1174],[36,155,1175],[35,155,1176],[36,156,1177],[578,175,1056],[579,155,1057],[578,155,1149],[579,155],[578,155],[579,175],[578,176,273],[579,156,274],[578,175,275],[579,175,276],[578,572,177],[579,573],[578,572],[579,573,134],[578,572,175],[579,573,155,1007,293],[578,155,294],[579,1625,156,295],[578,155,296],[579,156],[578,175],[579,176],[578,175],[579,176,1051],[578,175,1052],[579,176,1012],156,176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],573,552,553,552,553,572,573,[572,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1359,1358,1359,1358,1358,[1359,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,[15,155],[16,156,1019],[15,155,1020],[16,156],[15,572,135],[16,572,113],[15,573,155],[16,156],[15,155,1016],[16,13,156,1073],[15,14,175,1190],[16,176,1191],[15,155,1078],[16,156,1098],[15,194],[16,195],[15,196],[16,175],[15,176,1072],[16,156,1073],[15,176,1076],[16,175,1077],[15,176,1132],[16,176,1133],[15,176,969],[16,158,970],[15,155,1198],[16,156,1212],[15,13,1213],[16,14,133,1218],[15,155],[16,155],[15,734,156],[16,735,156],[15,155],[16,175],[15,175,1209],[16,176,1210],[15,136,1211],[16,196,1218],[15,175],[16,176],[15,549,136],[16,571],[15,572,552],[16,570,553],[15,574],[16,192],[15,193],[16,176],[15,155,1209],[16,156,1189],[15,176,1190],[16,176,1191],[15,155,1192],[16,156,1193],[15,155,1194],[16,156,1195],[15,175,1196],[16,176,1197],[558,156,1076],[559,155,1077],[558,175,1169],[559,175,1170],[558,175,1171],[559,176,1149],[558,155,293],[559,156,294],[558,552,155,295],[559,553,175,296],[558,552,136],[11,1644,553],[12,1645,552],[559,552],[558,553,134,1158],[559,553,175,1027],[558,1644,552,155,314],[559,1645,553,156,315],[558,552,155],[559,553,156],[558,552,155],[559,553,156],[558,552,155],[559,553,156],[558,155,1031],[559,156,1032],[176,1033],176,176,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,572,573,480,573,552,553,[552,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1378,1290],1379,1378,1379,1378,1379,1378,1378,[1379,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,[35,175],[36,176,1019],[35,175,1020],[36,552,176],[35,553,116],[36,552,192],[35,553,155],[36,156],[35,175],[36,33,176,1093],[35,34,175,1210],[36,176,1211],[35,175,1098],[36,136],35,36,35,[36,133],[35,196],[36,175,1093],[35,175,1096],[36,155,1097],[35,156,1152],[36,155,1153],[35,155,989],[36,156,990],[35,175,1218],[36,136],[35,33],[36,34],[35,192],[36,193],[35,175],[36,176],[35,174],[36,175],[35,176],[36,197],35,36,[35,192],[36,197],[35,569],[36,551],[35,552,572],[36,553,573],[35,574],36,35,[36,11,134],[35,12,176],[36,176,1209],[35,155,1210],[36,156,1211],[35,175,1212],[36,1213],[35,175,1214],[36,176,1215],[35,1216],[36,175,1217],[578,176,1096],[579,175,1097],[578,175,1189],[579,176,1190],[578,176,1191],[579,175,1169],[578,175,1054],[579,155,1055,314],[578,552,156,1056,315],[579,553,136,1057],[578,572,1054,7],8,9,[579,572,1057,10],[578,573,1178],[579,573,155,1047],[578,155],[579,196],[578,196],[579,196],[578,572,155],[579,573,155],[578,572,156],[579,573,176],[578,175,1051],[579,176,1052],[156,1012],176,156,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],573,552,553,552,553,572,573,[552,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[1358,1290],1359,1358,1358,1359,1358,1359,1358,[1359,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,[15,134,1057],[16,176,1039],[15,155,1040],[16,572,156],[15,573,177],[16,459],[15,460,134],[16,176],[15,175],[16,193],[15,194],[16,194],[15,136],16,15,16,15,16,15,[16,192],[15,193],[16,193],[15,194],[16,195],[15,196],[16,196],[15,136],16,15,16,15,16,[15,134],[16,193],[15,193],[16,196],[15,197],16,15,16,15,16,[15,509],[16,571],[15,459],[16,460],[15,514],16,15,[16,31],[15,32,134],[16,175],[15,175],[16,176],[15,136],16,[15,192],[16,197],15,[16,192],[558,196],[559,156],[558,156,1209],[559,175,1210],[558,176,1211],[559,155,1189],[558,156,1074],[559,175,1075],[558,572,176,1076],[559,573,155,1077],[558,156,1074,7],8,9,[559,156,1077,63,10],[558,155,1198],[559,175,1067],[558,197],559,558,559,[558,192],[559,175],[558,552,155],[559,553,156],[558,155],[559,156,1011],[155,1012],155,156,155,156,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],572,573,572,460,[552,1222],[553,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[1378,1248],[1379,1228],1378,1378,1379,1378,[1379,1222],[1378,1261],[1379,1262],[4,1263],4,4,4,4,4,4,4,4,0,0,[35,1077],[36,134,1059],[35,175,1060],[36,176],[35,552,175],[36,459,116],[35,460,113],[36,553,176],[35,135],36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,35,36,[35,529],[36,551],[35,479],[36,480],[35,534],36,35,36,35,[36,192],[35,193],[36,197],35,36,35,36,35,36,578,[579,134],[578,193],[579,194],[578,195],[579,196,1209],[578,1094],[579,1095],[578,1096],[579,1097],[578,1094,7],8,9,[579,1097,83,10],[578,192,1218],[579,197],578,579,578,579,578,[579,192],[578,193],[579,194],[578,195],[579,196,1031],[175,1053],[155,1054],[156,1055],[155,1056],[156,1057],[155,1056],[156,1057],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[1358,1248],[1359,1228],[1358,1163],[1359,1164],[1358,1165],[1359,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,0,0,[15,1097],[16,113,1098],[15,155],[16,156],[15,155],[16,156],[15,155],[16,156],[15,116],16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,[15,549],[16,460],[15,572],[16,573],[15,554],16,15,16,15,16,15,[16,114],[15,93],[16,93],[15,94],[16,95],[15,96],[16,97],558,559,558,559,558,559,558,559,558,559,[558,7],8,9,[559,83,10],558,559,558,559,558,559,558,559,558,559,558,[559,1051],1073,1074,1075,1076,1077,1076,1077,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[1358,1183],[1359,1184],[1378,1185],[1379,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,[35,409],[36,153,409],[35,154,409],[36,155,409],[35,156,410,7],8,9,[36,155,448,63,10],[35,156,449],[36,450],[35,451],[36,407],[35,408],[36,409],[35,449],[36,450],[35,451],[36,407],[35,407],[36,407],[35,451],[36,407],[35,408],[36,409],[35,410],[36,411],[35,447],[36,448],[35,449],[36,450],[35,451],[36,407],[35,407],[36,407],[35,407],[36,407],[35,407],[36,407],[35,407],[36,407],[35,407],[36,408,7],9,[480,9],9,8,9,[36,449,63,10],[35,409],[36,409],[35,409],[36,410],[35,114,411],[36,200,411],[35,155,411],[36,156,411],[35,155,411],[36,156,411],[35,155,411],[36,156,411],[578,448],[579,449],[578,450],[579,451],[578,407],[579,407],[578,407],[579,407],[578,407],[579,407],[578,407,7],8,9,[579,407,83,10],[578,408],[579,409],[578,410],[579,411],[578,447],[579,448],[578,409],[579,409],[578,409],[579,410],[578,411],[579,411],[411,1093],[406,1094],[406,1095],[406,1096],[406,1097],[406,1096],[406,1097],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,0,0,[175,406],[176,406],[175,406],[176,406],[155,406,7],8,9,[156,406,83,10],[155,406],[156,1001],[155,1021],[156,406],[155,406,213],[156,406,214],[175,406,215],[176,406,216],[156,406],[155,406],726,406,406,406,406,406,406,406,[155,406],[156,406],[176,406],[155,406],[156,406],[155,406],[156,1001],[156,1021],[175,406,44],[155,406,45],[156,406,46],[155,406,47],[155,406,48],[156,406,49],[156,406,50],[156,406,51,7],9,9,8,8,9,[175,406,83,10],[155,406],[156,406],[155,406],[156,406],[155,406],[156,406],[176,406],[153,726],[153,406],[153,406],[173,406],[173,406],406,406,406,406,406,1001,1021,406,406,406,[406,7],8,9,[406,83,10],406,406,406,406,406,406,726,406,406,406,406,406,406,406,406,406,406,406,406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[155,406],[156,406],[176,406],[176,406],[175,406,7],8,9,[176,406,83,10],[155,406],[156,1041],[175,1061],[176,406],[175,406,233],[176,406,234],[175,406,235],[175,406,236],[176,406],406,406,406,406,406,[406,18],[406,19],[406,20],406,[175,406],[176,406],[156,748],[155,406,213],[176,406,214],[175,406,215],[155,1041,216],[155,1061],[156,406,64],[155,65],[156,66],[175,67],[175,68],[176,69],[176,70],[155,406,71,7],9,9,9,9,9,[175,406,83,10],[155,406],[156,406],[175,406],[176,406],[155,406],[156,406],[173,406,213],[173,406,214],[173,406,215],[173,406,216],406,406,406,748,406,406,406,1041,1061,406,406,406,[406,7],8,9,[406,83,10],406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[155,427],[156,427],[155,428],[155,429],[156,469,7],8,9,[155,469,103,10],[175,470],[176,471],[156,219,427],[156,220,428],[155,160,429,253],[156,469,254],[155,470,255],[155,471,256],[156,427],[155,427],[175,427],[176,427],[156,471],[155,427],[155,428,38],[156,429,39],[156,430,40],[155,467],[155,468],[175,469],[176,470],[175,471,233],[176,427,234],[156,427,235],[175,427,236],[175,427],[176,428,84],[175,429,85],[176,430,86],[156,431,87],[155,467,88],[156,468,89],[155,469,90],[175,470,91,7],9,9,8,9,9,[155,429,103,10],[156,429],[176,429],[155,429],[156,430],[175,431],[176,431],[155,431,233],[156,431,234],[155,431,235],[156,431,236],[155,431],[156,468],[175,469],[176,470],[175,471],[176,427],[175,427],[176,427],[175,427],[176,428],[175,429],[176,430],[175,431,7],8,9,[176,469,83,10],[175,470],[176,471],[175,427],[176,427],[175,427],[176,428],[175,429],[176,429],[175,429],[176,430],[156,431],[156,467],[156,467],[156,467],[156,467],[156,468],[156,469],[156,470],[156,471],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1346],[4,1347],[4,1725],[4,1726],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1724],[4,1725],[4,1726],[4,1344],[4,1724],[4,1725],[4,1726],[4,1344],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,0,0,[155,937],[156,959],[175,159,960],175,176,176,175,175,155,156,[176,239],[176,240],[175,273],[176,274],[175,275],[156,276],176,175,176,175,153,154,[175,58],[176,59],[155,60],155,156,156,176,[175,253],[175,254],[176,255],[175,256],155,[156,159,104],[176,105],[175,106],[176,107],[175,108],[155,109],[156,110],[36,117,111],[35,509],[36,551],[35,459],[36,460],[35,534],[36,192],176,156,155,[156,219],[175,220],176,[175,253],[176,254],[175,255],[176,951,256],[175,952],[176,934],[155,937],[156,937],[155,937],[156,938],155,156,155,156,155,156,[155,933,7],8,9,[156,938,83,10],155,156,155,156,155,156,[155,931],[156,932],[155,933],[156,934],[155,934],[156,934],[155,934],[156,934],[155,934],[156,934],[156,934],[155,934],[156,934],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1367],[552,1747],[553,1744],[552,1745],[553,1746],[4,1747],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1747],[4,1744],[552,1745],[553,1746],[552,1747],[553,1744],[4,1745],[4,1746],[4,1747],[4,1744],[4,1745],[4,1746],[4,1322],[4,1323],4,4,4,4,0,0,[155,957],[156,979],[155,980],156,155,156,155,156,175,176,155,156,[155,293],[155,294],[156,295],[176,296],156,155,156,155,173,[16,174],[15,195,78],[16,195,79],[15,175,80],175,176,176,156,[155,273],[155,274],[156,275],[155,276],[155,5],[156,124],[156,125],[155,126],[156,127],[155,128],[175,397,129],[177,398,130],[16,137,131],[15,529],[16,459],[15,479],[16,480],[15,554],16,[15,133],176,175,[176,239],[155,240],156,[155,273],[156,274],[155,275],[156,971,276],[155,972,213],[156,954,214],[175,957,215],[176,957,216],[175,957],[176,958],[175,934],[176,934],[175,934],[176,934],[175,934],[176,934],[175,953,7],[176,8],[175,9],[176,958,103,10],[175,937],[176,938],153,154,153,154,[153,951],[154,952,931],[153,953],[154,954],[156,954],[156,954],[156,954],[156,954],[156,954],[156,954],[156,954],[156,954],[156,954],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1348],[553,1368],[552,1386],[553,1387],[572,1767],[573,1764],[572,1765],[573,1766],[552,1767],[553,1387],[552,1342],[4,1343],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1348],[553,1368],[552,1767],[553,1764],[572,1765],[573,1766],[572,1767],[573,1764],[552,1765],[553,1766],[459,1767],[460,1764],[552,1765],[553,1766],[4,1342],[4,1282],4,4,4,4,0,0,[175,977],[176,999],[155,1000],155,156,155,156,[176,159],175,176,175,176,175,[175,314],[176,315],[175,316],176,175,176,175,176,[36,135],35,36,[35,714,134],[715,175],176,175,176,[175,293],[175,294],[176,295],[175,296],[175,25],[155,144],[155,413,145],[156,414,146],[176,415,147],[175,416,148],[176,417,149],[136,418,150],[36,157,151],[35,549],[36,479],[35,480],[36,553],[35,574],36,[35,204],[36,112,205],[175,206],[155,207],[156,208],[155,209],[156,210,293],[176,294],[175,295],[176,991],[175,992,233],[176,974,234],[155,235],[156,236],[155,977],[156,978],[174,954],[155,954],[156,954],[155,954],[156,954],[155,954],[156,973],[155,974],[156,977],[155,978],[156,957],[153,958],[154,937],[174,937],[173,937],[174,937],[173,937],[174,972,932],[173,973,933],[174,974,934],[174,974,937],[156,937],[558,156,934],[559,156,937],[558,156,937],[559,156,934],[558,156,934],[559,156,937],[558,156,937],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1367],[572,1368],[573,1388],572,573,552,553,552,553,572,573,[572,1362],[573,1363],[4,1366],[4,1367],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1367],[572,1368],[573,1388],479,459,552,553,552,553,572,573,479,480,572,573,[552,1281],[4,1282],4,4,4,4,0,0,[155,997],[156,1019],[175,1120],175,176,175,176,156,155,156,155,[156,44],[155,45],[156,46],[155,47],[199,48],[176,49],[176,50],[155,51],156,[15,177],16,15,16,[15,734],[16,735],[15,134],154,155,154,[155,314],[156,315],[155,316],156,[175,164],[175,433,165],[176,434,166],[156,435,167],[155,436,168],[136,437,169],[176,438,170],[16,177,171],[15,569],[16,571],[15,572],[16,573],[15,533],16,[15,224],[16,132,225],[155,226],[175,227],[176,228],[175,229],[176,230],[156,314],[155,951,315],[156,1011],[155,1012,253],[156,254],[175,255],[176,256],175,176,[175,974,257],[175,974,258],[176,974],[175,974],[176,974],[175,974],176,175,176,175,[176,977],[173,978],[174,957,225],[176,957,207],[176,957,208],[153,957],[153,957],[154,973,952],[578,953,837],[579,954,838],[578,974,957,839],[579,957,840],[578,954],[579,957],[578,957],[579,954],[578,954],[579,957],[578,957],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1309],[4,1368],[552,1386],[553,1387],[552,1388],553,552,553,572,573,572,573,552,553,[552,1382],[553,1383],[552,1386],[553,1387],[4,1363],[4,1302],4,4,4,4,4,4,4,4,4,[4,1309],[4,1368],[552,1386],[553,1387],[552,1388],553,552,553,572,573,572,573,552,553,[552,1382],553,552,553,[552,1281],[4,1282],4,4,4,4,0,0,175,[176,1019],[175,1140],176,175,176,175,176,175,176,175,[176,64],[175,65],[176,66],[175,67],[180,68],[97,69],70,[175,71],176,[35,135],36,35,36,35,36,35,[36,134],175,174,175,176,175,155,[156,184],[176,413,185],[175,414,186],[176,415,187],[175,416,188],[176,417,189],[35,196,418,190],[36,197,191],[35,531],[36,573],[35,573],[36,574],35,36,[35,244],[36,152,245],[175,246],[176,247],[175,248],[176,249],[175,250],176,[175,971],[176,953],[175,973,273],[176,274],[155,275],[156,276],174,175,[176,277],[155,278],156,155,[35,13,156],[36,14,155],156,155,156,155,156,[155,225],[156,226],[176,227],[176,228],[173,229],173,[174,991],[558,992,857],[559,993,858],[558,994,859],[559,860],558,559,[558,114],[559,93],[558,94],[559,95],[558,96],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,[4,1288],[4,1289],[552,1290],[572,1163],[573,1164],[572,1165],573,572,573,552,553,479,553,572,573,552,[553,1163],[572,1164],[573,1165],[552,1301],[4,1302],4,4,4,4,4,4,4,4,[4,1288],[4,1289],[552,1290],459,460,572,573,572,573,552,553,552,553,572,573,552,553,572,573,[552,1301],[4,1302],4,4,4,4,0,0,[15,134,1038],[16,174,1039],[179,1040],180,[179,160],180,179,155,153,154,153,[154,84],85,86,87,88,89,[155,90],[156,91],[16,197,5],15,16,15,16,[15,204],[16,1453],[15,1454],16,[15,192],[179,1457],[179,1458],[199,1459],200,175,176,[199,433],[199,434],[175,435],[176,436],[136,437],[15,438],[16,72],15,[16,509],[15,553],[16,514],15,16,[15,264],[16,172,265],[154,266],[155,267],[154,159,268],[155,269],[154,270],[155,271],[154,991],[155,992],[154,293],[175,294],[176,295],[153,281,296],[153,282],154,173,175,[16,176],[15,175],[15,33,176],[16,34,135],[16,134],[15,175],[16,176],175,[176,225],[175,245],[176,246],[175,247],[176,248],[13,175,249],[14,176,250],[175,1011],[578,1012,877],[579,1013,878],[578,879],[579,880],578,[579,92],[578,156],[579,156],[578,156],[579,156],[578,156],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1268],[4,1269],[552,1183],[553,1184],[552,1185],[553,1228],460,553,572,573,572,573,[552,1222],[553,1223],[572,1227],[573,1183],[572,1184],[573,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[479,1249],480,552,553,552,553,572,460,572,573,[552,1222],[553,1223],[572,1227],[573,1227],[572,1227],[573,1224],[4,1262],[4,1263],4,4,4,4,0,0,[35,999],[36,112,1059],[199,1180],178,179,200,199,200,173,174,173,[174,104],105,106,107,108,109,[175,110],[35,177,111],[36,25],35,36,35,36,[35,204],[36,205],[35,206],[36,207],[35,208],[36,112,209],[180,210],[159,1479],180,175,176,175,[175,454],[36,176,455],[35,197,456],[36,457],[35,458],36,35,[36,529],[35,573],[36,534],35,36,[35,284],[36,192,285],[174,286],[175,287],[174,288],[175,219,289],[174,220,290],[175,291],[174,1011],[175,1012],174,[153,314],[154,315],[153,301,316],[173,302],174,173,174,[36,173],[35,155],[36,177],35,36,[35,134],[36,195],174,[154,264],[155,265],[156,266],[155,267],[156,268],[33,155,269],[34,156,270],[155,1031,271],[558,1032,897],[559,1033,898],[558,899],[559,900],578,[579,112],[578,155],[579,155],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1248],[572,1227],[573,1227],[553,1228],[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1247],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1249],553,[552,1163],[572,1164],[573,1165],553,[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1247],[4,1247],[4,1247],[4,1244],[4,1263],4,4,4,4,4,0,0,[15,1019],[16,132,1120],179,198,199,[180,259],[179,260],180,179,180,153,[154,124],125,126,127,128,[397,129],[398,130],[15,177,131],16,15,16,15,16,[15,224],[16,225],[15,226],[16,139,227],[15,228],[16,132,229],[55,200,230],[56,199,1499],200,[175,213],[176,214],[199,378,215],[200,216],[16,117,475],[15,476],[16,477],[15,478],16,15,[16,549],[15,460],[16,554],15,16,[15,55,304],[16,56,134,305],[154,306],[155,307],[154,397,308],[155,398,239,309],[154,240,310],[155,311],[156,1031],[155,1012],154,173,174,[153,321],[153,322],[154,323],153,154,[16,174],[15,175],[16,176],[15,116],16,13,14,[15,134],[174,284],[579,175,285],[578,176,286],[579,175,287],[578,176,288],[579,175,289],[578,176,290],[579,175,1051,291],[578,176,1052],[579,1053],[578,1033],579,558,[559,132],[558,175],[559,175],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1267],[4,1268],[4,1247],[4,1247],[4,1269],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,[4,1267],[4,1267],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1224],[572,1183],[553,1184],[553,1185],[553,1224],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,[35,978],[36,152,958],[199,937],[200,938],199,[200,279],[178,280],160,199,200,173,[174,144],[413,145],[414,146],[415,147],[416,148],[417,149],[36,418,150],[35,177,151],36,35,36,35,[36,13],[35,14,244],[36,245],[35,246],[36,247],[35,248],[36,152,249],[75,180,250],[76,179],180,[179,233],[180,234],[160,235],[180,236],[36,137],35,36,35,36,35,[36,569],[35,480],[36,574],35,36,[35,75,413,324],[36,76,414,325],[133,415,326],[193,416,327],[174,417,328],[175,418,329],[174,118,330],[175,331],[176,1051],[175,1053,313],[174,1033],153,[558,135],[559,341],[558,342],[559,133,343],173,174,[36,174],[35,155],[36,173],[35,177],36,33,34,35,[558,172,304],[559,155,305],[558,156,306],[559,155,307],[558,156,308],[559,155,309],[558,156,310],[559,155,1071,311],[558,156,1072],[559,155,1073],[558,1032],[559,1033],578,[579,152],[578,155],[579,155],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1244],[4,1203],[4,1204],[4,1205],[4,1244],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,4,0,0,[15,96],[16,173,978],[15,179,957],[178,958],[179,937],[180,937],[198,937],[199,118,938],179,180,179,[16,117,164],[15,433,165],[16,434,166],[15,435,167],[16,436,168],[15,437,169],[16,438,170],[15,197,171],16,15,16,15,[16,33],[15,34,264],[16,265],[15,266],[16,267],[15,268],[16,173,269],[200,270],199,200,[199,253],[200,254],[199,255],[200,256],[16,157],15,16,15,16,15,[16,589],[15,591],[16,594],15,16,[15,433,344],[16,434,345],[435,1661],[436,1662],[192,437,1663],[155,438,349],[154,350],[155,351],[154,1071],[155,1052],[154,992],173,[578,116],[579,361],[578,362],[579,113,363],153,154,176,[15,175],[16,153],[35,197],36,15,16,[15,114],[154,324],[175,325],[176,326],[175,327],[176,328],[175,329],[176,330],[175,1091,331],[176,1092,5],[175,1093],1052,[579,992],558,[559,172],[558,175],[559,175],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[174,213],[180,214],[199,977,215],[198,978,216],[199,957],[200,957],[199,957],[200,958],[199,980],200,199,[36,137,184],[35,413,185],[36,414,186],[35,415,187],[36,416,188],[35,417,189],[36,418,190],[35,191],36,35,36,35,36,[35,284],[36,285],[35,286],[36,287],[35,133,288],[36,193,289],[15,194,290],[16,179],180,[179,273],[180,274],[179,275],[180,276],[36,177],35,36,35,36,35,36,35,36,35,36,[35,433,364],[36,434,365],[35,435,1681],[36,436,1682],[35,437,1683],[36,192,438,369],[35,193,370],[36,193,371],[35,174],[36,175,1011],[35,155,1012],[36,173],[578,174],[579,93],[578,96],[579,173],173,174,156,155,[36,177],15,16,35,[36,113],[36,174],[154,344],[155,345],[156,1661],[155,1662],[156,1663],[155,349],[156,350],[155,351],[156,25],155,1011,[579,1012],[578,113],[579,156],[578,155],[579,155],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[174,233],[200,234],[179,235],[180,236],178,160,[160,998],[178,999],[179,1160],180,179,[16,157],[15,433],[16,434],[15,13,435],[16,14,436],[15,437],[16,438],15,16,15,16,15,16,[15,304],[16,305],[15,306],[16,307],[15,308],[16,397,309],[15,398,310],[16,134],200,[159,293],[200,294],[199,295],[200,296],[16,136],[15,11],[16,12],15,16,15,16,15,16,15,16,[15,453,384],[16,454,385],[15,455,386],[16,456,387],[15,457,388],[16,458,389],[15,390],[16,391],[15,53,134],[16,54,174,1052],[155,992],175,176,175,176,175,176,175,176,175,176,[36,97],35,36,[15,172],173,[174,364],[175,365],[176,1681],[175,1682],[176,1683],[175,369],[176,370],[175,371],176,[175,971],[176,972],[156,973],156,156,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1724],[4,1725],[4,1726],[4,1346],[4,1724],[4,1725],[4,1726],[4,1346],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1724],[4,1725],[4,1726],[4,1344],[4,1724],[4,1725],[4,1726],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[174,253],[199,254],[200,255],[200,256],198,199,[199,281],[198,978,282],[199,979,283],[200,980],199,[36,177],35,[36,454],[35,33,455],[36,34,456],[35,457],[36,458],35,36,35,36,35,36,[35,596,324],[36,413,325],[35,414,326],[36,415,327],[35,416,328],[36,417,329],[35,418,330],36,[35,112],179,[180,646,314],[179,315],[35,117,316],36,[35,31],[36,32],35,36,35,36,35,36,35,[36,11],[35,12,473],[36,474],[35,475],[36,476],[35,477],[36,478],35,36,[35,73],[36,74,112,1011],[175,1012],155,[156,1035],[155,1036],[156,1037],[154,1038],[155,1056],[156,1057],[156,1033],[155,1034],[156,1035],[36,177,955],13,14,[35,112,1008],155,[156,384],[155,385],[156,386],[155,387],[156,388],[155,389],[156,390],[155,391],156,[155,1011],[175,1012],[176,1013],156,156,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[4,1744],[4,1745],[4,1746],[552,1366],[553,1744],[552,1745],[553,1746],[4,1366],[4,1744],[4,1745],[4,1746],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1744],[552,1745],[553,1746],[552,1747],[553,1744],[4,1745],[4,1746],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,[174,273],[200,274],[180,275],[180,276],179,180,[179,301],[180,998,302],[179,999,303],[180,1000],[15,179],[16,136],[15,378],16,[15,475],[16,476],[15,477],[16,478],15,16,15,16,15,16,[15,344],[16,433,345],[15,434,1661],[16,435,1662],[15,436,1663],[16,437,349],[15,438,350],16,[15,152],199,200,199,[15,137],16,15,16,15,16,15,16,15,16,15,[16,31],[15,32],16,15,[16,213],[15,214],[16,215],[15,216],16,15,[16,132,1011],[155,1053],[175,1054],[176,1055],[175,1056],[176,1057],[154,1058],[175,155,1076],[176,156,1077],[176,1053],[175,1110],[176,1111],[16,177,975],33,34,[15,132,1028],[175,1033],[176,1034],[175,1035],176,175,176,175,176,175,176,[175,1031],[155,1032],[156,1033],155,156,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,[4,1328],[4,1348],[4,1368],[552,1386],[553,1764],[552,1765],[553,1766],[572,1386],[573,1764],[572,1765],[573,1766],[552,1386],[553,1764],[552,1765],[552,1766],[4,1363],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1349],[553,1764],[572,1765],[573,1766],[572,1767],[573,1764],[552,1765],[553,1766],[552,1342],[4,1302],4,4,4,4,4,4,4,4,0,0,[174,293],[199,294],[200,295],[200,296],199,[200,118],[199,321],[200,998,322],[199,999,323],[200,1000],[35,117],[36,478],35,36,35,36,35,36,35,[36,53],[35,54],36,35,[36,714],[35,715,364],[36,596,413,365],[35,414,1681],[36,415,1682],[35,416,1683],[36,417,369],[35,418,370],[36,113],180,179,155,156,[35,157,474],36,35,36,35,36,35,36,35,36,35,36,[35,92],[36,93],[35,94],[36,96,233],[35,116,234],[36,235],[35,236],36,35,[36,1072],[35,175,1073],[36,176,1074],[175,1075],[176,1076],[153,1077],[153,1078],[192,175,1096],[155,176,1097],[156,1073],[155,1130],[35,156,1131],[36,177,995],55,56,[35,152,1048],[155,1053],[156,1110],[155,1111],[156,1112],[155,1113],[156,1831],[155,1351],[156,1352],[155,1353],[156,1033],[155,1034,1051],[175,1052],[176,1053],175,176,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1328],[4,1348],[4,1368],[552,1388],572,573,572,573,552,553,552,553,572,573,572,573,[552,1383],[4,1363],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],573,552,553,552,553,572,573,[572,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,174,[179,314],[178,315],[179,119,316],179,[180,119],[179,341],[180,1018,342],[156,1019,343],[156,1020],[15,157],[16,52],[15,11,53],[16,12],15,16,15,16,15,[16,73],[15,74],16,15,[16,734],[15,735,384],[16,433,385],[15,596,434,386],[16,92,435,387],[15,94,436,388],[16,96,437,389],[15,93,438,390],199,200,199,175,176,[15,154],[16,96],[15,116],16,15,16,15,16,15,16,15,[16,113],179,180,179,[180,253],[15,179,254],[16,115,255],[15,256],16,15,[16,1092],[15,1093],[16,1094],[15,1095],[16,1096],[15,1097],[16,173,1098],174,153,[154,1093],[175,1150],[15,153,1151],[16,197,1067],75,76,[15,172,1068],[154,1073],[176,1130],[175,1131,18],[176,1132,19],[175,1133,20],[176,1851],[16,175,1371],[176,1372],[175,1373],[176,1053],[175,1054,1071],[155,1033,1072],[156,1073],[155,1032],[156,1033],155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1309],[4,1368],[552,1388],553,552,553,552,460,572,573,572,573,552,553,[552,1382],553,552,[553,1383],[4,1363],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,572,573,572,459,460,553,[552,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,174,199,198,199,200,199,[199,361],[156,1038,362],[156,1039,363],[156,1160],[35,177],[36,72],[35,31,73],[36,32],35,36,35,36,35,36,35,36,35,36,35,36,[35,114,454],[596,179,455],[180,456],[178,457],[179,458],179,159,179,155,156,173,[156,626],173,[36,115],35,36,35,36,35,36,35,[36,112],199,200,199,[200,273],[35,199,274],[36,200,275],[35,93,276],[36,116],[35,11],[36,12],35,36,35,36,35,[36,133],154,173,174,155,[35,135],36,35,36,[35,192],[36,174,1093],[156,1210],[155,1211,38],[156,1152,39],[155,1153,40],[35,156,1871],[13,1391],[14,1392],[36,1393],[156,1073],[155,1133,1091],[175,1053,1092],[176,1033,1093],[175,1052],[176,1053],[175,1033],175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,[4,1288],[4,1289],[552,1290],572,480,573,573,572,573,552,553,552,553,572,573,479,573,572,573,[552,1301],[4,1302],4,4,4,4,4,4,4,4,[4,1288],4,4,4,4,4,[4,1289],[572,1290],573,552,553,552,479,480,573,[552,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,174,159,180,179,[179,1158],[179,949],[180,950],[156,1058],1059,[156,1218],[15,714,136],[16,715],15,16,15,16,15,16,15,16,15,16,15,16,15,[16,113,378],[15,200],[199,475],[200,476,139],[198,477],[199,478],199,155,156,175,176,156,154,153,[16,177],15,16,15,16,15,16,15,[16,132],[179,478,18],[180,19],[178,20],[179,179,293],[15,179,179,294],[180,295],[179,296],180,[15,31,97],[16,32],15,16,15,16,13,14,[15,112],153,154,175,[15,116],16,15,16,15,[16,134],[15,176],[16,175,58],[176,59],[175,60],[15,176],[33,116],34,[16,113],[176,1188],[175,1213],[155,1073],[156,992],[155,1072],[156,1073],[155,1032],[155,1033],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,[4,1268],[4,1269],[552,1227],[553,1227],[552,1227],[553,1228],552,553,572,573,572,573,[552,1222],[553,1223],[572,1227],[573,1227],[572,1227],[573,1227],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],572,573,572,573,[552,1222],[553,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,0,0,174,199,200,[179,1158],[200,1159],[199,969],[200,970],[117,1078],[35,156,1079],[36,136,1080],[35,734],[36,735],35,36,35,36,35,36,35,36,35,36,35,[36,92],[35,96,478],[36,179],[35,180],158,180,179,180,179,175,176,175,175,176,155,156,[36,177],35,36,35,36,35,36,35,[36,152],[199,38],[200,39],[55,198,40],[56,199],[179,178,314],[179,179,315],[199,316],200,[35,199],[36,96],[35,97],36,[35,1453],[36,1454],[33,1455],[34,1456],[35,132,1457],[173,1458],[174,1459],155,156,[36,97],35,[36,92],[35,116],36,[35,172],[36,155,78],[156,79],[155,80],[35,156],[36,153],[35,93],[36,155],156,155,[175,991],[176,992],[175,1092],[176,1093],[175,1052],[175,992],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,[4,1268],[4,1247],[4,1247],[4,1247],[4,1248],[572,1227],[573,1227],[553,1228],[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1247],[4,1247],[4,1247],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],[552,1163],[553,1164],[552,1165],[553,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,0,0,174,179,[180,1158],[179,1178],[180,1179],[160,989],[180,990],[156,1098],[15,197,1099],[16,1100],15,[16,44],[15,45],[16,46],[15,47],[16,48],[15,375,49],[16,376,50],[15,51],[16,378],15,16,[15,113],[16,199],200,[199,259],[200,260],199,[200,213],[199,214],[196,215],[16,195,216],176,[13,174],[14,154],173,[15,193],[53,175],[54,176],[16,197],15,16,15,16,[15,92],[16,94],[15,96],173,[179,58],[16,180,59],[75,179,60],[76,180],198,199,179,180,179,173,[15,117],16,[15,1473],[16,1474],[15,1475],[16,1476],[15,152,1477],[173,1478],[174,1479],156,155,[16,177],55,[56,133],[15,197],[16,92],174,154,155,156,155,156,155,156,[155,951],[156,952],[155,953],[156,973],155,156,[155,1011],[155,1012],156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1267],[4,1268],[4,1247],[4,1247],[4,1269],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,[4,1267],[4,1267],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1267],4,4,[4,1268],[4,1269],[572,1183],[573,1184],[572,1185],[4,1262],[4,1263],4,[4,1267],[4,1267],4,4,4,4,4,4,4,0,0,[35,174],[36,199,1118],[200,1119],[199,1198],[200,1199],199,200,[36,177],35,[36,53],[35,54],[36,374,64],[35,65],[36,66],[35,67],[36,68],[35,375,69],[36,376,70],[35,377,71],[36,378],[35,11,92],[36,12,96],[35,180],[36,179],[180,139],[179,279],[180,280],179,[180,233],[135,234],235,[36,236],[35,192],[36,33,194],[35,34,194],[36,135],35,[36,73,134],[35,74,197],36,35,36,35,[36,114],179,180,179,[36,180],[35,199,78],[200,79],[199,80],200,[199,118],200,199,200,199,156,[35,157],[36,1492],[35,1493],[558,1494],1495,1496,[172,1497],[176,1498],[175,1499],176,175,[36,176],[75,116],76,35,[36,172],173,174,175,176,175,176,175,176,[175,971],[176,972],[175,973],176,175,[176,971],[175,972],[175,973],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,0,0,[15,174],[16,179,1138],[15,180,1019],[16,179,1020],180,179,180,[16,177],15,[16,73],[15,74,393],[16,394,84],[15,85],[16,86],[15,87],[16,88],[15,395,89],[16,396,90],[15,397,91],[16,398],[15,31,172],[16,32,199],[15,200],[16,199],200,158,200,199,[174,253],[115,254],255,[16,256],15,[16,44],[15,45],[16,46],[15,47],[16,48],[15,49],[16,50],[15,51],16,[15,114],153,199,200,199,200,[15,178],179,179,180,179,180,178,179,179,156,[15,177],[16,1512],[16,1513],1514,1515,1516,[192,1517],[155,1518],[156,1519],156,155,156,[15,155],[16,94],[15,95],[16,156],155,156,155,156,155,156,155,156,[155,991],[156,992],[155,993],156,155,[156,991],[155,992],155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],0,0,[35,174],[36,180,1158],[35,179,1039],[159,406,1040],[200,649],[180,669],[179,747],175,[35,116],36,[35,413],[36,414,104],[35,105],[36,106],[35,107],[36,108],[35,109],[36,110],[35,417,111],[36,418],[35,134],[36,196],[35,180],[36,179],180,179,180,154,[155,273],[200,274],[93,275],[36,116,276],35,[36,64],[35,65],[36,66],[35,67],[36,68],[35,69],[36,70],[35,71],[36,113],153,179,180,179,179,199,198,199,199,200,199,200,[198,139],199,199,176,[35,197],[36,1532],[35,1533],1534,1535,1536,1537,[175,1538],[176,1539],176,175,153,154,153,154,153,154,[176,213],[175,214],[176,215],[175,216],176,175,176,[175,1011],[176,1012],[175,1013],176,175,[176,1011],[175,1012],155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],0,0,[15,174],[16,200,1019],[15,489,199,1059],[494,406,1060],406,748,[15,199,648],200,175,[16,116],[15,433],[16,434,124],[15,125],[16,126],[15,127],[16,128],[15,129],[16,130],[15,437,131],[16,438],15,16,[15,134],[16,199],200,199,200,174,[175,293],[180,294],[179,295],[180,296],[15,97],[16,84],[15,85],[16,86],[15,87],[16,88],[15,89],[16,90],[15,91],[16,172],179,199,200,199,199,200,180,180,[15,179,179,257],[180,258],179,180,179,180,179,[16,136],15,[16,1552],1553,1554,1555,[16,1556],[397,1557],[192,398,1558],[155,1559],156,155,173,174,173,174,173,174,[156,233],[155,234],[156,235],[155,236],156,155,156,[155,1031],[156,1032],[155,1033],156,155,[156,1031],[155,1032],[175,1033],176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1345],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1345],[4,1344],[4,1345],[4,1344],[4,1345],[4,1344],[4,1345],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[35,174,1118],[36,180,999],[35,589,406,1000],[514,406],406,[180,628],179,180,179,180,[35,97,413],[36,414,144],[35,145],[36,146],[35,147],[36,148],[35,149],[36,150],[35,417,151],[36,418],35,36,35,[36,172],199,200,199,200,199,[200,314],[199,315],[200,316],[35,199],[36,115,104],[35,105],[36,106],[35,107],[36,108],[35,109],[36,110],[35,111],[36,112],155,199,179,158,200,199,178,179,[179,199,277],[200,278],199,200,199,[36,200],[35,135],36,35,[36,1572],[413,1573],[414,1574],[415,1575],[416,1576],[417,1577],[418,1578],[35,133,1579],176,175,156,156,153,154,153,154,[176,253],[175,254],[176,255],[175,256],176,175,176,[175,1051],[176,1052],[175,1053],[176,1033],175,[176,1051],[175,1052],[155,1053],[156,1033],155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[573,1364],[572,1365],[573,1747],[573,1367],[573,1364],[4,1365],[4,1747],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1364],[4,1365],[4,1364],[4,1365],[573,1747],[572,1365],[573,1364],[572,1365],[573,1747],[573,1365],[573,1366],[552,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,[15,174,1138],[16,200,999],[15,406,1000],406,406,[200,668],199,[200,18],[178,19],[179,20],[199,433],[16,115,434,164],[15,165],[16,166],[15,167],[16,168],[15,169],[16,170],[15,437,171],[16,438],[15,92],[16,94],[15,96],[16,173],179,180,179,180,179,180,179,[16,180,5],[15,179,5],[16,117,124],[15,413,125],[16,414,126],[15,415,127],[16,416,128],[15,417,129],[16,418,130],[15,131],[16,132],179,179,180,179,180,179,178,179,179,180,179,180,[15,196],[16,136],15,[16,52],[15,53],[16,1592],[433,1593],[434,1594],[435,1595],[436,1596],[437,1597],[438,1598],[15,1599],[16,112],155,173,174,173,174,173,174,[156,273],[155,274],[156,275],[155,276],[156,141],[155,142],[156,143],[155,1071],[156,1072],[155,1052],[156,1012],155,156,[155,1051],[175,1052],[176,1012],175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[552,1368],[553,1384],[553,1385],[552,1767],[572,1387],[552,1384],[553,1385],[552,1767],[553,1387],[552,1342],[4,1343],[4,1344],[4,1345],[4,1346],[4,1347],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1348],[553,1349],[552,1384],[553,1385],[552,1384],[553,1385],[553,1767],[552,1385],[553,1384],[553,1385],[552,1767],[572,1385],[573,1386],[572,1387],[573,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,0,0,[174,1158],[180,1039],[406,1040],[198,629,628],[199,629],180,179,[180,38],[198,39],[199,40],179,[36,117,454,184],[35,415,185],[36,416,186],[35,416,187],[36,415,188],[35,455,189],[36,456,190],[35,457,191],[36,114,458],[35,179],[36,180,213],[35,179,214],[36,180,215],[199,216],200,199,200,199,200,199,[36,200,119,25],[35,199,25],[36,137,144],[35,433,145],[36,434,146],[35,435,147],[36,436,148],[35,437,149],[36,438,150],[35,151],[36,132],179,199,200,178,179,199,198,199,200,199,199,[36,136],35,36,35,[36,72],[35,73],[36,1612],[413,1613],[414,1614],[415,1615],[55,416,1616],[56,417,1617],[418,1618],[35,1619],[36,132],175,173,[174,160],153,154,176,175,[176,293],[175,294],[176,295],[175,296],[176,161],[175,162],[176,163],175,[176,1010],[175,991],[176,992],175,176,175,[155,1011],[156,1012,213],[155,214],[156,215],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[573,1349],[572,1388],573,553,553,572,572,480,572,573,[572,1362],[573,1363],[4,1747],[4,1365],[4,1366],[4,1367],[4,1366],[4,1367],[4,1364],[4,1365],[4,1747],[4,1367],[572,1368],[573,1369],572,573,572,573,573,572,573,553,553,572,480,552,[553,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,0,0,[174,1019],[200,1059],[199,1060],[200,257],[199,258],178,179,[178,58],[179,59],[200,60],199,[16,137,474],[15,475],[16,454],[15,11,455],[16,12,456],[15,457],[16,476],[15,114,477],153,199,[178,233],[179,234],[200,235],[179,204,236],[180,205],[179,206],[180,207],[179,208],[180,209],[179,210],[16,180,211],[15,179],[16,157,164],[15,413,165],[16,414,166],[15,415,167],[16,416,168],[15,417,169],[16,418,170],[15,171],[16,132],155,179,180,[198,213],[199,214],[159,215],[180,216],179,179,179,180,[16,97],15,16,15,16,15,[16,1632],[15,433,1633],[16,434,1634],[435,1635],[75,436,1636],[15,76,437,1637],[16,438,1638],[15,1639],[16,152],155,156,155,173,174,156,155,156,[155,314],[156,315],[155,316],[156,181],[153,182],[154,183],155,156,[155,1011],[156,1012],155,156,[155,952],[175,953],[176,973,233],[175,234],[176,235],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[572,1290],552,572,573,573,552,552,553,552,553,552,[553,1383],[552,1767],[553,670,1385],[406,573,650,1386],[406,1387],[406,1386],[406,1387],[406,1384],[553,648,1385],[552,1767],[553,1387],[552,1388],[553,1389],552,553,552,553,572,552,572,573,573,552,553,572,573,[573,1362],[4,1342],[4,1322],[4,1323],4,4,4,4,4,0,0,[200,1119],[199,1120],[179,1200],[180,277],[179,278],198,199,[198,78],[199,79],[180,80],179,[36,157],35,[36,474],[35,31,475],[36,32,476],[35,92,477],[36,11,95],[35,12,153],179,180,[198,253],[199,254],[199,255],[200,224,256],[200,225],[199,226],[200,227],[199,228],[200,229],[199,230],[36,200,231],[35,199],[36,177,184],[35,433,185],[36,434,186],[35,435,187],[36,436,188],[35,437,189],[36,438,190],[35,191],[36,152],175,179,200,[199,233],[200,139,234],[199,235],[200,236],179,200,199,[200,5],[36,117],35,[36,11],[35,12],36,35,36,35,[36,454],[35,455],[36,456],[35,457],[36,458],35,[36,172],175,176,155,156,175,153,154,176,175,176,[175,241],[176,201],[173,202],[174,203],175,[176,952],[175,953],[176,973],175,[176,971],[175,972],[155,973],[156,253],[155,254],[156,255],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[573,1290],572,573,573,[572,1221],[572,1241],[572,1242],[573,1224],[572,1228],573,572,573,572,[573,746,1420],[406,573,690,1420],[406,1420],[406,1420],[406,1420],[406,1420],[573,648,1420],572,573,572,573,572,573,479,573,573,572,573,573,572,572,573,552,553,552,[553,1362],[4,1342],[4,1302],4,4,4,4,4,0,0,[180,1119],[179,1120],[199,1220,213],[178,214],[179,215],[200,216],199,[200,119],199,200,199,[16,177],15,16,15,[16,113],179,[31,180],[32,179],199,200,[199,273],[199,274],[200,275],[180,244,276],[180,245],[179,246],[180,247],[179,248],[180,249],[179,250],[16,180,251],[15,179],[16,136],15,[16,454],[15,13,455],[16,14,456],[15,457],[16,458],15,[16,133],173,173,[173,139],[179,253],[15,180,254],[178,255],[179,256],179,180,160,[180,25],[16,137],15,[16,31],[15,32],16,15,16,[15,378],16,[15,475],[16,476],[15,477],[16,478],15,[16,192],[15,193],[16,194],[15,175],176,[155,158],173,174,154,153,154,[155,261],156,[155,746],[156,649,951],[155,690,971],[156,972],[155,973],156,155,[156,991],[155,992],175,[176,273],[175,274],[176,275],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[553,1270],573,573,552,[553,1261],[4,1262],[4,1244],[4,1248],[553,1228],552,553,552,[553,670,1440],1460,1440,1460,1440,1440,[553,1460],552,553,[552,1223],[553,1224],[552,1224],[553,1224],[552,1227],[553,1228],573,553,573,[573,1223],[552,1224],[553,1227],[552,1228],572,573,572,573,[4,1281],[4,1282],4,4,4,4,4,0,0,[174,1139],[180,1020],[179,233],[198,234],[199,235],[180,236],179,180,179,180,179,[36,136],35,36,35,[36,112],199,200,155,199,179,[158,293],[200,294],[199,295],[158,264,296],[200,265],[199,266],[200,267],[200,268],[178,269],[179,270],[36,199,271],[35,200],36,[35,378],36,[35,33,475],[36,34,476],[35,477],[36,478],35,36,[35,134],[36,194],173,[173,273],[200,274],[198,275],[199,276],199,200,199,[200,213],[36,157,214],[35,215],[36,216],35,36,35,[36,478],35,36,35,36,35,36,35,36,35,36,[35,134],176,175,176,173,174,173,174,[175,746],[176,649],[175,690],[176,406],[175,406,991],[176,992],[175,158],176,[175,933],[176,972],[175,973],155,[156,293],[155,294],[156,295],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1270],573,572,[573,1281],[4,1282],[4,1264],[4,1268],[4,1248],[572,1227],[573,1228],572,[573,670,1480],[406,1480],[406,1480],[406,1480],[406,1480],[406,1480],[406,573,688,1480],[406,573,669],[573,747,1223],[4,1243],[4,1244],[4,1244],[4,1244],[4,1247],[4,1248],[573,1227],[573,1227],[573,1227],[4,1243],[4,1244],[4,1247],[4,1248],[553,1249],552,553,552,[553,1281],[4,1282],4,4,4,4,4,0,0,[174,1119],[174,1120],[199,253],[200,254],[199,255],[200,256],[15,199],200,199,200,[15,135],15,16,15,16,[16,132],179,180,179,179,180,179,[180,314],[179,315],[179,284,316],[179,180,285],[179,179,286],[180,287],[179,138,288],[198,289],[199,290],[16,179,291],[15,180],16,15,[16,11],[15,12],16,15,16,15,16,15,16,[15,133],[16,193,293],[15,194,294],[179,295],[180,296],179,180,179,[180,233],[16,507,177,234],[15,235],[16,236],15,16,15,16,15,16,15,16,15,16,15,16,15,16,15,[16,192],[15,193],[16,194],[15,155],[16,156],[15,155,746],[155,649],[156,690],406,406,[406,971],[175,972],[156,973,952],[155,937],[156,937],[155,953],[156,973],155,155,156,[155,314],[156,315],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[573,1290],573,552,[553,1301],[4,1302],[4,1284],4,[4,1268],[4,1247],[4,1248],[4,1227],[4,1227],[406,1227],[406,1227],[406,1227],[406,1227],[406,1227],[406,1227],[406,1227],[4,1243],[4,1263],4,4,4,[4,1267],[4,1268],[4,1247],[4,1247],[4,1247],[4,1263],[4,1264],[4,1267],[4,1289],[573,1290],572,573,572,[573,1281],[4,1282],4,4,4,4,4,0,0,[180,1139],[174,1020],[178,273],[179,274],[179,275],[180,276],[35,179],180,[35,196],[36,136],35,[35,52],36,35,36,[36,152],199,200,179,199,200,179,179,199,[179,304],[179,305],[199,306],[200,307],[199,308],[200,309],[199,310],[36,199,311],[35,136],[36,72],35,[36,31],[35,32],36,35,36,35,36,35,36,35,36,[35,314],[36,134,315],[200,316],159,200,199,[200,253],[36,507,197,254],[35,508,255],[36,256],[35,13],[36,14,92],[35,93],[36,94],[35,95],[36,96],[35,97],36,35,36,35,36,35,36,35,36,35,36,[35,192],[36,193,952],[35,194,934],[406,934],[406,934],[406,934],[406,934],[175,953],[175,973,933],[176,972],[175,957],[176,957],[175,973],176,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[553,1310],573,572,[573,1301],[4,1302],4,4,4,4,[4,1268],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[553,1330],552,[479,1241],[552,1242],[4,1243],[4,1263],4,4,4,4,4,0,0,[179,1159],[199,1040],[198,293],[178,294],[179,295],[199,296],[15,199],[16,136],15,16,15,[53,72],[54,92],[16,94],[15,96],173,179,180,[155,219],[179,220],180,179,180,159,[179,324],[180,325],[159,326],[180,327],[179,328],[179,329],[179,330],[180,331],[15,97],16,15,16,15,16,15,16,15,16,15,16,15,16,15,16,[15,112],179,180,179,[550,117,273],[16,551,274],[15,550,275],[16,494,276],[15,33],[16,34,112],175,176,[156,160],155,156,[16,93],[15,116],16,15,16,15,16,15,16,[15,974],[16,977],[15,971],[16,175,972],[15,175,954],[175,954],[175,954],[175,954,931],[175,954,932],[175,973],[155,991],[156,992],155,156,155,156,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[553,1310],480,553,[552,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[572,1349],[573,1350],572,[572,1261],[4,1262],[4,1263],4,4,4,4,4,4,0,0,[174,1059],[159,406,1060],[180,688],[198,747,314],[199,315],[179,316],[35,180],[36,97],35,36,35,[73,114],179,180,179,180,199,200,[175,239],[179,240],200,199,200,[199,119],[199,344],[200,345],[199,346],[200,347],[179,348],[200,349],[199,350],[200,351],[35,117],36,35,36,35,36,35,[36,55],[35,56],36,35,36,35,36,35,36,[35,152],199,200,199,[35,570,137,293],[36,550,294],[35,551,295],[36,594,296],[35,11],[36,12,152],156,175,176,175,176,175,176,[36,93],[35,93],[36,116],35,36,35,36,35,36,[35,991],[36,175,992],[35,175],175,175,[175,951],[175,933],[176,934],[175,972],[176,973],175,176,175,176,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[553,1330],572,573,[572,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1346],[4,1347],[4,1346],[4,1347],[4,1348],[4,1368],[552,1350],553,552,[553,1281],[4,1282],4,4,4,4,4,4,4,0,0,[406,1079],[406,1200],406,[179,688],[200,669],[199,747],[15,200],[16,117],15,16,[15,114],153,199,200,199,200,179,180,173,173,173,179,180,179,[179,433,364],[179,180,434,365],[179,435,366],[180,436,367],[179,437,368],[180,438,369],[160,370],[180,371],[15,137],16,15,16,15,16,15,[16,75],[15,76],16,[15,114],[16,115],15,16,15,[16,113,44],[15,180,45],[179,46],[180,47],[179,48],[593,157,49,313],[593,50,314],[15,594,51,315],[16,316],[15,31],[16,32,133],176,155,156,155,156,155,156,155,156,155,[15,97],16,15,16,[15,974],[16,977],[15,991],[155,992],156,155,156,[155,971],[156,953],[155,954],[156,973],155,155,156,155,156,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[572,1349],[573,1350],552,553,[553,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1366],[552,1367],[553,1747],[552,1367],[553,1368],[553,1388],572,[573,1241],[572,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,0,0,406,406,406,406,406,[160,648],[35,180],[36,137],35,[36,113],153,[179,141],[180,142],[179,139,143],179,199,199,200,199,178,179,173,200,199,[173,453,384],[200,454,385],[179,199,455,386],[200,456,387],[199,457,388],[200,458,389],[199,390],[200,391],[35,157],36,35,36,35,36,35,36,[35,92],[36,93],155,156,[35,96],[36,96],[35,96],[36,199,64],[200,65],[199,66],[200,67],[199,68],[570,136,69],[571,70],[35,71],36,35,36,[35,192],175,[176,44],[175,45],[176,46],[175,47],[176,159,48],[175,49],[176,50],[175,51],[35,177],36,35,36,35,36,[35,991],[175,992],176,175,176,[175,991],[176,992],[175,158,974],[176,1035],[175,1036],[175,1037],176,175,176,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[572,1310],573,572,573,[573,1321],[4,1322],[4,1323],[4,1324],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[553,1368],[573,1386],[572,1387],[573,1767],[572,1387],[573,1388],573,573,[552,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,0,0,406,406,406,406,[200,628],199,[15,200],[16,157],15,[16,172],179,[199,161],[200,162],[199,163],199,200,178,179,179,198,199,[180,139],174,179,[180,473],[174,474],[179,475],[180,476],[179,477],[180,478],179,180,[15,177],16,15,16,15,16,15,[16,114],179,155,155,156,180,179,180,[179,84],[159,85],[179,86],[196,87],[197,88],89,90,[15,91],16,15,[16,11],[15,12],[16,134],[15,155,64],[16,156,65],[155,66],[156,67],[156,68],[155,69],[156,70],[155,71],[15,117],16,15,16,15,16,[15,991],[155,992],[156,993],155,[156,1071],[155,1011],[156,1032],[175,1054],[176,1441],[155,1056],[156,1033],156,155,156,155,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[552,1310],553,553,552,[572,1341],[573,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[572,1368],[573,1388],553,552,553,553,552,[572,1241],[573,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,0,0,406,406,406,406,[180,668],179,[35,180],[36,177],35,[36,112],155,[199,181],[179,182],[158,183],200,199,198,199,199,200,199,200,[199,213],[200,214],[200,215],[199,216],200,199,159,200,199,[36,200],[35,197],36,35,36,[35,18],[36,13,19],[35,14,113,20],[36,200],200,175,154,155,219,[199,220],200,[199,104],[200,105],[197,106],107,108,109,110,[35,111],36,35,[36,31],[35,32],36,[15,112,84],[16,176,85],[175,86],[155,87],[156,88],[155,89],[156,90],[155,91],[35,137],36,35,36,35,36,[35,1011],[155,1012],[156,1013],175,[176,1091],[175,1072],[176,1073],[175,1461],[176,1501],[175,1462],[176,1032],[176,1033],175,176,175,155,156,155,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[572,1310],[573,1250],553,553,572,[573,1341],[552,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[552,1330],553,573,572,573,553,553,[572,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,406,406,406,406,[175,688],[199,669],[15,200,747],[16,153],[15,116],16,[15,134],[179,201],[180,202],[179,203],[180,139],178,179,179,179,180,179,180,[179,233],[180,234],[180,235],[179,236],180,179,179,180,179,[16,117],15,16,15,16,[15,92,38],[16,33,96,39],[15,34,179,40],[16,180],155,156,174,175,[179,179,239],[179,240],180,[179,124],[135,125],126,127,128,129,130,[15,131],16,[15,213],[16,214],[15,215],[16,216],[15,132,104],[16,155,105],[156,106],[155,107],[156,108],[155,397,109],[155,398,110],[156,111],[15,157],16,15,16,15,16,[15,1011],[175,1012],155,[156,1034],156,[155,1092],[156,1093],[155,1481],[156,1521],[155,1482],[155,1052],[156,1032],[155,1033],156,155,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[572,1270],573,573,552,553,[572,1362],[573,1342],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[553,1349],[572,1350],573,572,552,572,573,573,[552,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,0,0,[406,213],[406,214],[406,215],[406,216],406,406,[35,155,648],[36,156],[35,155],[36,115],[35,113],[36,199],[200,241],179,179,198,199,199,[200,257],[178,258],179,200,[199,253],[200,254],[200,255],[199,256],200,199,199,200,199,[36,137],35,36,35,[36,113],[154,58],[155,59],[199,60],200,175,176,[154,139],155,199,199,[35,196,5],[36,136,144],145,146,147,148,149,150,[35,151],36,[35,233],[36,234],[35,235],[36,236],[15,152,124],[16,175,413,125],[176,414,126],[155,415,127],[156,416,158,128],[175,417,129],[155,418,130],[156,131],[15,177],16,15,16,15,16,[15,1031],[175,1032],[175,1054],[176,1442],[176,1057],[155,1033],156,175,176,175,[175,1072],[176,1052],[175,1012],176,175,155,[156,213],[155,214],[156,215],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[4,1290],573,572,572,479,552,[553,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[573,1310],552,553,480,572,573,573,572,[572,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,0,0,[406,937,233],[406,938,234],[406,235],[406,236],[406,932],[406,933],[15,175,934],[16,11,176,938],[15,12,175],[16,176],[15,155],[16,179,164],[180,261],179,180,159,180,179,[179,277],[198,278],199,180,[179,273],[180,274],[180,275],[179,276],180,179,179,180,179,[16,157,785],15,[16,92],[15,96],[16,199],[174,78],[175,79],[179,80],154,155,176,154,155,180,[16,135],[15,25],[16,164],165,166,167,168,169,170,[15,171],16,[15,253],[16,254],[15,255],[16,114,256],[35,155,144],[36,155,433,145],[155,434,146],[175,435,147],[176,436,148],[155,437,149],[156,438,150],[176,151],[35,135],36,35,36,35,36,[35,1051],[36,1052],1463,1721,1464,[175,1032],[155,1033],156,155,156,155,[156,1011],[155,1012],156,155,175,[176,233],[175,234],[176,235],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[573,1310],573,552,553,552,572,[573,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[572,1270],573,573,553,573,573,552,[553,1321],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,[155,957,253],[156,958,254],[406,937,255],[406,937,256],[406,937],[176,953],[35,177,954],[36,31,979],[32,155,980],156,175,179,200,199,200,199,200,179,200,200,199,200,[199,293],[199,294],[200,295],[199,296],199,200,[13,199],[14,200],199,[36,136,805],35,[36,175],[35,199],[36,179],154,[155,206],[155,207],[174,208],175,158,174,175,[35,177],36,35,[36,184],[35,185],[36,186],[35,187],[36,55,188],[35,56,189],[36,190],[35,191],36,[35,92,273],[36,93,274],[35,93,275],[36,155,276],[15,155,914,164],[16,155,413,165],[175,414,140,166],[176,415,167],[155,416,168],[156,417,169],[176,418,170],[16,177,171],15,16,15,16,15,16,15,[16,1093],[15,175,1483],[16,176,1741],[15,156,1484],1052,[156,1032],[176,1033],175,176,175,[176,1011],[175,1012],176,175,155,[156,253],[155,254],[156,255],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[573,1330],573,572,573,572,552,[553,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1289],[552,1290],553,573,573,573,573,572,[573,1341],[572,1342],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,[175,273],[176,978,274],[156,957,275],[155,957,276],[156,957],[176,973],[15,177],[16,999],[175,1000,213],[155,214],[156,215],[173,119,216],173,179,180,179,180,180,179,180,180,179,180,[179,314],[179,315],[180,316],179,159,[33,179],[16,34,196],[15,197],16,15,[16,134],[15,196,933],[16,180,934],[174,934,225],[175,934,226],[175,934,227],[154,934,228],[155,934,229],[179,937],[154,938],155,[15,117],16,15,16,15,16,15,[16,75],[15,76],16,15,16,[16,172,293],[176,294],[155,295],[156,296],[35,175,184],[36,175,433,185],[176,434,186],[155,435,187],[35,156,436,188],[36,176,437,189],[35,196,438,190],[36,197,191],35,15,16,15,16,15,16,15,[16,192],[15,175],[16,176],[15,156,1072],[16,1052],[15,155,1053],[156,1170],[155,1171],[156,1033],[156,1031],[155,1032],[156,1033],155,156,[176,273],[175,274],[176,275],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[553,1349],[573,1350],573,552,553,572,[572,1223],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1227],[573,1228],553,573,573,552,[553,1222],[572,1281],[4,1282],4,4,4,4,4,4,4,4,4,4,0,0,[155,293],[156,294],[176,295],[175,296],176,176,[35,177],[36,999],[155,1000,233],[175,234],[176,235],[153,236],173,155,156,155,156,200,155,156,200,155,155,156,155,155,156,200,[35,197],36,35,36,35,[36,971],[35,953],[36,134,954,244],[35,199,954,245],[36,199,954,246],[35,200,954,247],[36,954,248],[35,954,249],[36,957,250],[35,958],[36,507,175,980],[35,157],36,35,36,35,36,35,36,35,36,35,[36,113],[175,313],[175,314],[175,315],[176,316],155,156,[155,454],[156,455],[15,176,456],[16,135,457],[15,458],16,15,35,36,35,36,35,36,35,36,[35,133],[36,175],[35,176],[36,156,1072],[35,175,1073],[176,1190],[175,1191],[176,1053],[176,1033,1051],[175,1052],[176,1032],[175,1033],[176,1034],[156,293],[155,294],[156,295],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1309],[552,1310],[553,1370],[573,1164],[572,1165],573,[552,1223],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1248],[552,1228],[553,1163],[573,1164],[572,1165],[573,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,175,[155,314],[156,315],[176,316],176,176,[15,136,1018],[16,1019],[175,1020,253],[176,254],[155,255],[156,256],155,175,155,156,155,156,156,176,156,155,156,154,155,156,154,[16,135],15,16,15,16,[15,113],[16,156,991],[15,992],[16,993,264],[15,172,265],[16,15,173,266],[15,16,180,267],[16,16,176,268],[15,176,269],[16,270],[15,999,271],[176,1000],[15,176],[16,116],15,16,15,16,15,16,15,16,[15,113],[16,176],176,176,176,176,175,[155,378,977],156,[176,475],[35,197,476],[36,477],[35,478],36,35,15,16,15,16,15,16,15,16,15,[16,192],[15,175],[16,176],[15,155,1093],[156,1210],[176,1211],1073,[156,1012],[155,1072],[156,1073],[155,1053],[156,1054],[176,1033],[175,1034,314],[176,315],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[573,1183],[573,1184],[573,1185],[553,1227],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[573,1183],[573,1184],[573,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,0,0,156,175,176,[176,44],[196,1036,45],[15,197,1037,46],[16,1038,47],[36,1039,48],[175,1040,273,49],[176,274,50],[175,275,51],[176,276],179,176,176,[36,195],[35,196],176,154,174,154,175,176,156,155,156,[35,177],36,35,36,35,[36,92],156,[156,1011],[35,1012],[36,284],[35,15,192,285],[36,16,193,286],[35,16,176,287],[36,36,176,288],[35,16,289],[36,290],[35,999,291],[176,1000],[35,176],[36,176],[35,93],[36,97],35,36,35,36,[35,92],[36,93],[35,155],[36,155],156,176,176,155,[156,1013],175,176,[16,135],15,16,15,16,15,35,36,35,36,35,36,[35,204],[36,205],[35,206],[36,207],[35,172,208],[36,155,209],[35,175,281,210],[176,282,211],[176,283],[176,1011],[176,1012],175,[176,1093],[175,1073],[176,1074],[156,1053],[155,1054],[156,1033],1034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1247],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,4,4,0,0,176,155,156,[155,1038,64],[1176,65],[1177,66],[1058,67],[155,1059,68],[156,1060,69],[155,294,70],[156,295,71],[155,296],200,155,[15,135],16,15,[16,134],156,155,[15,156,140],155,156,155,175,155,156,[16,97],15,16,15,[16,112],156,[176,1011],[15,1012],[16,304],[15,305],[16,306],[36,307],[35,308],[36,156,309],[15,310],[16,999,311],[155,1000],156,155,155,[15,177],16,[16,92],[16,96],[16,96],[16,175],175,175,175,176,153,153,175,176,156,[35,117],36,35,36,35,36,35,15,16,15,16,15,16,[15,224],[16,225],[15,226],[16,227],[155,228],[175,118,229],[176,301,230],[156,302,231],[155,303],[156,1011],[156,1012],155,[156,1092],[155,1093],[156,1094],[155,1073],[156,1074],1053,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,175,175,[155,1158],[156,1159,84],[176,1196,85],[156,1197,86],[176,1078,87],[175,1079,88],[176,1080,89],[175,314,90],[199,315,91],[179,118,316],[35,180],[36,135],35,36,35,36,[35,133],173,173,[173,746],[179,649],[180,669],[178,747],155,156,[36,177],35,36,35,[36,132],156,[156,1011],[35,1012],[36,324],[15,325],[15,176,326],[16,327],[35,155,328],[36,156,329],[35,330],[36,999,331],[175,1000],176,175,[175,158],[35,136],[36,113],[36,175],[36,175],[36,176],[36,156],153,153,154,155,173,173,174,175,176,[15,137,378],16,15,16,15,16,15,35,36,35,36,35,36,[35,244],[36,245],[35,246],[36,247],[175,248],[176,249],[175,321,250],[176,322,251],[175,323],[176,1011],[176,1012],175,176,175,176,[175,1093],[176,1094],1073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,[156,1158],[175,1178],[176,1179,104],[155,1216,105],[156,1217,106],[155,1098,107],[156,108],[155,109],[155,110],[199,111],199,[15,136],[16,72],15,16,15,16,15,[16,134],[15,194,746],[173,690],[173,406],[200,406],[198,688],[175,747],176,[16,136],15,16,15,[16,152],176,[176,1011],[15,1012],[16,344],[35,345],[15,1661],[15,1662],[16,175,1663],[36,176,349],[15,350],[16,1019,351],[156,1020],153,[15,154],[16,136],[15,113],[16,153],[154,213],[155,214],[156,215],[153,216],154,[154,119],155,156,[176,393],153,[154,611],[155,612],[156,613],[35,157],36,35,36,35,36,35,15,16,[15,92],[16,93],[15,94],[16,95],[15,96,264],[16,265],[15,266],[16,267],268,269,[155,341,270],[156,342,271],[155,343],[156,1011],[156,1012],155,156,155,155,156,155,[156,1093],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,[200,1139],[155,1198],[156,1199,124],[175,125],[176,126],[175,127],[176,128],[155,129],[175,130],[179,131],180,[16,97],15,16,15,35,36,35,[36,746],[35,690],[133,406],[193,406,748],[194,406],[179,406],[180,688],[35,117,747],36,35,36,35,[36,112],156,[156,1011],[35,1012],[36,364],[35,365],[35,1681],[35,1682],[36,1683],[36,369],[35,370],[36,1019,371],[156,1020],173,[35,177,139],36,[35,172],[36,175],[174,233],[175,234],[175,235],[173,236],174,174,175,153,154,155,[156,631],[175,406],[176,633],[15,177],16,15,16,15,16,15,[299,35],[300,36,113],[299,175],[300,176],[299,155],[300,156,160],[175,284],285,286,287,288,289,[175,361,290],[176,362,291],[175,363],[176,1011],[176,1012],175,176,175,175,176,175,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,[15,200,1119],[16,196,1120],[15,176,1219,144],[16,155,145],[15,156,146],[16,199,147],[200,148],[179,149],[200,150],[199,151],200,[36,117],35,36,35,15,16,15,[16,650,213],[15,406,214],[406,215],[406,216],406,[134,406],[200,406],[15,137,648],16,15,16,15,[16,132],176,[176,1011],[15,1012],[16,384],[16,385],[15,35,386],[16,36,387],[15,388],[16,389],[15,390],[16,1019,391],[176,1020],153,[15,136],[16,113],175,153,[154,253],[155,254],[175,255],[153,256],154,154,155,173,174,175,[153,631],[154,406,748],[155,633],156,[36,116],35,36,35,[36,92],[35,93],[319,15,93],[320,175],[319,176],[320,196],[319,175],[320,155],[156,304],305,306,307,308,309,[155,310],[156,311],155,[156,1011],[152,1012],[300,155],[300,156],[319,193],[320,194],[300,195],[319,196],[320,193],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,[15,156,1019],[16,1020],[35,134,164],[36,196,165],[35,176,166],[36,179,167],[180,168],[179,169],[180,170],[160,171],180,[16,137],15,16,15,35,36,35,[36,650,233],[35,406,234],[36,406,235],[35,406,236],[36,406],[35,406,748],[36,112,406],[35,157,648],36,35,36,35,[36,152],156,[156,1031],[35,1032],[36,1054],[36,1055],[35,1056],[36,1832],[35,1054,1170],[36,1055,1171],[35,1056],[36,1039],[154,1040,1160],[15,177],16,[36,172],175,175,[174,273],[175,274],[175,275],[173,276],174,174,175,153,154,155,[156,651],[174,652],[175,653],176,155,[15,93],[299,16,94],[300,15,96],[299,175],[300,176],[299,175],[300,176],[299,135],300,[299,133],[300,175],[299,176,324],[300,325],[299,326],[300,327],328,329,[155,330],[156,159,331],155,[156,1011],[156,1012],[320,155],[320,135],299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,[15,154,1019],[16,1020],[15,184],[16,185,5],[15,133,186,5],[16,176,187],[200,188],[199,189],[200,190],[199,191],200,[36,157],35,36,35,15,16,15,[16,253],[15,630,254],[16,406,255],[15,406,256],[16,406],[15,406],[16,152,628],[15,177],16,15,16,15,[16,172],176,[176,1051],[156,1052],[156,1074],1075,[173,1076],[174,1852],[175,1074,1190],[176,1075,1191],[173,1076,1197],[174,1059,1198],[154,1060,1218],[35,177],15,[16,172],[175,257],[175,258],[154,293],[155,294],[175,295],[154,296],155,155,156,173,[174,453,18],[175,19],[176,20],154,155,156,175,155,[299,175],[300,176],[319,196],[320,193],[319,175],[320,177],319,[320,1008],319,[320,172],[319,175,344],[320,345],[319,346],[320,347],348,[155,349],[175,350],[176,351,5],175,[36,176,1011],[35,176,1012],[300,135],300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,[15,156,978],[16,200,979],[15,980],[16,25],[35,25],[36,172],180,179,180,179,180,[16,177],15,16,15,35,36,35,[36,114,273],[35,115,274],[36,630,275],[35,406,276],[36,406],[35,113,628],155,156,[36,116],35,36,[35,113],[36,156],[155,158],156,[176,1072],[176,1094],[156,1095],[153,1096],[16,1872],[155,1094,1210],[156,1095,1211],[153,1096],[154,1079],174,[16,197],[35,113],[36,175],[176,277],[173,278],174,[175,314],[173,315],[174,316],175,175,176,153,[154,38],[155,474,39],[153,40],154,[155,118],156,[299,175],[300,175],[319,176],[320,136],299,300,[299,192],[299,197],300,[299,1028],[300,1033],[299,192],[300,175,364],[299,175,365],[300,175,366],[299,367],[300,368],[299,175,369],[300,176,370],[155,371,25],175,[16,176,1038,1011],[15,1012],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,175,[35,176],[15,156,999],[35,1000],36,15,[16,112],199,159,200,199,200,[36,197],35,36,35,15,[16,92],[15,93],[16,155,293],[15,156,294],[16,96,295],[15,96,629,296],[16,96,629],[15,199],175,155,[16,156],[15,155],[16,156],[15,155],[16,156],175,176,156,156,176,[15,177],16,[35,172],[36,156],153,154,[35,197],[36,113],176,175,[176,159],173,174,175,173,174,175,175,176,153,[154,58],[155,59],[153,60],154,155,156,[319,175],[320,196],[319,197],320,319,320,299,300,320,[319,1048],[320,1032],[319,1033],[320,192,384],[319,196,385],[320,197,386],[319,387],[320,192,388],[319,193,389],[320,194,390],[36,175,391],[35,155,1038],[36,156,1058,1011],[35,1012],300,300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,[15,174],[35,154,1019],[35,177,1020],36,35,[36,152],179,179,180,179,[15,177],16,15,16,15,[16,114],179,155,155,[156,314],[155,315],[156,316],175,176,175,175,176,155,156,175,176,[175,140],[299,176],[300,176],176,156,[35,173],[36,116],[15,192],[15,193],[16,196],[15,197],16,[16,172],154,175,156,153,154,155,156,154,155,155,156,[319,173],[320,174,78],[319,153,79],[320,173,80],[319,174],[320,175],[319,176],[320,177],[319,955],[320,1100],319,320,319,319,320,320,[299,1068],[300,1052],[319,16,1053],[320,1054],[319,1055],[320,1116],[299,1117],[320,1056],[299,1057],[300,1056],[299,134,1057],[300,15,175,1058],[299,16,176,1078,1011],[300,15,1012],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,153,[35,155],[35,156,1019],[36,1020],16,[15,113],[16,200],199,199,200,199,[35,176],[36,116],35,36,[35,113],200,200,175,154,155,175,176,155,156,155,156,[175,932],175,176,155,175,176,[319,194],[320,193],175,155,156,153,[35,115],35,36,16,[36,92],[36,156],174,175,176,153,154,155,156,174,175,175,176,[320,155],[319,156],[320,173],[319,174],[320,175],[319,176],[320,176],[300,135,1038],[299,975],300,299,300,299,300,299,300,299,[300,1072],[299,1073],[300,1074],[299,1075],[300,1136],[299,1137],[300,1076],[299,1077],[300,1076],[299,1077],[300,1078],[319,1098,1011],[320,1099,1012],300,300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,156,175,[35,176,1019],[36,1020],[36,113],[35,179],[36,180],179,179,[180,974],179,[15,155,974],[16,156],[15,93],[16,96],[15,179],180,155,[156,139],174,175,155,156,175,[299,176],[300,15,175],176,[299,194],[300,175],[299,176],[300,175],[300,176],[299,135],300,299,[300,192],[300,175],176,173,174,[35,94],[36,95],[36,96],153,154,155,156,155,156,[319,173],[320,174],[319,175],[320,176],[319,154],[319,155],[320,156],[319,156],[319,176],[320,176],[319,175,736],[320,195,738],[319,196,739],[320,135,1038,740],[320,1058],[319,995],320,319,320,319,320,319,320,319,320,[319,1093],[339,1094],[339,1095],[339,1156],[339,1157],[339,1096],[319,1097],[320,1096],[319,1097],[320,1098],[299,1011,1099],[300,1012],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[4,1345],[4,1346],[4,1347],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,176,154,[155,978],[179,958],[179,938],[199,939],[199,940],200,199,200,199,175,176,154,155,199,200,175,176,154,155,175,176,[299,193],[300,194],[320,195],[300,136],300,[320,192],[319,193],[320,194],[320,136],319,320,319,320,[320,133],[319,153],[320,154],[319,155],[320,156],[319,154,160],[320,155],[319,156],[319,174],[320,175],[319,176],[320,175],[319,176],[320,194],[319,196],[320,173],[319,174],[320,175],[320,175],[319,176],[320,176],[299,193],[300,195],[299,135,1038],[300,1056],[299,1057],[300,1058],[300,1078],[299,1015],300,299,300,299,300,299,300,299,300,299,400,359,359,359,359,340,300,299,300,[319,1011],[320,1012],299,299,300,320,299,300,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1364],[4,1365],[4,1747],[4,1367],[4,1366],[4,1367],[4,1747],[4,1365],[4,1366],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1344],[28,1829],[4,1346],[4,1347],[4,1344],[4,1345],[4,1346],[4,1347],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,153,154,155,[155,978],[156,958],[180,959],[179,960],159,[299,179],[300,196],[299,196],[300,196],199,174,175,[299,179],[300,193,736],[299,194,738],[300,193,739],[299,194,738],[299,195,738],[300,196,740],[299,197],319,320,319,320,320,299,299,300,[300,955],299,300,299,300,320,[320,133],[319,174],[320,175,956],[319,176],[320,174],[319,175],[320,176,736],[320,193,737],[319,194,737],[320,195,738],[319,196,739],[320,197,1038,740],[300,1831],[299,1115],[300,134,1033,736],[299,193,739],[300,194,737],[299,194,738],[300,195,739],[299,135,1038,740],[300,1056],[319,1057],[320,1058],[319,1076],[320,1077],[319,1078],[335,1098],[336,1099],320,319,320,319,[320,312],[335,313],336,319,339,339,400,359,359,359,359,360,340,319,320,[299,1011],[300,1012],319,319,320,300,319,320,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1289],[552,1349],[553,1384],[552,1385],[553,1767],[552,1387],[553,1386],[552,1387],[553,1767],[552,1385],[553,1386],[1715,1387],[1716,1363],[4,1282],4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[572,1364],[573,1849],[572,1366],[573,1367],[573,1364],[572,1365],[573,1366],[572,1367],[573,1304],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,153,154,155,155,[156,978],[155,979],[156,980],200,[319,197],320,299,[300,956],[299,133],154,[300,155],[319,136,1038],[320,1054],[319,1055],[320,1056],[319,1057],[319,1054],[320,1055],[319,1033],[320,1034],[300,1035],299,300,300,319,[319,1018],[320,1038],[320,975],319,320,319,320,319,320,319,[320,976],[319,133,1033],[320,193,1036],[319,193,1037],[320,136,1038],[319,1056],[320,1057],[319,1056],[339,1057],[339,1058],[339,1851],[339,1135],[339,1053],[319,1054],[320,1055],[319,1056],[320,1057],[319,1058],[320,1076],[299,1077],[300,1078],[299,1096],[300,1097],[299,1098],355,356,300,299,300,299,300,355,356,339,400,359,359,359,359,359,359,359,360,299,300,[319,1011],[320,1012],320,320,319,320,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[572,1310],573,572,573,572,573,572,573,572,573,552,[553,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,[4,1289],[553,1349],[552,1384],[553,1869],[552,1386],[553,1387],[553,1384],[552,1385],[553,1386],[552,1387],[553,1387],[553,1342],[4,1343],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,173,174,175,175,176,[177,999],[176,1000],[319,135],319,320,319,[320,976],[319,1033],[319,192],[320,136,1038],[339,1039],[400,1074],[359,1075],[359,1076],[359,1077],[359,1074],[359,1075],[359,1053],[319,1054],[320,1033],319,320,[320,1036],[299,1037],[300,1038],[299,1039],[300,995],299,300,299,300,299,300,299,[300,996],[299,1053],[300,1054],[299,1055],[300,1058],[299,1076],[300,1077],[299,312,1076],[400,313,1077],[359,1078],[359,1871],[359,1155],[359,1073],[340,1074],[300,1075],[299,1076],[300,1077],[299,1078],[300,1096],[319,1097],[320,1098],319,320,319,320,319,320,319,339,339,339,339,339,400,359,359,359,359,359,359,359,359,359,360,320,[299,1011],[300,1012],299,299,300,300,299,300,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[572,1310],573,572,573,572,573,572,573,572,573,572,[573,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,[4,1309],[4,1310],572,479,572,573,573,572,573,572,573,[573,1362],[572,1363],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,174,175,176,176,[299,176],[300,135,1019],[299,1020],300,339,339,339,[400,996],[359,1053],[359,1057],[359,1058],[359,1059],[359,1094],[359,1095],[359,1096],[359,1097],[359,1094],[359,1095],[359,1073],[359,1014],[359,1053],[359,1054],[359,1055],[340,1056],[319,1057],[320,1058],[319,1059],[320,1015],319,320,319,335,336,320,319,[320,1016],[319,1073],[320,1074],[335,1075],[336,1078],[319,1096],[339,1097],[339,1096],[400,1097],[359,1098],359,359,[359,1093],[360,1094],[340,1095],[319,1096],[320,1097],[319,1098],320,[299,312],[300,313],299,300,299,300,[339,1821],[339,1822],[339,1823],400,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[340,971],[319,972],[320,973],319,319,320,320,319,320,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[552,1322,1310],[553,1323],553,553,552,553,552,553,552,553,[552,1328],[553,1329,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,[4,1309],[552,1310],553,552,553,552,553,552,553,552,553,553,[552,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,[299,175],[300,195],[319,196],[320,196],[319,135,1038],[339,1039],[319,1040],320,359,359,359,[359,1016],[359,1073],[359,1193],[359,1078],[359,1079],[359,1080],359,359,359,359,359,[359,1093],[359,1094],[359,1073],[359,1074],[359,1075],[340,1076],[299,1077],[300,1078],[299,1079],[300,1080],299,300,299,355,356,300,299,300,[299,1093],[300,1094],[355,1095],[356,1098],339,400,359,359,359,359,359,359,359,360,299,300,299,300,319,320,319,339,319,320,[359,1841],[359,1842],[359,1843],359,359,359,[359,1036],[359,1037],359,359,359,359,359,359,359,359,359,359,359,[340,991],[299,992],[300,993],299,299,300,300,299,300,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[572,1342,1310],[573,1343,7],8,[573,1345,10],[572,1346],[553,1347],[552,1346],[573,1347],[572,1346,7],[573,9],[572,1348,10],[573,1349,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[573,1227],[572,1227],[573,1227],[572,1227],[573,1228],553,573,572,460,573,572,[573,1362],[4,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,0,0,[319,135],320,299,[300,1038],[299,1058],[359,1059,1078],[359,1060],359,359,359,359,359,[359,1093],[359,1097],[359,1098],[359,1099],[359,141,1100],[359,142],[359,143],359,359,359,359,359,[359,1093],[359,1094],[359,1095],[340,1096],[319,1097],[320,1098],319,320,319,320,319,320,319,320,319,339,339,339,339,339,400,359,359,359,359,359,359,359,359,359,360,320,319,320,299,300,299,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864,1036],[359,1865,1037],[359,1038],[359,1056],[359,1057],[359,1116],[359,1117],[359,1033],359,359,359,359,[359,955],359,359,359,[340,1011],[319,1012],[320,1013],319,319,320,320,319,320,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1362,1310],[4,1363,7],8,[4,1365,10],[4,1366],1367,1366,[4,1367],[4,1366,7],9,[4,1368,10],[4,1369,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1247],[4,1247],[4,1247],[572,1269],[460,1270],552,553,552,553,552,553,[552,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,0,0,299,300,[319,1038],[320,1058],[359,1078],[359,1079,1098],[359,1080],359,359,359,359,359,359,359,359,359,[359,161],[359,162],[359,163],359,359,359,359,359,359,359,359,340,299,300,299,300,299,300,299,300,339,339,339,400,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,299,300,319,320,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885,1038],[359,1058],[359,1076],[359,1077],[359,1136],[359,1137],[359,1032],[359,1033],359,359,[359,1038],[359,975],359,359,359,[340,1031],[299,1032],[300,1033],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1382,1310],[4,1383],[4,1384],[4,1385],[4,1386],[4,1387],[4,1386],[4,1387],[4,1386,7],9,[4,1388,10],[4,1389,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[572,1270],573,572,573,572,573,572,[573,1362],[4,1342],[4,1282],4,4,4,4,4,4,4,4,0,0,319,[320,1038],[359,1039],[359,1078],[359,1098],359,359,359,359,359,359,400,359,359,359,359,[359,181],[359,182],[359,183],359,359,359,359,359,359,359,[359,933],[299,934],[300,937],[320,938],319,320,319,339,319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,319,320,359,359,359,359,[359,956],359,[359,1901],[359,1902],[359,1903],[400,1038],[359,1058],[359,1078],[359,1096],[359,1097],[359,1156],[359,1157],[359,1052],[359,1053],[359,1056],[359,1057],[359,1058],[359,995],359,359,359,[340,1051],[319,1052],[320,992],300,300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],4,4,4,4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[553,1227],[552,1228],553,552,479,572,[573,1222],[4,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,319,[320,1019],[319,1059],[320,1060],319,400,359,359,340,300,400,359,359,340,300,300,[299,201],[300,202],[319,203],320,319,320,299,[320,951],[299,952],[299,937],[300,15,953],[319,16,954],[320,15,957],[300,16,958],[299,937],[300,938],[299,939],[359,940],359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,299,300,359,400,400,400,[400,976],[400,1033],[400,1036],[400,1037],[400,1038],[400,1058],[400,1078],[400,1098],400,400,359,359,[400,1072],[400,1073],[400,1076],[400,1077],[400,1078],[400,1015],400,400,400,340,[299,991],[300,992],300,300,299,300,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1248],[573,1228],[572,1163],[573,1164],[552,1165],[553,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,0,0,320,[319,1019],[320,1020],319,320,380,359,359,340,300,380,359,359,340,300,300,299,300,299,300,299,300,299,[300,971],[299,15,972],[319,16,957],[320,35,973],[300,36,974],[319,35],[299,36,978],[300,15,957],[320,16,979],[359,980],[359,960],359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,319,320,400,359,359,340,[300,996],[320,1053],[319,1056],[320,1057],[299,1058],[300,1078],[319,1098],320,[400,141],[359,142],[359,143],340,300,[320,1093],[319,1096],[320,1097],[299,1098],300,299,300,299,300,[319,991],[320,992],320,320,319,320,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1183],[553,1184],[572,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,0,0,320,[319,1019],[320,1020],319,320,320,379,379,319,320,320,379,379,319,320,320,319,320,319,339,339,339,339,[339,991],[319,35,992],[320,36],[319,15],[320,16],[299,15],[319,16],[320,35],[359,36,1019],[359,1020],359,359,359,359,359,359,400,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,340,320,319,380,359,359,340,[300,1016],[320,1073],[319,1076],[320,1077],[319,1078],[320,1098],319,320,[380,161],[359,162],[359,163],340,300,339,339,339,339,339,319,320,319,320,[299,991],[300,992],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,300,[299,1019],[300,1020],299,300,300,299,300,299,300,300,299,300,299,300,300,299,300,299,400,359,359,359,[359,1011],[340,35,1012],[300,36],[299,35],[300,36],[319,35],[320,36],[359,35,1038],[300,36,1039],[299,1040],300,299,300,300,400,400,400,400,400,400,400,359,359,400,400,400,400,400,400,400,400,359,359,340,300,320,379,379,319,320,[300,1093],[299,1096],[300,1097],[299,1098],300,299,300,[320,181],[379,182],[379,183],319,320,400,359,359,359,359,340,300,299,300,[319,991],[320,992],300,300,319,320,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,299,[300,1019],[319,1020],320,319,320,319,335,336,[320,1821],[319,1822],[320,1823],319,320,335,336,319,[339,312],[339,313],400,359,359,359,[359,1031],[360,15,1032],[299,16,1033],[300,16],[320,15],[299,16],[300,15,1038],[319,16,1058],[320,1059],[319,1060],320,319,320,319,320,319,320,319,320,319,320,299,300,319,320,319,320,299,320,299,380,359,359,340,300,300,[299,1821],[300,1822],[299,1823],300,335,336,320,319,320,319,320,[300,201],[299,202],[300,203],299,300,400,359,359,359,359,360,[340,1846],319,320,[299,991],[300,992],320,320,299,300,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,1019],[299,1020],300,299,300,299,355,356,[300,1841],[299,1842],[300,1843],299,300,355,356,339,400,359,359,359,359,359,[359,1051],[359,35,1052],[319,36,1012],[320,36],[300,35],[319,36,1038],[320,35,1058],[320,36,1059],[319,1060],320,319,320,[300,1821],[299,1822],[300,1823],299,300,299,300,299,300,299,300,299,300,299,300,299,300,299,320,379,379,319,320,299,[300,1841],[299,1842],[300,1843],299,355,356,300,299,300,299,300,355,356,339,400,359,359,359,359,359,359,359,360,299,[300,971],[319,972],[320,973],300,319,320,300,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,299,[300,1019],[319,1020],320,319,320,319,320,319,[320,1861],[319,1862],[339,1863],[339,1864],[339,1865],339,339,400,359,359,359,359,359,359,[359,1071],[359,1011],[359,15,1012],[360,16],[320,15],[299,16,1019],[300,1059],[320,1060],319,320,319,320,[320,1841],[319,1842],[320,1843],319,320,319,320,319,320,[319,955],320,319,339,339,339,339,339,319,300,299,300,299,300,319,[320,1861],[319,1862],[320,1863],[319,1864],[320,1865],319,320,[319,312],[339,313],339,339,339,339,400,359,359,359,359,359,[359,1821],[359,1822],[359,1823],359,[360,952],[320,972],[299,973],300,320,299,300,320,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],[4,7],8,[4,10],4,4,4,4,[4,7],9,[4,10],[4,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,1019],[299,1020],300,299,300,299,300,339,[339,1881],[339,1882],[400,1883],[359,1884],[359,1885],359,359,359,359,359,359,[359,1821],[359,1822],[359,1823],359,[359,1031],[359,35,1053],[359,36,1056],[340,35,1057],[319,36,1039],[320,1040],300,299,300,299,300,[300,1861],[299,1862],[300,1863],[299,1864],[300,1865],299,[300,1036],[299,1037],[300,1038],[299,975],300,299,400,359,359,359,359,340,300,299,300,319,320,299,[300,1881],[299,1882],[300,1883],[299,1884],[300,1885],339,339,339,400,359,359,359,359,359,359,359,359,359,359,[359,1841],[359,1842],[359,1843],359,[359,991],[340,992],319,320,300,319,320,300,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1222,1310],[4,1223,7],8,[4,1228,10],[4,1229],[4,1230],[4,1221],[4,1222],[4,1223,7],9,[4,1228,10],[4,1229,1301],[4,1230,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,299,[300,978],[319,979],[320,980],319,339,319,320,359,[359,1901],[359,1902],[359,1903],359,359,359,359,359,359,359,359,[359,1841],[359,1842],[359,1843],359,[359,1051],[359,1073],[359,1076],[340,1077],[299,1059],[300,1060],319,320,319,[320,956],319,[335,1881],[336,1882],[320,1883],[319,1884,1036],[320,1885,1037],[319,1038],[320,1056],[335,1057],[336,1058],[319,995],339,339,400,359,359,359,359,360,340,319,320,299,300,319,[320,1901],[319,1902],[339,1903],319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865,1011],[340,1012],299,300,320,299,300,320,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[552,1242,1310],[553,1243,7],8,[552,1248,10],[4,1249],[4,1250],[4,1241],[4,1242],[553,1243,7],9,[572,1248,10],[573,1249,1301],[4,1250,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,998],[299,999],[300,1000],299,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865],[359,1093],[359,1096],[340,1097],[319,1079],[320,1080],299,300,299,[300,976],[299,1033],[355,1901,1036],[356,1902,1037],[300,1903,1038],[299,1056],[300,1057],[299,1058],[300,1076],[355,1077],[356,1078],[339,1015],400,359,359,359,[359,1821],[359,1822],[359,1823],359,360,299,300,319,320,299,300,299,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885,991],[340,992],319,320,300,319,320,300,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[572,1262,1310],[573,1263],[573,1267],[572,1268],[573,1269],[4,1270],[4,1261],[552,1262],[573,1263],[572,1264],[552,1268],[553,1269,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,299,[300,1018],[319,1019],[320,1020],359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885],359,359,340,299,300,319,320,319,[320,996],[319,1053],[320,1056],[319,1057],[320,1058],[319,1076],[339,1077],[339,1078],[339,1096],[339,1097],[339,1098],400,359,359,359,359,[359,1841],[359,1842],[359,1843],359,359,360,320,299,300,319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,400,359,359,[340,1901],[300,1902],[359,1903],359,[359,1011],[340,1012],299,300,320,299,300,320,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[4,1310],552,[553,1287],[552,1288],[553,1289],[4,1290],[4,1281],[553,1282],[552,1283],[552,1284],552,[553,1301],[4,1302],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,1038],[359,1039],[359,1040],359,359,[359,312],[359,313],359,359,359,400,359,359,359,359,359,359,359,359,[359,1901],[359,1902],[359,1903],359,359,359,359,340,319,320,299,300,299,[300,1016],[299,1073],[300,1076],[339,1077],[339,1078],[339,1096],[400,1097],[359,1098],359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865],359,340,319,320,359,359,359,359,359,359,359,359,359,400,359,359,359,359,359,359,359,380,359,359,340,300,359,[359,971],[299,972],[300,973],319,320,300,319,320,300,300,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1309],[552,1310],572,[573,1163],[572,1164],[573,1289,1165],[4,1290],[4,1281],[573,1282,1163],[572,1164],[572,1165],572,[573,1281],[4,1282],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,319,[320,1019],[319,1059],[400,1060],359,359,340,300,319,400,359,359,340,300,400,359,359,340,300,320,319,320,299,320,299,300,299,300,299,300,319,320,319,339,[319,1093],[320,1096],[359,1097],[359,1098],359,359,359,359,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885],359,340,299,300,359,400,359,359,340,300,400,400,400,400,400,400,400,400,[359,1821],[359,1822],[400,1823],320,379,379,319,320,[400,952],[299,972],[300,973],320,299,300,320,299,300,320,320,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[573,1227],[573,1183],[573,1184],[573,1289,1185],[4,1290,1227],[4,1281,1227],[573,1282,1183],[573,1184],[573,1185],[573,1227],[4,1243],[4,1263],4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,320,[319,1019],[320,1020],380,359,359,340,300,299,380,359,359,340,300,380,359,359,340,300,300,299,300,299,300,299,300,299,300,319,320,299,300,299,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1901],[359,1902],[359,1903],359,359,359,340,319,320,319,380,359,359,340,300,400,359,359,340,300,320,319,320,[299,1841],[300,1842],[319,1843],300,299,300,299,300,[299,991],[319,992],320,300,319,320,300,319,320,299,299,300,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1268],[4,1247],[4,1203],[4,1204],[4,1205],[4,1247],[4,1247],[4,1203],[4,1204],[4,1205],[4,1247],[4,1263],4,4,4,4,4,4,4,[4,4],[4,4],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,320,[319,1019],[320,1020],320,379,379,319,320,319,320,379,379,319,320,320,[379,955],379,319,320,339,339,339,339,339,319,320,319,320,299,300,319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,400,359,359,340,300,320,319,320,320,379,379,319,320,380,359,359,340,300,320,319,320,[319,1861],[320,1862],[319,1863],[339,1864],[339,1865],339,339,339,[319,1011],[320,1012],319,320,299,300,320,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,4],[4,4],4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1447],[4,1448],[4,1449],[4,1446],[4,1447],[4,1446],[4,1447],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,0,0,300,[299,1019],[300,1020],300,299,300,299,[300,956],299,300,299,300,[299,1036],[300,1037],[300,1038],[299,975],300,299,300,400,359,359,359,359,340,300,299,300,319,320,359,359,359,359,359,359,359,359,359,400,359,359,359,359,359,359,359,359,359,299,300,380,359,359,340,300,300,299,300,300,299,300,299,300,320,379,379,319,320,300,299,300,[299,1881],[300,1882],[299,1883],[400,1884],[359,1885],359,359,359,[340,991],[300,992],[299,312],[300,313],319,320,300,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1466,1467,1467,1468,1467,1468,1467,1468,1467,1468,1469,[4,1470],4,4,4,4,4,4,4,4,0,0,299,[300,1019],[319,1020],320,319,320,319,[335,976],[336,1033],[320,1036],[319,1037],[320,1038],[319,1056],[320,1057],[335,1058],[336,995],319,339,339,400,359,359,359,359,360,340,319,320,299,300,359,400,400,400,400,400,400,400,400,400,400,400,400,359,359,340,[300,1846],400,400,319,320,320,379,379,319,320,299,300,319,320,319,320,319,335,300,299,300,299,300,320,335,336,[319,1901],[339,1902],[339,1903],400,359,359,359,359,[360,1011],[340,1012],319,320,299,300,320,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,1488,1487,1488,1487,1488,1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,0,0,319,[320,1019],[299,1020],300,299,300,[299,1036],[355,996],[356,1053],[300,1056],[299,1057],[300,1058],[299,1076],[300,1077],[355,1078],[356,1015],339,400,359,359,359,359,359,359,359,360,299,300,319,320,319,320,400,359,359,340,300,320,299,300,319,320,380,359,359,340,300,320,319,320,299,300,299,300,299,300,319,320,299,300,299,[300,312],[299,313],355,356,300,299,300,299,300,355,356,339,400,359,359,[359,955],359,359,359,[359,991],[299,992],300,300,319,320,300,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,[1507,1609],[1508,1610],[1507,1610],[1508,1610],[1507,1610],[1508,1610],[1507,1611],1508,1509,[4,1510],4,4,4,4,4,4,4,4,0,0,299,[300,1019],[319,1020],320,319,320,319,[320,1016],[319,1073],[320,1076],[319,1077],[339,1078],[339,1096],[339,1097],[339,1098],339,[400,1821],[359,1822],[359,1823],359,359,359,359,359,359,359,360,320,299,300,319,320,380,359,359,340,300,320,319,320,319,320,320,379,379,319,320,320,319,320,299,320,299,300,299,300,299,300,319,320,319,320,319,320,319,320,319,[339,1846],339,339,339,339,[400,736],[359,738,1036],[359,739,1037],[359,740,1038],[359,975],359,359,359,[359,1011],[319,1012],320,320,299,300,320,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1525],1486,1487,[1487,1629],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1631],1488,1489,[4,1530],4,4,4,4,4,4,4,4,0,0,319,[320,1019],[299,1020],300,299,300,299,300,[339,1093],[339,1096],[339,1097],[400,1098],359,359,359,359,[359,1841],[359,1842],[359,1843],359,359,359,[359,312],[359,313],359,359,359,340,319,320,320,319,320,379,379,319,320,300,[299,1821],[300,1822],[299,1823],300,300,299,300,299,300,300,299,300,299,300,299,300,299,300,319,320,299,300,299,300,299,300,339,[339,956],339,400,359,[359,736],[359,737,1036],[359,738,1037],[359,740,1038],[359,1056],[359,1057],[359,1058],[359,995],359,359,359,[359,991],[299,992],300,299,300,320,300,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1506,1507,[1507,1629],[1508,1630],[1507,1630],[1508,1630],[1507,1630],[1508,1630],[1507,1631],1508,1509,[4,1470],4,4,4,4,4,4,4,4,0,0,299,[300,1019],[319,1020],320,319,339,360,360,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865],359,359,359,359,359,359,340,299,300,319,320,300,299,300,299,300,320,[319,1841],[320,1842],[319,1843],320,319,320,299,300,[319,312],[320,313],319,320,299,320,299,300,299,300,299,300,319,320,319,339,319,320,359,[359,976],[359,736,1033],[359,739,1036],[359,738,1037],[359,740,1038],[359,1056],[359,1057],[359,1058],[359,1076],[359,1077],[359,1078],[359,1015],359,359,359,[359,1011],[319,1012],320,319,320,300,320,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,[1487,1629],[1488,1630],[1487,1630],[1488,1630],[1487,1630],[1488,1630],[1487,1631],1488,1489,[4,1490],4,4,4,4,4,4,4,4,0,0,319,[320,1019],[299,1020],300,380,359,359,359,359,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885],359,359,359,[359,933],[359,934],[359,937],[340,938],319,320,320,319,320,319,320,300,299,300,[299,1861],[300,1862],[299,1863],[300,1864],[299,1865],300,299,300,299,300,299,300,299,300,299,300,299,300,319,320,299,300,299,359,359,359,359,[359,996],[359,1053],[359,1054],[359,1057],[359,1058],[359,1076],[359,1077],[359,1078],[359,1096],[359,1097],[359,1098],359,359,359,359,[359,1031],[359,1032],[320,1033],320,319,320,299,300,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1506,1507,[1507,1649],[1508,1650],[1507,1650],[1508,1650],[1507,1650],[1508,1650],[1507,1651],1508,1509,[4,1470],4,4,4,4,4,4,4,4,0,0,319,[320,978],[319,979],[320,980],319,400,400,359,[359,1826],340,300,379,379,400,359,359,[340,1901],[300,1902],[319,1903],320,319,[320,951],[299,952],[320,937],[299,15,953],[300,16,954],[299,16,957],[300,15,958],[299,16,937],[300,938],[319,939],[320,940],319,320,319,320,319,320,[319,1881],[320,1882],[319,1883],[320,1884],[319,1885],320,299,300,319,320,319,320,299,320,299,300,[299,933],[300,937],[299,938],300,319,320,359,359,359,359,359,[359,1016],[359,1073],[359,1074],[359,1077],[359,1078],[359,1096],[359,1097],[359,1098],359,359,359,359,359,359,359,[359,1051],[359,1052],[359,1032],[299,1033],300,300,319,320,300,300,320,300,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,1508,[1507,1606],[1508,1607],[1507,1608],1508,1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,0,0,320,319,[320,1019],[319,1020],320,319,380,359,359,340,300,300,299,380,359,359,340,300,299,300,299,[300,971],[299,972],[300,16,957],[299,35,973],[300,36,974],[299,36],[300,35,978],[319,15,957],[320,16,958],[320,959],[319,960],320,319,320,300,299,300,[299,1901],[300,1902],[299,1903],300,299,300,299,300,299,300,299,300,299,[300,951],[299,952],[300,937],[299,15,953],[300,16,957],[319,958],[320,937],[359,938],[359,939],[359,1821],[359,1822],[359,1823],359,359,359,[359,1093],[400,1094],[359,1097],[359,1098],359,359,359,359,359,359,359,359,359,359,359,[359,1051],[359,1052],[319,1012],320,320,320,319,320,320,300,320,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1525],1526,1527,1527,1528,[1487,1626],[1488,1627],[1487,1628],1528,1527,1528,1529,[4,1530],4,4,4,4,4,4,4,4,0,0,320,319,[320,1019],[319,1020],320,319,320,379,379,319,320,320,319,320,379,379,319,320,319,339,339,[339,991],[339,15,992],[339,36],[319,15],[320,16],[319,15],[320,16],[299,35,977],[300,15,978],[320,16,979],[319,980],320,319,320,320,319,320,319,320,319,320,319,320,319,320,319,339,339,339,339,[339,971],[319,15,972],[320,16,957],[319,35,973],[320,36,974],[299,15,978],[300,15,957],[359,16,979],[400,980],[400,1841],[400,1842],[400,1843],400,400,400,400,400,400,400,400,400,359,359,400,400,400,400,400,400,400,400,[400,1011],[299,1012],300,300,299,300,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547],[4,1547],[4,1548],[4,1646],[4,1647],[4,1648],[4,1548],[4,1547],[4,1548],[4,1549],[4,1550],4,4,4,4,4,4,4,4,0,0,300,299,[300,1019],[299,1020],300,299,300,299,300,299,300,300,299,300,299,300,299,300,299,400,359,[359,1011],[359,35,1012],[359,16],[340,35],[300,36],[299,35],[300,36],[319,15],[320,35],[300,36,1019],[299,1020],300,299,300,300,299,300,299,300,299,300,299,300,299,300,299,400,359,359,359,[359,991],[340,35,992],[300,36],[299,35],[300,36],[319,15],[320,35],[319,36,1019],[320,1020],[319,1861],[320,1862],[400,1863],[359,1864],[359,1865],340,300,300,319,320,319,320,299,300,319,320,319,320,299,300,299,300,[299,1011],[319,1012],320,320,319,320,320,300,300,300,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,299,300,[319,978],[320,979],[319,980],320,319,335,336,320,319,320,319,320,335,336,319,339,339,400,359,[359,1031],[359,1032],[359,36,1033],[360,15],[340,16],[319,15],[320,16],[299,15],[300,35,1038],[319,36,1039],[320,1040],319,320,319,335,336,320,319,320,319,320,335,336,319,339,339,400,359,359,359,[359,1011],[360,15,1012],[340,16],[319,15],[320,16,1038],[299,35,1056],[300,35,1057],[319,36,1039],[320,1040],[319,1881],[320,1882],[380,1883],[359,1884],[359,1885],340,300,320,319,320,335,336,319,339,339,400,359,359,359,359,360,[340,971],[319,972],[320,973],299,300,299,300,300,320,320,320,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1447],[4,1448],[4,1449],[4,1446],[4,1447],[4,1446],[4,1447],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,319,320,[299,998],[300,999],[299,1000],300,299,355,356,300,299,300,299,300,355,356,339,400,359,359,359,[359,1051],[359,1052],[359,35,1012],[359,35],[360,36],[299,35],[300,36],[319,35,1038],[320,36,1058],[299,312,1059],[300,313,1060],299,300,299,355,356,300,299,300,299,300,355,356,339,400,359,359,359,359,359,[359,1031],[359,35,1053],[360,36,1056],[299,35,1057],[300,36,1039],[319,1076],[320,1077],[299,1059],[300,1060],[299,1901],[300,1902],[320,1903],379,379,319,320,300,299,300,355,356,339,400,359,359,359,359,359,359,359,[360,1011],[299,1012],300,319,320,319,320,320,300,300,300,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1466,1467,1467,1468,1467,1468,1467,1468,1467,1468,1469,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,299,300,319,[320,1019],[319,1020],320,319,320,319,320,319,339,339,339,339,[339,312],[400,313],359,359,359,359,[359,1071],[359,1011],[359,16,1012],[359,15,1833],[359,16,1834],[299,15,1835],[300,16],[299,36,1019],[300,1059],[319,1060],320,319,320,319,320,319,320,319,339,339,339,339,339,400,359,359,359,359,359,359,[359,1051],[359,1073],[359,1076],[360,1077],[320,1059],[299,1096],[300,1097],[319,1060],320,319,320,300,299,300,299,300,339,339,339,339,339,400,359,359,359,359,359,359,359,359,[359,1011],[299,1012],300,299,300,320,299,300,320,320,320,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,1488,1487,1488,1487,1488,1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1445],[4,1446],[4,1447],[4,1448],[4,1448],[4,1449],[4,1450],4,4,4,4,4,4,4,4,4,4,0,0,319,320,299,[300,999],[299,1000],300,299,300,339,339,339,400,359,359,359,359,359,359,359,359,359,359,[359,1011],[359,36,1012],[359,35,1853],[359,36,1854],[319,35,1855],[320,36],[319,16,1019],[320,1020],299,[300,1846],299,300,299,300,339,339,339,400,359,359,359,359,359,359,359,359,359,359,359,[359,1071],[359,1093],[359,1096],[359,1097],[340,1079],[319,1080],320,299,300,299,300,299,300,339,339,339,400,359,359,359,359,359,359,359,359,359,[359,481],[359,482],359,359,[359,1011],[319,1012],320,319,320,300,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,[1507,825],[1508,826],[1507,826],[1508,826],[1507,826],[1508,826],[1507,827],1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1465],[4,1466],[4,1467],[4,1468],[4,1468],[4,1469],[4,1470],4,4,4,4,4,4,4,4,4,4,0,0,299,300,319,[320,1019],[319,1020],339,319,320,359,359,359,359,359,359,359,359,359,359,359,[359,1821],[359,1822],[359,1823],[359,1011],[359,16,1012],[359,15,1034],[359,16,1035],[299,15,1036],[300,16,1037],[299,36,1019],[300,1020],319,320,319,339,319,320,359,359,359,359,359,359,359,[359,1821],[359,1822],[359,1823],359,359,359,359,359,359,359,359,359,340,299,300,319,320,319,339,319,320,359,[359,1826],359,359,359,359,359,359,359,359,359,359,359,[359,501],[359,502],359,359,[359,1011],[319,1012],320,[299,312],[300,313],300,299,300,319,320,319,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1525],1486,1487,[1487,845],[1488,846],[1487,846],[1488,846],[1487,846],[1488,846],[1487,847],1488,1489,[4,1530],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1485],[4,1486],1487,1487,1488,[4,1489],[4,1490],4,4,4,4,4,4,4,4,4,4,0,0,319,320,[299,1038],[300,1039],[299,1040],359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1841],[359,1842],[359,1843],[359,1031],[359,36,1053],[359,35,1054],[359,36,1351],[319,35,1352],[320,36,1353],[319,36,1058],[320,1040],299,300,299,359,359,359,359,359,359,359,359,359,359,[359,1841],[359,1842],[359,1843],359,[359,312],[359,313],359,359,359,359,359,359,340,319,320,299,300,299,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1031],[299,1032],[300,1033,1033],[319,1034],[320,1035],320,319,320,299,300,299,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1506,1507,[1507,845],[1508,846],[1507,846],[1508,846],[1507,846],[1508,846],[1507,847],1508,1509,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],[4,1506],1487,1488,1488,[4,1509],[4,1510],4,4,4,4,4,4,4,4,4,4,0,0,299,[300,1038],[319,1058],[320,1059],[359,1060],359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864,1051],[359,1865,1073],[359,1074],[359,1371],[359,1372],[340,1373],[299,1078],[300,1060],319,320,359,359,359,359,359,359,359,359,359,359,359,[359,1861],[359,1862],[359,1863],[359,1864],[359,1865],359,359,[359,1826],359,359,359,359,340,299,300,319,320,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1051],[319,1052],[320,1053,1053],[299,1054,1054],[300,1055],[320,1054],[299,1055],[300,1054],[319,1055],[320,1054],[319,1055],[320,1056],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,[1487,865],[1488,866],[1487,866],[1488,866],[1487,866],[1488,866],[1487,867],1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1505],[4,1506],1507,1508,1508,[4,1509],[4,1510],4,4,4,4,4,4,4,4,4,4,0,0,[319,1038],[320,1039],[359,1078],[359,1079],359,359,359,359,359,359,359,400,359,359,359,359,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885,1093],[359,1094],[359,1391],[359,1392],[340,1393],[319,1098],320,359,359,359,359,359,359,359,359,359,400,359,359,359,[359,1881],[359,1882],[359,1883],[359,1884],[359,1885],359,359,359,359,359,359,359,340,319,320,359,359,359,359,359,359,359,[359,312],[359,313],400,359,359,359,359,359,359,359,359,359,359,359,359,359,[359,1071],[359,1072],[340,1073,1073],[319,1074,1074],[320,1075],[300,1074],[319,1075],[320,1074],[299,1075],[300,1074],[299,1075],[300,1076],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1465],1506,1507,1507,1508,1507,1508,1507,1508,1507,1508,1509,[4,1470],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1525],[4,1526],[4,1626],[1488,1627],[1487,1628],[1487,1529],[4,1530],4,4,4,4,4,4,4,4,4,4,0,0,[299,999],[300,1059],[359,1098],400,400,400,400,400,400,400,400,400,400,400,400,400,359,359,400,[400,1901],[400,1902],[400,1903],400,400,400,400,400,340,299,300,359,400,400,400,400,400,400,400,400,400,400,400,400,[400,1901],[359,1902],[359,1903],400,400,400,400,400,400,400,400,400,340,299,300,359,400,400,400,400,400,400,400,400,400,400,400,400,400,359,359,400,400,400,400,400,400,400,[400,1091],[400,1092],[340,1093,1093],[299,1094,1094],[300,1095],[320,1094],[299,1095],[300,1094],[319,1095],[320,1094],[319,1095],[320,1096],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1485],1486,1487,1487,1488,1487,1488,1487,1488,1487,1488,1489,[4,1490],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1646],[4,1647],[4,1648],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,4,0,0,[319,1019],[320,1020],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1826,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[299,1781],[300,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[299,1781],[300,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[319,1781],[320,1781],[319,1781],[320,1781],[299,1781],[300,1781],[299,1781],[300,1781],[299,1781],[300,1781],[319,1781],[320,1781],1781,1781,1781,1781,1781,1781,1781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1505],1506,1507,1507,1508,[1507,1606],[1508,1607],[1507,1608],1508,1507,1508,1509,[4,1510],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[299,999],[1800,1000],1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,1801,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1525],1526,1527,1527,1528,[1487,1626],[1488,1627],[1487,1628],1528,1527,1528,1529,[4,1530],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[300,1019],[1820,1800,1020],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],[1800,1921],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,[4,1545],[4,1546],[4,1547],[4,1547],[4,1548],[4,1646],[4,1647],[4,1648],[4,1548],[4,1547],[4,1548],[4,1549],[4,1550],4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[300,1039],[1820,1040],1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[406,1059],[1820,1060],1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,[1820,1079],1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1345],[4,1346],[4,1347],[4,1323],4,4,4,4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[4,1304],[4,1747],[4,1367],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1348],[552,1368],[552,1385],[552,1767],[552,1387],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1328],[4,1329],[4,1368],[572,1388],552,572,552,[552,1362],[553,1342],[4,1322],[4,1323],4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[553,1349],[552,1388],553,460,572,572,552,[552,1362],[553,1342],[4,1302],4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1289],[573,1290],572,573,553,552,553,480,572,[573,1301],[4,1302],4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[553,1228],572,573,572,573,[552,1222],[553,1261],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1248],[552,1228],[553,1163],[460,1164],[553,1165],[572,1242],[4,1243],[4,1263],4,4,4,4,4,4,4,4,4,4,0,0,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,1820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1269],[573,1183],[572,1184],[573,1185],[4,1262],[4,1263],4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,[4,1268],[4,1203],[4,1204],[4,1205],[4,1263],[4,1283],4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],\"high\":[5,18,19,20,44,45,46,47,48,49,50,51,61,62,64,65,70,71,82,84,85,90,91,101,102,104,105,110,111,122,131,141,142,143,151,163,171,183,206,207,208,213,214,215,216,225,226,227,228,229,233,234,235,236,244,245,246,247,248,249,250,253,254,255,256,264,265,266,267,268,269,270,271,273,274,275,276,281,282,285,290,291,293,296,301,302,305,310,311,324,325,330,331,332,333,345,350,351,352,353,371,382,401,402,403,481,482,602,618,619,621,622,623,637,638,639,640,657,658,659,660,677,678,679,680,685,701,702,703,704,705,721,722,723,724,725,741,742,743,744,745,757,758,759,765,781,783,784,795,801,804,814,815,816,834,835,836,854,855,856,885,886,887,1102,1105,1122,1184,1204,1443,1444,1455,1456,1474,1475,1476,1477,1493,1494,1495,1496,1497,1498,1512,1513,1514,1515,1516,1517,1518,1519,1532,1533,1538,1539,1552,1553,1558,1559,1561,1562,1563,1572,1579,1581,1582,1583,1584,1599,1601,1602,1603,1604,1605,1619,1622,1623,1624,1627,1647,1666,1667,1669,1670,1671,1678,1679,1680,1698,1699,1700,1718,1719,1720,1821,1822,1823,1841,1842,1843,1857,1858,1859,1861,1862,1863,1864,1865,1881,1882,1883,1884,1885,1903],\"animated\":{\"1\":{\"l\":3},\"241\":{\"l\":3},\"606\":{\"d\":500,\"l\":3},\"626\":{\"d\":500,\"l\":2},\"646\":{\"d\":500,\"l\":2},\"706\":{\"l\":4},\"726\":{\"l\":4},\"748\":{\"d\":500,\"l\":2},\"1001\":{\"l\":4},\"1021\":{\"l\":4},\"1041\":{\"l\":4},\"1061\":{\"l\":4},\"1236\":{\"d\":200,\"l\":5},\"1237\":{\"l\":4},\"1251\":{\"l\":6},\"1257\":{\"l\":4},\"1271\":{\"l\":6},\"1291\":{\"l\":4},\"1311\":{\"l\":4},\"1331\":{\"l\":4},\"1401\":{\"l\":10},\"1411\":{\"l\":7},\"1418\":{\"d\":200,\"l\":3},\"1421\":{\"l\":7},\"1428\":{\"l\":8},\"1501\":{\"l\":3},\"1521\":{\"l\":3},\"1586\":{\"l\":4},\"1721\":{\"l\":3},\"1741\":{\"l\":3},\"1747\":{\"l\":3},\"1781\":{\"l\":19},\"1801\":{\"l\":19},\"1886\":{\"l\":8},\"1906\":{\"l\":8},\"1914\":{\"l\":7},\"1921\":{\"l\":15}},\"blocking\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,55,56,57,58,59,60,61,62,63,64,65,68,69,70,71,72,73,74,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,110,111,112,113,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,199,200,201,202,203,204,205,206,207,208,209,210,211,212,221,222,226,227,228,234,235,236,237,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,284,285,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,376,377,378,379,438,439,449,450,452,457,516,517,518,527,528,574,575,599,618,619,620,621,622,623,625,626,627,629,688,689,715,716,724,730,731,743,744,745,746,751,752,757,758,760,761,771,772,778,779,780,799,801,875,876,896,897,907,923,924,938,939,940,941,942,971,1046,1062,1063,1099,1112,1113,1142,1143,1271,1277,1314,1315,1317,1399,1400,1489,1570,1571,1572,1573,1612,1613,1625,1626,1656,1661,1743,1744,1783,1784,1785,1786,1796,1797,1798,1799,1828,1833,1955,1956,1957,1958,1967,1968,1969,1970,1971,1999,2000,2005,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2171,2172,2176,2177,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2343,2344,2348,2349,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2514,2515,2518,2521,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2686,2690,2693,2752,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2858,2862,2863,2865,2924,2925,2975,2976,2991,2992,2993,2994,2995,2996,2997,2998,2999,3034,3035,3037,3096,3097,3146,3147,3148,3149,3163,3164,3165,3166,3167,3168,3169,3170,3171,3206,3207,3209,3268,3269,3319,3320,3336,3337,3338,3339,3340,3341,3342,3369,3370,3378,3379,3381,3440,3441,3540,3541,3542,3543,3547,3552,3553,3612,3713,3714,3719,3720,3724,3725,3784,3891,3892,3893,3897,3956,4064,4065,4066,4069,4128,4237,4238,4241,4300,4410,4413,4472,4582,4585,4644,4754,4757,4816,4929,4988,5101,5249,5250,5251,5252,5273,5358,5370,5371,5420,5421,5422,5423,5424,5425,5444,5445,5527,5541,5542,5593,5594,5595,5596,5616,5617,5698,5789,5959,5961,6129,6130,6131,6133,6301,6302,6303,6305,6473,6474,6476,6477,6645,6646,6648,6649,6817,6818,6820,6821,6992,6993,7052,7061,7159,7163,7164,7165,7224,7233,7239,7240,7241,7242,7243,7244,7332,7335,7336,7337,7396,7411,7412,7413,7414,7415,7508,7509,7568,7680,7681,7740,7741,7850,7852,7853,7912,7913,8022,8024,8025,8084,8085,8194,8196,8197,8366,8368,8369,8396,8397,8398,8399,8422,8423,8424,8425,8540,8541,8568,8569,8570,8595,8596,8597,8600,8711,8712,8713,8740,8741,8768,8769,8883,8884,8885,8912,8913,8940,8941,9056,9057,9084,9085,9112,9113,9215,9216,9228,9229,9256,9257,9284,9285,9387,9388,9400,9401,9428,9429,9456,9457,9483,9484,9572,9573,9600,9601,9628,9629,9660,9661,9662,9744,9745,9772,9773,9799,9800,9801,9804,9805,9806,9807,9808,9890,9891,9900,9901,9902,9915,9916,9917,9944,9945,9946,9971,9972,9973,9980,9981,10062,10063,10071,10072,10085,10086,10087,10088,10089,10116,10117,10118,10119,10143,10144,10145,10148,10149,10150,10153,10154,10234,10235,10246,10247,10248,10249,10255,10256,10257,10258,10259,10260,10261,10288,10289,10290,10315,10316,10317,10320,10321,10322,10323,10326,10327,10405,10406,10407,10411,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,10430,10431,10432,10433,10460,10461,10462,10487,10488,10489,10492,10493,10494,10495,10496,10498,10499,10500,10577,10580,10581,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10632,10633,10634,10659,10660,10661,10664,10665,10666,10667,10668,10670,10671,10672,10749,10750,10751,10755,10756,10804,10805,10806,10830,10831,10832,10833,10836,10837,10838,10839,10842,10843,10844,10921,10922,10923,10924,10925,10926,10927,10928,10976,10977,10978,11002,11003,11004,11005,11008,11009,11010,11014,11015,11016,11093,11096,11097,11098,11099,11100,11148,11149,11150,11175,11176,11177,11185,11186,11187,11269,11270,11271,11272,11320,11321,11322,11347,11348,11349,11356,11357,11358,11438,11439,11440,11441,11442,11443,11444,11492,11493,11494,11519,11520,11521,11524,11525,11526,11527,11609,11610,11611,11612,11613,11614,11615,11616,11664,11665,11666,11691,11692,11693,11696,11697,11698,11781,11782,11783,11784,11785,11786,11787,11788,11836,11837,11838,11863,11864,11865,11953,11954,11955,11956,11957,11958,11959,11960,12008,12009,12010,12035,12036,12037,12125,12126,12127,12128,12129,12130,12131,12132,12180,12181,12182,12207,12208,12209,12212,12297,12298,12299,12300,12301,12302,12303,12304,12352,12353,12354,12379,12380,12381,12469,12470,12471,12472,12473,12474,12475,12476,12524,12525,12526,12527,12528,12529,12530,12537,12538,12539,12540,12541,12547,12548,12549,12550,12551,12552,12553,12641,12642,12643,12644,12645,12646,12647,12648,12696,12697,12698,12699,12704,12705,12706,12707,12708,12709,12710,12711,12712,12713,12714,12715,12716,12717,12720,12721,12722,12723,12724,12725,12813,12814,12815,12816,12817,12818,12819,12820,12984,12985,12986,12987,12988,12989,12990,12991,12992,13156,13157,13158,13159,13160,13161,13162,13163,13164,13328,13329,13330,13331,13332,13333,13334,13335,13336,13500,13501,13502,13503,13504,13505,13506,13507,13508,13588,13672,13673,13674,13675,13676,13677,13678,13679,13680,13760,13845,13846,13847,13848,13849,13850,13851,13852,13932,14017,14018,14019,14020,14021,14022,14023,14024,14104,14105,14189,14190,14191,14192,14193,14194,14195,14196,14276,14277,14361,14362,14363,14364,14365,14366,14367,14368,14448,14449,14533,14534,14535,14536,14537,14538,14539,14540,14620,14621,14705,14706,14707,14708,14709,14710,14711,14712,14792,14793,14794,14876,14877,14878,14879,14880,14881,14882,14883,14884,14964,14965,14966,15048,15049,15050,15051,15052,15053,15054,15055,15056,15136,15137,15138,15219,15220,15221,15222,15223,15224,15225,15226,15227,15228,15308,15309,15310,15390,15391,15392,15393,15394,15395,15396,15397,15398,15399,15400,15480,15481,15482,15562,15563,15564,15565,15566,15567,15568,15569,15570,15571,15572,15652,15653,15654,15655,15734,15735,15736,15737,15738,15739,15740,15741,15742,15743,15744,15824,15825,15826,15827,15828,15906,15907,15908,15909,15910,15911,15912,15913,15914,15915,15916,15996,15997,15998,15999,16000,16078,16079,16080,16081,16082,16083,16084,16085,16086,16087,16088,16168,16169,16170,16171,16249,16250,16251,16252,16253,16254,16255,16256,16257,16258,16259,16260,16340,16341,16342,16343,16421,16422,16423,16424,16425,16426,16427,16428,16429,16430,16431,16432,16512,16513,16514,16515,16593,16594,16595,16596,16597,16598,16599,16600,16601,16602,16603,16604,16684,16685,16686,16687,16766,16767,16768,16769,16770,16771,16772,16773,16774,16775,16776,16856,16857,16858,16859,16939,16940,16941,16942,16943,16944,16945,16946,16947,16948,17028,17029,17030,17031,17114,17115,17116,17117,17118,17119,17120,17200,17201,17202,17203,17286,17287,17288,17289,17290,17291,17292,17372,17373,17374,17375,17456,17461,17462,17463,17464,17544,17545,17546,17547,17548,17629,17630,17716,17717,17718,17719,17720,17721,17801,17802,17803,17804,17888,17889,17890,17891,17892,17893,17973,17974,17975,17976,17977,17978,17979,17980,18060,18061,18062,18063,18064,18065,18145,18146,18147,18148,18149,18150,18151,18152,18232,18233,18234,18235,18236,18237,18238,18317,18318,18319,18320,18321,18322,18323,18324,18404,18405,18406,18407,18408,18409,18410,18411,18489,18490,18491,18492,18493,18494,18495,18496,18576,18577,18578,18579,18580,18581,18582,18583,18584,18660,18661,18662,18663,18664,18665,18666,18667,18668,18748,18749,18750,18751,18752,18753,18754,18755,18756,18832,18833,18834,18835,18836,18837,18838,18839,18840,18920,18921,18922,18923,18924,18925,18926,18927,18928,19004,19005,19006,19007,19008,19009,19010,19011,19012,19092,19093,19094,19095,19096,19097,19098,19099,19176,19177,19178,19179,19180,19181,19182,19183,19184,19264,19265,19266,19267,19268,19269,19348,19349,19350,19351,19352,19353,19354,19355,19356,19394,19395,19436,19437,19438,19439,19440,19441,19520,19521,19522,19523,19524,19525,19526,19527,19528,19608,19609,19610,19611,19612,19613,19692,19693,19694,19695,19696,19697,19698,19699,19700,19780,19781,19782,19783,19784,19864,19865,19866,19867,19868,19869,19870,19871,19872,19952,19953,19954,19955,19956,20036,20037,20038,20039,20040,20041,20042,20043,20044,20124,20125,20126,20127,20128,20207,20208,20209,20210,20211,20212,20213,20214,20215,20216,20296,20297,20298,20299,20300,20378,20379,20380,20381,20382,20383,20384,20385,20386,20387,20388,20468,20469,20470,20471,20549,20550,20551,20552,20553,20554,20555,20556,20557,20558,20559,20560,20640,20641,20642,20643,20721,20722,20723,20724,20725,20726,20727,20728,20729,20730,20731,20732,20812,20813,20814,20815,20894,20895,20896,20897,20898,20899,20900,20901,20902,20903,20904,20984,20985,20986,20987,21067,21068,21069,21070,21071,21072,21073,21074,21075,21076,21156,21157,21158,21159,21240,21241,21242,21243,21244,21245,21246,21247,21248,21328,21329,21330,21331,21412,21413,21414,21415,21416,21417,21418,21419,21420,21500,21501,21502,21503,21584,21585,21586,21587,21588,21589,21590,21591,21592,21672,21673,21674,21675,21756,21757,21758,21759,21760,21761,21762,21763,21764,21844,21845,21846,21847,21928,21929,21930,21931,21932,21933,21934,21935,21936,22016,22017,22018,22019,22020,22101,22102,22103,22104,22105,22106,22107,22108,22188,22189,22190,22191,22192,22273,22274,22275,22276,22277,22278,22279,22280,22360,22361,22362,22363,22364,22445,22446,22447,22448,22449,22450,22451,22452,22532,22533,22534,22535,22617,22618,22619,22620,22621,22622,22623,22624,22704,22705,22706,22707,22789,22790,22791,22792,22793,22794,22795,22796,22876,22877,22878,22879,22960,22961,22962,22963,22964,22965,22966,22967,22968,23048,23049,23050,23051,23131,23132,23133,23134,23135,23136,23137,23138,23139,23140,23220,23221,23222,23223,23303,23304,23305,23306,23307,23308,23309,23310,23311,23312,23392,23393,23394,23395,23475,23476,23477,23478,23479,23480,23481,23482,23483,23484,23564,23565,23566,23567,23647,23648,23649,23650,23651,23652,23653,23654,23655,23656,23736,23737,23738,23739,23819,23820,23821,23822,23823,23824,23825,23826,23827,23828,23908,23909,23910,23911,23991,23992,23993,23994,23995,23996,23997,23998,23999,24000,24080,24081,24082,24083,24084,24164,24165,24166,24167,24168,24169,24170,24171,24172,24252,24253,24254,24255,24256,24337,24338,24339,24340,24341,24342,24343,24344,24424,24425,24426,24427,24428,24596,24597,24598,24599,24768,24769,24770,24852,24853,24854,24855,24856,24857,24858,24859,24860,24940,24941,25025,25026,25027,25028,25029,25030,25031,25032,25197,25198,25199,25200,25201,25202,25203,25204,25287,25369,25370,25371,25372,25373,25374,25375,25376,25456,25457,25458,25459,25541,25542,25543,25544,25545,25546,25547,25548,25628,25629,25630,25631,25713,25714,25715,25716,25717,25718,25719,25720,25800,25801,25802,25803,25884,25885,25886,25887,25888,25889,25890,25891,25892,25972,25973,25974,26056,26057,26058,26059,26060,26061,26062,26063,26064,26144,26145,26146,26229,26230,26231,26232,26233,26234,26235,26236,26316,26317,26318,26401,26402,26403,26404,26405,26406,26407,26408,26488,26489,26490,26573,26574,26575,26576,26577,26578,26579,26580,26660,26661,26745,26746,26747,26748,26749,26750,26751,26752,26832,26833,26917,26918,26919,26920,26921,26922,26923,26924,27004,27089,27090,27091,27092,27093,27094,27095,27096,27176,27261,27262,27263,27264,27265,27266,27267,27268,27348,27432,27433,27434,27435,27436,27437,27438,27439,27440,27520,27604,27605,27606,27607,27608,27609,27610,27611,27612,27692,27693,27777,27778,27779,27780,27781,27782,27783,27784,27864,27865,27949,27950,27951,27952,27953,27954,27955,27956,28036,28121,28122,28123,28124,28125,28126,28127,28128,28208,28293,28294,28295,28296,28297,28298,28299,28300,28380,28465,28466,28467,28468,28469,28470,28471,28472,28552,28637,28638,28639,28640,28641,28642,28643,28644,28724,28809,28810,28811,28812,28813,28814,28815,28816,28896,28981,28982,28983,28984,28985,28986,28987,28988,29068,29069,29153,29154,29155,29156,29157,29158,29159,29160,29240,29241,29242,29324,29325,29326,29327,29328,29329,29330,29331,29332,29412,29413,29414,29415,29495,29496,29497,29498,29499,29500,29501,29502,29503,29504,29584,29585,29586,29587,29667,29668,29669,29670,29671,29672,29673,29674,29675,29676,29756,29757,29758,29759,29839,29840,29841,29842,29843,29844,29845,29846,29847,29848,29928,29929,29930,29931,30010,30011,30012,30013,30014,30015,30016,30017,30018,30019,30020,30100,30101,30102,30182,30183,30184,30185,30186,30187,30188,30189,30190,30191,30192,30272,30273,30355,30356,30357,30358,30359,30360,30361,30362,30363,30364,30444,30445,30527,30528,30529,30530,30531,30532,30533,30534,30535,30536,30616,30617,30699,30700,30701,30702,30703,30704,30705,30706,30707,30708,30788,30789,30871,30872,30873,30874,30875,30876,30877,30878,30879,30880,30960,30961,31044,31045,31046,31047,31048,31049,31050,31051,31052,31132,31133,31216,31217,31218,31219,31220,31221,31222,31223,31224,31304,31305,31306,31388,31389,31390,31391,31392,31393,31394,31395,31396,31476,31477,31478,31560,31561,31562,31563,31564,31565,31566,31567,31568,31648,31649,31733,31734,31735,31736,31737,31738,31739,31740,31820,31821,31905,31906,31907,31908,31909,31910,31911,31912,31992,31993,32078,32079,32080,32081,32082,32083,32084,32164,32165,32250,32251,32252,32253,32254,32255,32256,32336,32422,32423,32424,32425,32426,32427,32428,32594,32595,32596,32597,32598,32599,32600,33595,33596,33597,33604,33605,33606,33607,33608,33609,33613,33614,33615,33616,33617,33618,33619,33620,33621,33622,33712,33768,33787,33788,33789,33790,33791,33792,33795,33796,33797,33798,33799,33800,33801,33802,33803,33804,33884,33885,33970,33971,33972,33973,33974,33975,33976,34056,34057,34139,34140,34141,34142,34143,34144,34145,34146,34147,34148,34228,34229,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34400,34482,34483,34484,34485,34486,34487,34488,34489,34490,34491,34492,34572,34655,34656,34657,34658,34659,34660,34661,34662,34663,34664,34744,34828,34829,34830,34831,34832,34833,34834,34835,34836,34916,35001,35002,35003,35004,35005,35006,35007,35008,35088,35089,35090,35173,35174,35175,35176,35177,35178,35179,35180,35260,35261,35262,35263,35264,35265,35266,35345,35346,35347,35348,35349,35350,35351,35352,35432,35433,35434,35435,35436,35437,35438,35439,35517,35518,35519,35520,35521,35522,35523,35524,35604,35605,35606,35607,35608,35609,35610,35611,35688,35689,35690,35691,35692,35693,35694,35695,35696,35776,35777,35778,35779,35780,35781,35782,35783,35784,35861,35862,35863,35864,35865,35866,35867,35868,35948,35949,35950,35951,35952,35953,35954,35955,35956,36031,36034,36035,36036,36037,36038,36039,36040,36120,36121,36122,36123,36124,36125,36126,36127,36128,36203,36206,36207,36208,36209,36210,36211,36212,36292,36293,36294,36295,36296,36297,36298,36299,36378,36379,36380,36381,36382,36383,36384,36464,36465,36466,36467,36468,36469,36470,36549,36550,36551,36552,36553,36554,36555,36556,36636,36637,36638,36639,36721,36722,36723,36724,36725,36726,36727,36728,36808,36809,36810,36893,36894,36895,36896,36897,36898,36899,36900,36980,36981,36982,37064,37065,37066,37067,37068,37069,37070,37071,37072,37152,37153,37154,37235,37236,37237,37238,37239,37240,37241,37242,37243,37244,37324,37325,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37496,37497,37580,37581,37582,37583,37584,37585,37586,37587,37588,37668,37669,37753,37754,37755,37756,37757,37758,37759,37760,37840,37841,37925,37926,37927,37928,37929,37930,37931,37932,38012,38097,38098,38099,38100,38101,38102,38103,38104,38184,38269,38270,38271,38272,38273,38274,38275,38276,38356,38441,38442,38443,38444,38445,38446,38447,38448,38528,38612,38613,38614,38615,38616,38617,38618,38619,38620,38700,38783,38784,38785,38786,38787,38788,38789,38790,38791,38792,38872,38957,38958,38959,38960,38961,38962,38963,38964,39044,39128,39129,39130,39131,39132,39133,39134,39135,39136,39297,39299,39300,39301,39302,39303,39304,39305,39306,39307,39308,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39641,39642,39643,39644,39645,39646,39647,39648,39649,39650,39651,39652,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,39996,40161,40162,40163,40164,40165,40166,40167,40168,40334,40335,40336,40337,40338,40339,40340,40506,40507,40508,40509,40510,40511,40512,40678,40679,40680,40681,40682,40683,40684,40764,40770,40850,40851,40852,40853,40854,40855,40856,40936,40937,40938,40939,40940,40941,40942,40943,41022,41023,41024,41025,41026,41027,41028,41108,41109,41110,41111,41112,41113,41114,41115,41193,41194,41195,41196,41197,41198,41199,41200,41280,41281,41282,41283,41284,41285,41286,41287,41365,41366,41367,41368,41369,41370,41371,41372,41452,41453,41454,41455,41456,41457,41458,41459,41537,41538,41539,41540,41541,41542,41543,41544,41624,41625,41626,41627,41709,41710,41711,41712,41713,41714,41715,41716,41796,41797,41798,41881,41882,41883,41884,41885,41886,41887,41888,41968,41969,42053,42054,42055,42056,42057,42058,42059,42060,42140,42141,42225,42226,42227,42228,42229,42230,42231,42232,42312,42313,42397,42398,42399,42400,42401,42402,42403,42404,42484,42485,42569,42570,42571,42572,42573,42574,42575,42576,42656,42657,42741,42742,42743,42744,42745,42746,42747,42748,42828,42829,42913,42914,42915,42916,42917,42918,42919,42920,43000,43001,43002,43085,43086,43087,43088,43089,43090,43091,43092,43172,43173,43174,43257,43258,43259,43260,43261,43262,43263,43264,43344,43345,43346,43429,43430,43431,43432,43433,43434,43435,43436,43516,43517,43518,43601,43602,43603,43604,43605,43606,43607,43608,43688,43689,43690,43773,43774,43775,43776,43777,43778,43779,43780,43860,43861,43862,43863,43945,43946,43947,43948,43949,43950,43951,43952,44032,44033,44034,44035,44036,44117,44118,44119,44120,44121,44122,44123,44124,44204,44205,44206,44207,44208,44209,44289,44290,44291,44292,44293,44294,44295,44296,44376,44377,44378,44379,44380,44381,44461,44462,44463,44464,44465,44466,44467,44468,44548,44549,44550,44551,44552,44632,44633,44634,44635,44636,44637,44638,44639,44640,44720,44721,44722,44723,44804,44805,44806,44807,44808,44809,44810,44811,44812,44892,44893,44894,44977,44978,44979,44980,44981,44982,44983,44984,45064,45065,45149,45150,45151,45152,45153,45154,45155,45156,45236,45237,45263,45264,45321,45322,45323,45324,45325,45326,45327,45328,45408,45409,45433,45434,45435,45436,45437,45438,45493,45494,45495,45496,45497,45498,45499,45500,45580,45581,45604,45605,45606,45607,45608,45609,45610,45611,45665,45666,45667,45668,45669,45670,45671,45672,45752,45753,45776,45777,45778,45779,45780,45781,45782,45837,45838,45839,45840,45841,45842,45843,45844,45924,45925,45949,45950,45951,45952,45953,46009,46010,46011,46012,46013,46014,46015,46016,46096,46097,46121,46122,46123,46124,46181,46182,46183,46184,46185,46186,46187,46188,46268,46269,46293,46294,46295,46296,46352,46353,46354,46355,46356,46357,46358,46359,46360,46440,46441,46466,46467,46523,46524,46525,46526,46527,46528,46529,46530,46531,46532,46612,46613,46695,46696,46697,46698,46699,46700,46701,46702,46703,46704,46784,46785,46786,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46956,46957,46958,47039,47040,47041,47042,47043,47044,47045,47046,47047,47048,47128,47129,47211,47212,47213,47214,47215,47216,47217,47218,47219,47220,47300,47301,47382,47383,47384,47385,47386,47387,47388,47389,47390,47391,47392,47472,47473,47553,47554,47555,47556,47557,47558,47559,47560,47561,47562,47563,47564,47644,47645,47725,47726,47727,47728,47729,47730,47731,47732,47733,47734,47735,47736,47816,47817,47897,47898,47899,47900,47901,47902,47903,47904,47905,47906,47907,47908,47988,47989,48069,48070,48071,48072,48073,48074,48075,48076,48077,48078,48079,48080,48160,48161,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48332,48333,48413,48414,48415,48416,48417,48418,48419,48420,48421,48422,48423,48424,48504,48505,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48596,48676,48677,48757,48758,48759,48760,48761,48762,48763,48764,48765,48766,48767,48768,48848,48849,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,49020,49021,49103,49104,49105,49106,49107,49108,49109,49110,49111,49112,49192,49193,49194,49247,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49364,49365,49366,49417,49418,49419,49420,49421,49447,49448,49449,49450,49451,49452,49453,49454,49455,49456,49536,49537,49538,49588,49589,49590,49591,49592,49593,49594,49619,49620,49621,49622,49623,49624,49625,49626,49627,49628,49708,49709,49710,49760,49761,49762,49763,49764,49765,49791,49792,49793,49794,49795,49796,49797,49798,49799,49800,49880,49881,49882,49883,49933,49934,49962,49963,49964,49965,49966,49967,49968,49969,49970,49971,49972,50052,50053,50054,50055,50134,50135,50136,50137,50138,50139,50140,50141,50142,50143,50144,50224,50225,50226,50227,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50396,50397,50398,50399,50478,50479,50480,50481,50482,50483,50484,50485,50486,50487,50488,50568,50569,50570,50650,50651,50652,50653,50654,50655,50656,50657,50658,50659,50660,50740,50741,50823,50824,50825,50826,50827,50828,50829,50830,50831,50832,50912,51084,51256,51341,51342,51343,51344,51345,51346,51347,51348,51428,51600],\"plateau\":[587,759,931,1103,1275,1447,1616,1617,1618,1619,1620,1621,1622,1788,1789,1790,1791,1792,1793,1794,1963,2933,3104,3105,3106,3275,3276,3277,3278,3279,3447,3448,3449,3450,3451,3620,3621,3622,6958,7129,7130,7131,7302,7303,7304,7474,7475,7476,7646,7647,7648,7819,9036,9205,9206,9207,9208,9209,9210,9211,9377,9378,9379,9380,9381,9382,9383,9551,9552,9553,9554,9555,9724,12582,12583,12584,12585,12586,12753,12754,12755,12756,12757,12758,12759,12924,12925,12926,12927,12928,12929,12930,12931,12932,12953,12954,12955,12956,13087,13095,13096,13097,13098,13099,13100,13101,13102,13103,13104,13124,13125,13126,13127,13128,13129,13258,13259,13260,13263,13266,13267,13268,13269,13270,13271,13272,13273,13274,13275,13297,13298,13299,13300,13301,13302,13303,13429,13430,13431,13432,13433,13434,13435,13436,13437,13438,13439,13440,13441,13442,13443,13444,13445,13446,13470,13471,13472,13473,13474,13475,13476,13600,13601,13602,13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618,13644,13645,13646,13647,13648,13649,13772,13773,13774,13775,13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13818,13819,13820,13943,13944,13945,13946,13947,13948,13949,13950,13951,13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13976,13977,13978,14114,14115,14116,14117,14118,14119,14120,14121,14122,14123,14124,14125,14126,14127,14128,14129,14130,14131,14132,14133,14147,14148,14149,14150,14151,14287,14288,14289,14290,14291,14292,14293,14294,14295,14296,14297,14298,14299,14300,14301,14302,14303,14304,14318,14319,14320,14321,14322,14323,14324,14325,14464,14465,14466,14467,14490,14491,14661,14662,14663,14665,14666,14667,14668,14669,14670,14671,14833,14834,14836,14837,14838,14839,14840,14841,14842,14843,14844,15005,15007,15008,15009,15010,15011,15012,15013,15014,15015,15016,15017,15177,15179,15180,15181,15182,15183,15184,15185,15186,15187,15188,15189,15348,15349,15351,15352,15353,15354,15355,15356,15357,15358,15359,15360,15361,15520,15521,15524,15525,15526,15527,15528,15529,15530,15531,15532,15533,15691,15692,15693,15697,15698,15699,15700,15701,15702,15703,15705,15861,15862,15863,15864,15865,15866,15871,15876,16032,16033,16034,16035,16036,16037,16038,16039,16043,16047,16048,16059,16060,16204,16205,16206,16207,16208,16209,16210,16211,16212,16213,16214,16215,16216,16217,16218,16219,16230,16231,16232,16233,16376,16377,16378,16379,16380,16381,16382,16383,16384,16385,16386,16387,16388,16389,16390,16402,16403,16404,16405,16406,16548,16549,16550,16551,16552,16553,16554,16555,16556,16557,16572,16573,16574,16575,16576,16577,16578,16721,16722,16723,16724,16725,16726,16727,16728,16743,16744,16745,16746,16747,16748,16749,16750,16896,16897,16898,16899,16914,16915,16916,16917,16918,16919,16920,16921,16922,17085,17086,17087,17088,17089,17090,17091,17092,17093,17256,17257,17258,17259,17260,17261,17262,17263,17264,17265,17428,17429,17430,17431,17432,17433,17434,17600,17601,17602,17603,17604,17605,39292,39293,39294,39295,39296,39463,39464,39465,39466,39467,39635,39636,39637,39638,39807,39808,39809,39810,39979,39980,39981,39982,40151,40152,40153,40154,40323,40324,40325,40326,40327,40330,40496,40497,40498,40499,40500,40501,40502,40503,40672,40673,40674,40675,40676,40845,40846,40847,40848,41018,41019,41020,45359,45531,45703,45875,46047,46219,46391,46563,46735,46906,46907,46908,47078,47079,47080,47081,47250,47251,47252,47253,47424,49045,49046,49216,49217,49218,49219,49220,49386,49387,49388,49389,49390,49391,49392,49393,49558,49559,49560,49561,49562,49563,49564,49565,49566,49731,49732,49733,49734,49735,49736,49737,49903,49904,49905,49906,49907,49908,50075,50076,50077,50078,50079,50080,50247,50248,50249,50250,50251,50252,50419,50420,50421,50422,50423,50424,50592,50593,50594,50595],\"musicAreas\":[{\"x\":4,\"y\":145,\"w\":81,\"h\":36,\"id\":\"forest\"},{\"x\":1,\"y\":195,\"w\":84,\"h\":58,\"id\":\"village\"},{\"x\":112,\"y\":193,\"w\":58,\"h\":50,\"id\":\"cave\"},{\"x\":110,\"y\":104,\"w\":60,\"h\":20,\"id\":\"cave\"},{\"x\":2,\"y\":265,\"w\":84,\"h\":37,\"id\":\"beach\"},{\"x\":1,\"y\":1,\"w\":113,\"h\":60,\"id\":\"lavaland\"},{\"x\":140,\"y\":48,\"w\":29,\"h\":25,\"id\":\"boss\"},{\"x\":4,\"y\":71,\"w\":81,\"h\":62,\"id\":\"desert\"},{\"x\":110,\"y\":81,\"w\":60,\"h\":20,\"id\":\"lavaland\"},{\"x\":140,\"y\":24,\"w\":30,\"h\":16,\"id\":\"desert\"},{\"x\":112,\"y\":156,\"w\":30,\"h\":16,\"id\":\"beach\"},{\"x\":113,\"y\":250,\"w\":57,\"h\":27,\"id\":\"desert\"},{\"x\":150,\"y\":14,\"w\":10,\"h\":8,\"id\":\"desert\"},{\"x\":145,\"y\":156,\"w\":20,\"h\":16,\"id\":\"lavaland\"},{\"x\":146,\"y\":176,\"w\":20,\"h\":16,\"id\":\"lavaland\"}],\"tilesize\":16}"
  },
  {
    "path": "client/sprites/agent.json",
    "content": "{\r\t\"id\": \"agent\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/arrow.json",
    "content": "{\n\t\"id\": \"arrow\",\n\t\"width\": 14,\n\t\"height\": 14,\n\t\"animations\": {\n\t\t\"idle_down\": {\n\t\t\t\"length\": 1,\n\t\t\t\"row\": 0\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "client/sprites/axe.json",
    "content": "{\r\t\"id\": \"axe\",\r\t\"width\": 48,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -16,\r\t\"offset_y\": -20\r}\r"
  },
  {
    "path": "client/sprites/bat.json",
    "content": "{\r\t\"id\": \"bat\",\r\t\"width\": 32,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -24\r}\r"
  },
  {
    "path": "client/sprites/beachnpc.json",
    "content": "{\r\t\"id\": \"beachnpc\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/bluesword.json",
    "content": "{\r\t\"id\": \"bluesword\",\r\t\"width\": 48,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -16,\r\t\"offset_y\": -20\r}\r"
  },
  {
    "path": "client/sprites/boss.json",
    "content": "{\r\t\"id\": \"boss\",\r\t\"width\": 64,\r\t\"height\": 72,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 8\r\t\t},\r\t\t\"Group 5\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 9\r\t\t}\r\t},\r\t\"offset_x\": -24,\r\t\"offset_y\": -36\r}\r"
  },
  {
    "path": "client/sprites/chest.json",
    "content": "{\r\t\"id\": \"chest\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 1,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/clotharmor.json",
    "content": "{\r\t\"id\": \"clotharmor\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/coder.json",
    "content": "{\r\t\"id\": \"coder\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -7\r}\r"
  },
  {
    "path": "client/sprites/crab.json",
    "content": "{\r\t\"id\": \"crab\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"death\": {\r\t\t\t\"length\": 8,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"atk_right\": {\r\t\t\t\"length\": 7,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 8,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 8,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 8\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 7,\r\t\t\t\"row\": 9\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/death.json",
    "content": "{\r\t\"id\": \"death\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"death\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -4\r}\r"
  },
  {
    "path": "client/sprites/deathknight.json",
    "content": "{\r\t\"id\": \"deathknight\",\r\t\"width\": 42,\r\t\"height\": 42,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -13,\r\t\"offset_y\": -17\r}\r"
  },
  {
    "path": "client/sprites/desertnpc.json",
    "content": "{\r\t\"id\": \"desertnpc\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/eye.json",
    "content": "{\r\t\"id\": \"eye\",\r\t\"width\": 40,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 14,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 14,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 8,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 14,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -12,\r\t\"offset_y\": -18\r}\r"
  },
  {
    "path": "client/sprites/firefox.json",
    "content": "{\r\t\"id\": \"firefox\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 8,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/forestnpc.json",
    "content": "{\r\t\"id\": \"forestnpc\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/goblin.json",
    "content": "{\r\t\"id\": \"goblin\",\r\t\"width\": 26,\r\t\"height\": 26,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -5,\r\t\"offset_y\": -9\r}\r"
  },
  {
    "path": "client/sprites/goldenarmor.json",
    "content": "{\r\t\"id\": \"goldenarmor\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/goldensword.json",
    "content": "{\r\t\"id\": \"goldensword\",\r\t\"width\": 48,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -16,\r\t\"offset_y\": -20\r}\r"
  },
  {
    "path": "client/sprites/guard.json",
    "content": "{\r\t\"id\": \"guard\",\r\t\"width\": 25,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -5,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/hand.json",
    "content": "{\r\t\"id\": \"hand\",\r\t\"width\": 14,\r\t\"height\": 14,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 1,\r\t\t\t\"row\": 0\r\t\t}\r\t}\r}\r"
  },
  {
    "path": "client/sprites/impact.json",
    "content": "{\r\t\"id\": \"impact\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 1,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-axe.json",
    "content": "{\r\t\"id\": \"item-axe\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-bluesword.json",
    "content": "{\r\t\"id\": \"item-bluesword\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-burger.json",
    "content": "{\r\t\"id\": \"item-burger\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-cake.json",
    "content": "{\r\t\"id\": \"item-cake\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -6\r}\r"
  },
  {
    "path": "client/sprites/item-clotharmor.json",
    "content": "{\r\t\"id\": \"item-clotharmor\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-firepotion.json",
    "content": "{\r\t\"id\": \"item-firepotion\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-flask.json",
    "content": "{\r\t\"id\": \"item-flask\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-goldenarmor.json",
    "content": "{\r\t\"id\": \"item-goldenarmor\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-goldensword.json",
    "content": "{\r\t\"id\": \"item-goldensword\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-leatherarmor.json",
    "content": "{\r\t\"id\": \"item-leatherarmor\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-mailarmor.json",
    "content": "{\r\t\"id\": \"item-mailarmor\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-morningstar.json",
    "content": "{\r\t\"id\": \"item-morningstar\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-platearmor.json",
    "content": "{\r\t\"id\": \"item-platearmor\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-redarmor.json",
    "content": "{\r\t\"id\": \"item-redarmor\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-redsword.json",
    "content": "{\r\t\"id\": \"item-redsword\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-sword1.json",
    "content": "{\r\t\"id\": \"item-sword1\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/item-sword2.json",
    "content": "{\r\t\"id\": \"item-sword2\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/king.json",
    "content": "{\r\t\"id\": \"king\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/lavanpc.json",
    "content": "{\r\t\"id\": \"lavanpc\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/leatherarmor.json",
    "content": "{\r\t\"id\": \"leatherarmor\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/loot.json",
    "content": "{\r\t\"id\": \"loot\",\r\t\"width\": 14,\r\t\"height\": 14,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 1,\r\t\t\t\"row\": 0\r\t\t}\r\t}\r}\r"
  },
  {
    "path": "client/sprites/mailarmor.json",
    "content": "{\r\t\"id\": \"mailarmor\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/morningstar.json",
    "content": "{\r\t\"id\": \"morningstar\",\r\t\"width\": 38,\r\t\"height\": 38,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -11,\r\t\"offset_y\": -15\r}\r"
  },
  {
    "path": "client/sprites/nyan.json",
    "content": "{\r\t\"id\": \"nyan\",\r\t\"width\": 49,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -22,\r\t\"offset_y\": -6\r}\r"
  },
  {
    "path": "client/sprites/octocat.json",
    "content": "{\r\t\"id\": \"octocat\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/ogre.json",
    "content": "{\r\t\"id\": \"ogre\",\r\t\"width\": 48,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -16,\r\t\"offset_y\": -24\r}\r"
  },
  {
    "path": "client/sprites/platearmor.json",
    "content": "{\r\t\"id\": \"platearmor\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/priest.json",
    "content": "{\r\t\"id\": \"priest\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/rat.json",
    "content": "{\r\t\"id\": \"rat\",\r\t\"width\": 48,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"death\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"atk_right\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 8\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 9\r\t\t}\r\t}\r}\r"
  },
  {
    "path": "client/sprites/redarmor.json",
    "content": "{\r\t\"id\": \"redarmor\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/redsword.json",
    "content": "{\r\t\"id\": \"redsword\",\r\t\"width\": 48,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -16,\r\t\"offset_y\": -20\r}\r"
  },
  {
    "path": "client/sprites/rick.json",
    "content": "{\r\t\"id\": \"rick\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/scientist.json",
    "content": "{\r\t\"id\": \"scientist\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/shadow16.json",
    "content": "{\r\t\"id\": \"shadow16\",\r\t\"width\": 16,\r\t\"height\": 16\r}\r"
  },
  {
    "path": "client/sprites/skeleton.json",
    "content": "{\r\t\"id\": \"skeleton\",\r\t\"width\": 48,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -16,\r\t\"offset_y\": -20\r}\r"
  },
  {
    "path": "client/sprites/skeleton2.json",
    "content": "{\r\t\"id\": \"skeleton2\",\r\t\"width\": 48,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -16,\r\t\"offset_y\": -20\r}\r"
  },
  {
    "path": "client/sprites/snake.json",
    "content": "{\r\t\"id\": \"snake\",\r\t\"width\": 28,\r\t\"height\": 28,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -6,\r\t\"offset_y\": -10\r}\r"
  },
  {
    "path": "client/sprites/sorcerer.json",
    "content": "{\r\t\"id\": \"sorcerer\",\r\t\"width\": 26,\r\t\"height\": 26,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -5,\r\t\"offset_y\": -9\r}\r"
  },
  {
    "path": "client/sprites/sparks.json",
    "content": "{\r\t\"id\": \"sparks\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"idle\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": 0,\r\t\"offset_y\": 0\r}\r"
  },
  {
    "path": "client/sprites/spectre.json",
    "content": "{\r\t\"id\": \"spectre\",\r\t\"width\": 34,\r\t\"height\": 34,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 8,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 8,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 8,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -9,\r\t\"offset_y\": -13\r}\r"
  },
  {
    "path": "client/sprites/sword.json",
    "content": "{\r\t\"id\": \"sword\",\r\t\"width\": 14,\r\t\"height\": 14,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 1,\r\t\t\t\"row\": 0\r\t\t}\r\t}\r}\r"
  },
  {
    "path": "client/sprites/sword1.json",
    "content": "{\r\t\"id\": \"sword1\",\r\t\"width\": 32,\r\t\"height\": 32,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -8,\r\t\"offset_y\": -12\r}\r"
  },
  {
    "path": "client/sprites/sword2.json",
    "content": "{\r\t\"id\": \"sword2\",\r\t\"width\": 48,\r\t\"height\": 48,\r\t\"animations\": {\r\t\t\"atk_right\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 5,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 8\r\t\t}\r\t},\r\t\"offset_x\": -16,\r\t\"offset_y\": -20\r}\r"
  },
  {
    "path": "client/sprites/talk.json",
    "content": "{\r\t\"id\": \"talk\",\r\t\"width\": 14,\r\t\"height\": 14,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 1,\r\t\t\t\"row\": 0\r\t\t}\r\t}\r}\r"
  },
  {
    "path": "client/sprites/target.json",
    "content": "{\r\t\"id\": \"target\",\r\t\"width\": 16,\r\t\"height\": 16,\r\t\"animations\": {\r\t\t\"move\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"atk\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t}\r\t}\r}\r"
  },
  {
    "path": "client/sprites/villagegirl.json",
    "content": "{\r\t\"id\": \"villagegirl\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/villager.json",
    "content": "{\r\t\"id\": \"villager\",\r\t\"width\": 24,\r\t\"height\": 24,\r\t\"animations\": {\r\t\t\"idle_down\": {\r\t\t\t\"length\": 2,\r\t\t\t\"row\": 0\r\t\t}\r\t},\r\t\"offset_x\": -4,\r\t\"offset_y\": -8\r}\r"
  },
  {
    "path": "client/sprites/wizard.json",
    "content": "{\r\t\"id\": \"wizard\",\r\t\"width\": 26,\r\t\"height\": 26,\r\t\"animations\": {\r\t\t\"death\": {\r\t\t\t\"length\": 3,\r\t\t\t\"row\": 0\r\t\t},\r\t\t\"atk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 1\r\t\t},\r\t\t\"atk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 2\r\t\t},\r\t\t\"atk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 3\r\t\t},\r\t\t\"walk_right\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 4\r\t\t},\r\t\t\"walk_up\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 5\r\t\t},\r\t\t\"walk_down\": {\r\t\t\t\"length\": 4,\r\t\t\t\"row\": 6\r\t\t},\r\t\t\"idle_right\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 7\r\t\t},\r\t\t\"idle_up\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 8\r\t\t},\r\t\t\"idle_down\": {\r\t\t\t\"length\": 6,\r\t\t\t\"row\": 9\r\t\t}\r\t},\r\t\"offset_x\": -5,\r\t\"offset_y\": -9\r}\r"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"BrowserQuest\"\n  , \"version\": \"0.0.1\"\n  , \"private\": false \n  , \"dependencies\": {\n    \"underscore\": \">0\"\n    , \"log\": \">0\"\n    , \"bison\": \">0\"\n    , \"websocket\": \">0\"\n    , \"websocket-server\": \">0\"\n    , \"sanitizer\": \">0\"\n    , \"memcache\": \">0\"\n  }\n}\n"
  },
  {
    "path": "server/README.md",
    "content": "BrowserQuest server documentation\n=================================\n\nThe game server currently runs on nodejs v0.4.7 (but should run fine on the latest stable as well) and requires the latest versions of the following npm libraries:\n\n- underscore\n- log\n- bison\n- websocket\n- websocket-server\n- sanitizer\n- memcache (only if you want metrics)\n\nAll of them can be installed via `npm install -d` (this will install a local copy of all the dependencies in the node_modules directory)\n\n\nConfiguration\n-------------\n\nThe server settings (number of worlds, number of players per world, etc.) can be configured.\nCopy `config_local.json-dist` to a new `config_local.json` file, then edit it. The server will override default settings with this file.\n\n\nDeployment\n----------\n\nIn order to deploy the server, simply copy the `server` and `shared` directories to the staging/production server.\n\nThen run `node server/js/main.js` in order to start the server.\n\n\nNote: the `shared` directory is the only one in the project which is a server dependency.\n\n\nMonitoring\n----------\n\nThe server has a status URL which can be used as a health check or simply as a way to monitor player population.\n\nSend a GET request to: `http://[host]:[port]/status`\n\nIt will return a JSON array containing the number of players in all instanced worlds on this game server.\n"
  },
  {
    "path": "server/config.json",
    "content": "{\n    \"port\": 8000,\n    \"debug_level\": \"info\",\n    \"nb_players_per_world\": 200,\n    \"nb_worlds\": 5,\n    \"map_filepath\": \"./server/maps/world_server.json\",\n    \"metrics_enabled\": false\n}"
  },
  {
    "path": "server/js/area.js",
    "content": "\nvar cls = require('./lib/class'),\n    _ = require('underscore'),\n    Utils = require('./utils'),\n    Types = require(\"../../shared/js/gametypes\");\n\nmodule.exports = Area = cls.Class.extend({\n    init: function(id, x, y, width, height, world) {\n        this.id = id;\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        this.world = world;\n        this.entities = [];\n        this.hasCompletelyRespawned = true;\n    },\n    \n    _getRandomPositionInsideArea: function() {\n        var pos = {},\n            valid = false;\n        \n        while(!valid) {\n            pos.x = this.x + Utils.random(this.width + 1);\n            pos.y = this.y + Utils.random(this.height + 1);\n            valid = this.world.isValidPosition(pos.x, pos.y);\n        }\n        return pos;\n    },\n    \n    removeFromArea: function(entity) {\n        var i = _.indexOf(_.pluck(this.entities, 'id'), entity.id);\n        this.entities.splice(i, 1);\n        \n        if(this.isEmpty() && this.hasCompletelyRespawned && this.empty_callback) {\n            this.hasCompletelyRespawned = false;\n            this.empty_callback();\n        }\n    },\n    \n    addToArea: function(entity) {\n        if(entity) {\n            this.entities.push(entity);\n            entity.area = this;\n            if(entity instanceof Mob) {\n                this.world.addMob(entity);\n            }\n        }\n        \n        if(this.isFull()) {\n            this.hasCompletelyRespawned = true;\n        }\n    },\n    \n    setNumberOfEntities: function(nb) {\n        this.nbEntities = nb;\n    },\n    \n    isEmpty: function() {\n        return !_.any(this.entities, function(entity) { return !entity.isDead });\n    },\n    \n    isFull: function() {\n        return !this.isEmpty() && (this.nbEntities === _.size(this.entities));\n    },\n    \n    onEmpty: function(callback) {\n        this.empty_callback = callback;\n    }\n});\n"
  },
  {
    "path": "server/js/character.js",
    "content": "\nvar cls = require(\"./lib/class\"),\n    Messages = require(\"./message\"),\n    Utils = require(\"./utils\"),\n    Properties = require(\"./properties\"),\n    Types = require(\"../../shared/js/gametypes\");\n\nmodule.exports = Character = Entity.extend({\n    init: function(id, type, kind, x, y) {\n        this._super(id, type, kind, x, y);\n        \n        this.orientation = Utils.randomOrientation();\n        this.attackers = {};\n        this.target = null;\n    },\n    \n    getState: function() {\n        var basestate = this._getBaseState(),\n            state = [];\n        \n        state.push(this.orientation);\n        if(this.target) {\n            state.push(this.target);\n        }\n        \n        return basestate.concat(state);\n    },\n    \n    resetHitPoints: function(maxHitPoints) {\n        this.maxHitPoints = maxHitPoints;\n        this.hitPoints = this.maxHitPoints;\n    },\n    \n    regenHealthBy: function(value) {\n        var hp = this.hitPoints,\n            max = this.maxHitPoints;\n            \n        if(hp < max) {\n            if(hp + value <= max) {\n                this.hitPoints += value;\n            }\n            else {\n                this.hitPoints = max;\n            }\n        }\n    },\n    \n    hasFullHealth: function() {\n        return this.hitPoints === this.maxHitPoints;\n    },\n    \n    setTarget: function(entity) {\n        this.target = entity.id;\n    },\n    \n    clearTarget: function() {\n        this.target = null;\n    },\n    \n    hasTarget: function() {\n        return this.target !== null;\n    },\n    \n    attack: function() {\n        return new Messages.Attack(this.id, this.target);\n    },\n    \n    health: function() {\n        return new Messages.Health(this.hitPoints, false);\n    },\n    \n    regen: function() {\n        return new Messages.Health(this.hitPoints, true);\n    },\n    \n    addAttacker: function(entity) {\n        if(entity) {\n            this.attackers[entity.id] = entity;\n        }\n    },\n    \n    removeAttacker: function(entity) {\n        if(entity && entity.id in this.attackers) {\n            delete this.attackers[entity.id];\n            log.debug(this.id +\" REMOVED ATTACKER \"+ entity.id);\n        }\n    },\n    \n    forEachAttacker: function(callback) {\n        for(var id in this.attackers) {\n            callback(this.attackers[id]);\n        }\n    }\n});"
  },
  {
    "path": "server/js/checkpoint.js",
    "content": "\nvar cls = require('./lib/class'),\n    _ = require('underscore'),\n    Utils = require('./utils'),\n    Types = require(\"../../shared/js/gametypes\");\n\nmodule.exports = Checkpoint = cls.Class.extend({\n    init: function(id, x, y, width, height) {\n        this.id = id;\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n    },\n    \n    getRandomPosition: function() {\n        var pos = {};\n        \n        pos.x = this.x + Utils.randomInt(0, this.width - 1);\n        pos.y = this.y + Utils.randomInt(0, this.height - 1);\n        return pos;\n    }\n});"
  },
  {
    "path": "server/js/chest.js",
    "content": "\nvar Utils = require('./utils'),\n    Types = require(\"../../shared/js/gametypes\");\n\nmodule.exports = Chest = Item.extend({\n    init: function(id, x, y) {\n        this._super(id, Types.Entities.CHEST, x, y);\n    },\n    \n    setItems: function(items) {\n        this.items = items;\n    },\n    \n    getRandomItem: function() {\n        var nbItems = _.size(this.items),\n            item = null;\n\n        if(nbItems > 0) {\n            item = this.items[Utils.random(nbItems)];\n        }\n        return item;\n    }\n});"
  },
  {
    "path": "server/js/chestarea.js",
    "content": "\nvar Area = require('./area'),\n    _ = require('underscore'),\n    Types = require(\"../../shared/js/gametypes\");\n\nmodule.exports = ChestArea = Area.extend({\n    init: function(id, x, y, width, height, cx, cy, items, world) {\n        this._super(id, x, y, width, height, world);\n        this.items = items;\n        this.chestX = cx;\n        this.chestY = cy;\n    },\n    \n    contains: function(entity) {\n        if(entity) {\n            return entity.x >= this.x\n                && entity.y >= this.y\n                && entity.x < this.x + this.width\n                && entity.y < this.y + this.height;\n        } else {\n            return false;\n        }\n    }\n});"
  },
  {
    "path": "server/js/entity.js",
    "content": "\nvar cls = require(\"./lib/class\"),\n    Messages = require('./message'),\n    Utils = require('./utils');\n\nmodule.exports = Entity = cls.Class.extend({\n    init: function(id, type, kind, x, y) {\n        this.id = parseInt(id);\n        this.type = type;\n        this.kind = kind;\n        this.x = x;\n        this.y = y;\n    },\n    \n    destroy: function() {\n\n    },\n    \n    _getBaseState: function() {\n        return [\n            parseInt(this.id),\n            this.kind,\n            this.x,\n            this.y\n        ];\n    },\n    \n    getState: function() {\n        return this._getBaseState();\n    },\n    \n    spawn: function() {\n        return new Messages.Spawn(this);\n    },\n    \n    despawn: function() {\n        return new Messages.Despawn(this.id);\n    },\n    \n    setPosition: function(x, y) {\n        this.x = x;\n        this.y = y;\n    },\n    \n    getPositionNextTo: function(entity) {\n        var pos = null;\n        if(entity) {\n            pos = {};\n            // This is a quick & dirty way to give mobs a random position\n            // close to another entity.\n            var r = Utils.random(4);\n            \n            pos.x = entity.x;\n            pos.y = entity.y;\n            if(r === 0)\n                pos.y -= 1;\n            if(r === 1)\n                pos.y += 1;\n            if(r === 2)\n                pos.x -= 1;\n            if(r === 3)\n                pos.x += 1;\n        }\n        return pos;\n    }\n});"
  },
  {
    "path": "server/js/format.js",
    "content": "\nvar _ = require('underscore'),\n    Types = require(\"../../shared/js/gametypes\");\n\n(function() {\n    FormatChecker = Class.extend({\n        init: function() {\n            this.formats = [];\n            this.formats[Types.Messages.HELLO] = ['s', 'n', 'n'],\n            this.formats[Types.Messages.MOVE] = ['n', 'n'],\n            this.formats[Types.Messages.LOOTMOVE] = ['n', 'n', 'n'],\n            this.formats[Types.Messages.AGGRO] = ['n'],\n            this.formats[Types.Messages.ATTACK] = ['n'],\n            this.formats[Types.Messages.HIT] = ['n'],\n            this.formats[Types.Messages.HURT] = ['n'],\n            this.formats[Types.Messages.CHAT] = ['s'],\n            this.formats[Types.Messages.LOOT] = ['n'],\n            this.formats[Types.Messages.TELEPORT] = ['n', 'n'],\n            this.formats[Types.Messages.ZONE] = [],\n            this.formats[Types.Messages.OPEN] = ['n'],\n            this.formats[Types.Messages.CHECK] = ['n']\n        },\n        \n        check: function(msg) {\n            var message = msg.slice(0),\n                type = message[0],\n                format = this.formats[type];\n            \n            message.shift();\n            \n            if(format) {    \n                if(message.length !== format.length) {\n                    return false;\n                }\n                for(var i = 0, n = message.length; i < n; i += 1) {\n                    if(format[i] === 'n' && !_.isNumber(message[i])) {\n                        return false;\n                    }\n                    if(format[i] === 's' && !_.isString(message[i])) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            else if(type === Types.Messages.WHO) {\n                // WHO messages have a variable amount of params, all of which must be numbers.\n                return message.length > 0 && _.all(message, function(param) { return _.isNumber(param) });\n            }\n            else {\n                log.error(\"Unknown message type: \"+type);\n                return false;\n            }\n        }\n    });\n\n    var checker = new FormatChecker;\n    \n    exports.check = checker.check.bind(checker);\n})();"
  },
  {
    "path": "server/js/formulas.js",
    "content": "\nvar Utils = require(\"./utils\");\n\nvar Formulas = {};\n\nFormulas.dmg = function(weaponLevel, armorLevel) {\n    var dealt = weaponLevel * Utils.randomInt(5, 10),\n        absorbed = armorLevel * Utils.randomInt(1, 3),\n        dmg =  dealt - absorbed;\n    \n    //console.log(\"abs: \"+absorbed+\"   dealt: \"+ dealt+\"   dmg: \"+ (dealt - absorbed));\n    if(dmg <= 0) {\n        return Utils.randomInt(0, 3);\n    } else {\n        return dmg;\n    }\n};\n\nFormulas.hp = function(armorLevel) {\n    var hp = 80 + ((armorLevel - 1) * 30);\n    return hp;\n};\n\nif(!(typeof exports === 'undefined')) {\n    module.exports = Formulas;\n}"
  },
  {
    "path": "server/js/item.js",
    "content": "\nmodule.exports = Item = Entity.extend({\n    init: function(id, kind, x, y) {\n        this._super(id, \"item\", kind, x, y);\n        this.isStatic = false;\n        this.isFromChest = false;\n    },\n    \n    handleDespawn: function(params) {\n        var self = this;\n        \n        this.blinkTimeout = setTimeout(function() {\n            params.blinkCallback();\n            self.despawnTimeout = setTimeout(params.despawnCallback, params.blinkingDuration);\n        }, params.beforeBlinkDelay);\n    },\n    \n    destroy: function() {\n        if(this.blinkTimeout) {\n            clearTimeout(this.blinkTimeout);\n        }\n        if(this.despawnTimeout) {\n            clearTimeout(this.despawnTimeout);\n        }\n        \n        if(this.isStatic) {\n            this.scheduleRespawn(30000);\n        }\n    },\n    \n    scheduleRespawn: function(delay) {\n        var self = this;\n        setTimeout(function() {\n            if(self.respawn_callback) {\n                self.respawn_callback();\n            }\n        }, delay);\n    },\n    \n    onRespawn: function(callback) {\n        this.respawn_callback = callback;\n    }\n});"
  },
  {
    "path": "server/js/lib/class.js",
    "content": "\n/* Simple JavaScript Inheritance\n * By John Resig http://ejohn.org/\n * MIT Licensed.\n */\n// Inspired by base2 and Prototype\nvar initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\\b_super\\b/ : /.*/;\n    \n// The base Class implementation (does nothing)\nClass = function() {};\n\n// Create a new Class that inherits from this class\nClass.extend = function(prop) {\n    var _super = this.prototype;\n    \n    // Instantiate a base class (but only create the instance,\n    // don't run the init constructor)\n    initializing = true;\n    var prototype = new this();\n    initializing = false;\n    \n    // Copy the properties over onto the new prototype\n    for (var name in prop) {\n        // Check if we're overwriting an existing function\n        prototype[name] = typeof prop[name] == \"function\" &&\n            typeof _super[name] == \"function\" && fnTest.test(prop[name]) ?\n            (function(name, fn){\n                return function() {\n                    var tmp = this._super;\n                   \n                    // Add a new ._super() method that is the same method\n                    // but on the super-class\n                    this._super = _super[name];\n                   \n                    // The method only need to be bound temporarily, so we\n                    // remove it when we're done executing\n                    var ret = fn.apply(this, arguments);\n                    this._super = tmp;\n                   \n                    return ret;\n                };\n            })(name, prop[name]) :\n            prop[name];\n    }\n    \n    // The dummy class constructor\n    Class = function () {\n        // All construction is actually done in the init method\n        if ( !initializing && this.init )\n            this.init.apply(this, arguments);\n    }\n    \n    // Populate our constructed prototype object\n    Class.prototype = prototype;\n    \n    // Enforce the constructor to be what we expect\n    Class.constructor = Class;\n    \n    // And make this class extendable\n    Class.extend = arguments.callee;\n    \n    return Class;\n};\n\nif(!(typeof exports === 'undefined')) {\n    exports.Class = Class;\n}\n\n"
  },
  {
    "path": "server/js/main.js",
    "content": "\nvar fs = require('fs'),\n    Metrics = require('./metrics');\n\n\nfunction main(config) {\n    var ws = require(\"./ws\"),\n        WorldServer = require(\"./worldserver\"),\n        Log = require('log'),\n        _ = require('underscore'),\n        server = new ws.MultiVersionWebsocketServer(config.port),\n        metrics = config.metrics_enabled ? new Metrics(config) : null;\n        worlds = [],\n        lastTotalPlayers = 0,\n        checkPopulationInterval = setInterval(function() {\n            if(metrics && metrics.isReady) {\n                metrics.getTotalPlayers(function(totalPlayers) {\n                    if(totalPlayers !== lastTotalPlayers) {\n                        lastTotalPlayers = totalPlayers;\n                        _.each(worlds, function(world) {\n                            world.updatePopulation(totalPlayers);\n                        });\n                    }\n                });\n            }\n        }, 1000);\n    \n    switch(config.debug_level) {\n        case \"error\":\n            log = new Log(Log.ERROR); break;\n        case \"debug\":\n            log = new Log(Log.DEBUG); break;\n        case \"info\":\n            log = new Log(Log.INFO); break;\n    };\n    \n    log.info(\"Starting BrowserQuest game server...\");\n    \n    server.onConnect(function(connection) {\n        var world, // the one in which the player will be spawned\n            connect = function() {\n                if(world) {\n                    world.connect_callback(new Player(connection, world));\n                }\n            };\n        \n        if(metrics) {\n            metrics.getOpenWorldCount(function(open_world_count) {\n                // choose the least populated world among open worlds\n                world = _.min(_.first(worlds, open_world_count), function(w) { return w.playerCount; });\n                connect();\n            });\n        }\n        else {\n            // simply fill each world sequentially until they are full\n            world = _.detect(worlds, function(world) {\n                return world.playerCount < config.nb_players_per_world;\n            });\n            world.updatePopulation();\n            connect();\n        }\n    });\n\n    server.onError(function() {\n        log.error(Array.prototype.join.call(arguments, \", \"));\n    });\n    \n    var onPopulationChange = function() {\n        metrics.updatePlayerCounters(worlds, function(totalPlayers) {\n            _.each(worlds, function(world) {\n                world.updatePopulation(totalPlayers);\n            });\n        });\n        metrics.updateWorldDistribution(getWorldDistribution(worlds));\n    };\n\n    _.each(_.range(config.nb_worlds), function(i) {\n        var world = new WorldServer('world'+ (i+1), config.nb_players_per_world, server);\n        world.run(config.map_filepath);\n        worlds.push(world);\n        if(metrics) {\n            world.onPlayerAdded(onPopulationChange);\n            world.onPlayerRemoved(onPopulationChange);\n        }\n    });\n    \n    server.onRequestStatus(function() {\n        return JSON.stringify(getWorldDistribution(worlds));\n    });\n    \n    if(config.metrics_enabled) {\n        metrics.ready(function() {\n            onPopulationChange(); // initialize all counters to 0 when the server starts\n        });\n    }\n    \n    process.on('uncaughtException', function (e) {\n        log.error('uncaughtException: ' + e);\n    });\n}\n\nfunction getWorldDistribution(worlds) {\n    var distribution = [];\n    \n    _.each(worlds, function(world) {\n        distribution.push(world.playerCount);\n    });\n    return distribution;\n}\n\nfunction getConfigFile(path, callback) {\n    fs.readFile(path, 'utf8', function(err, json_string) {\n        if(err) {\n            console.error(\"Could not open config file:\", err.path);\n            callback(null);\n        } else {\n            callback(JSON.parse(json_string));\n        }\n    });\n}\n\nvar defaultConfigPath = './server/config.json',\n    customConfigPath = './server/config_local.json';\n\nprocess.argv.forEach(function (val, index, array) {\n    if(index === 2) {\n        customConfigPath = val;\n    }\n});\n\ngetConfigFile(defaultConfigPath, function(defaultConfig) {\n    getConfigFile(customConfigPath, function(localConfig) {\n        if(localConfig) {\n            main(localConfig);\n        } else if(defaultConfig) {\n            main(defaultConfig);\n        } else {\n            console.error(\"Server cannot start without any configuration file.\");\n            process.exit(1);\n        }\n    });\n});\n"
  },
  {
    "path": "server/js/map.js",
    "content": "\nvar cls = require('./lib/class')\n    path = require('path'),\n    fs = require('fs'),\n    _ = require('underscore'),\n    Utils = require('./utils'),\n    Checkpoint = require('./checkpoint');\n\nmodule.exports = Map = cls.Class.extend({    \n    init: function(filepath) {\n    \tvar self = this;\n    \n    \tthis.isLoaded = false;\n    \n    \tpath.exists(filepath, function(exists) {\n            if(!exists) {\n                log.error(filepath + \" doesn't exist.\");\n                return;\n            }\n        \n            fs.readFile(filepath, function(err, file) {\n                var json = JSON.parse(file.toString());\n            \n                self.initMap(json);\n            });\n        });\n    },\n\n    initMap: function(map) {\n        this.width = map.width;\n        this.height = map.height;\n        this.collisions = map.collisions;\n        this.mobAreas = map.roamingAreas;\n        this.chestAreas = map.chestAreas;\n        this.staticChests = map.staticChests;\n        this.staticEntities = map.staticEntities;\n        this.isLoaded = true;\n        \n        // zone groups\n    \tthis.zoneWidth = 28;\n    \tthis.zoneHeight = 12;\n    \tthis.groupWidth = Math.floor(this.width / this.zoneWidth);\n        this.groupHeight = Math.floor(this.height / this.zoneHeight);\n    \n        this.initConnectedGroups(map.doors);\n        this.initCheckpoints(map.checkpoints);\n    \n        if(this.ready_func) {\n            this.ready_func();\n        }\n    },\n\n    ready: function(f) {\n    \tthis.ready_func = f;\n    },\n\n    tileIndexToGridPosition: function(tileNum) {\n        var x = 0,\n            y = 0;\n        \n        var getX = function(num, w) {\n            if(num == 0) {\n                return 0;\n            }\n            return (num % w == 0) ? w - 1 : (num % w) - 1;\n        }\n    \n        tileNum -= 1;\n        x = getX(tileNum + 1, this.width);\n        y = Math.floor(tileNum / this.width);\n    \n        return { x: x, y: y };\n    },\n\n    GridPositionToTileIndex: function(x, y) {\n        return (y * this.width) + x + 1;\n    },\n\n    generateCollisionGrid: function() {\n        this.grid = [];\n    \n        if(this.isLoaded) {\n            var tileIndex = 0;\n            for(var\tj, i = 0; i < this.height; i++) {\n                this.grid[i] = [];\n                for(j = 0; j < this.width; j++) {\n                    if(_.include(this.collisions, tileIndex)) {\n                        this.grid[i][j] = 1;\n                    } else {\n                        this.grid[i][j] = 0;\n                    }\n                    tileIndex += 1;\n                }\n            }\n            //log.info(\"Collision grid generated.\");\n        }\n    },\n\n    isOutOfBounds: function(x, y) {\n        return x <= 0 || x >= this.width || y <= 0 || y >= this.height;\n    },\n\n    isColliding: function(x, y) {\n        if(this.isOutOfBounds(x, y)) {\n            return false;\n        }\n        return this.grid[y][x] === 1;\n    },\n    \n    GroupIdToGroupPosition: function(id) {\n        var posArray = id.split('-');\n        \n        return pos(parseInt(posArray[0]), parseInt(posArray[1]));\n    },\n    \n    forEachGroup: function(callback) {\n        var width = this.groupWidth,\n            height = this.groupHeight;\n        \n        for(var x = 0; x < width; x += 1) {\n            for(var y = 0; y < height; y += 1) {\n                callback(x+'-'+y);\n            }\n        }\n    },\n    \n    getGroupIdFromPosition: function(x, y) {\n        var w = this.zoneWidth,\n            h = this.zoneHeight,\n            gx = Math.floor((x - 1) / w),\n            gy = Math.floor((y - 1) / h);\n\n        return gx+'-'+gy;\n    },\n    \n    getAdjacentGroupPositions: function(id) {\n        var self = this,\n            position = this.GroupIdToGroupPosition(id),\n            x = position.x,\n            y = position.y,\n            // surrounding groups\n            list = [pos(x-1, y-1), pos(x, y-1), pos(x+1, y-1),\n                    pos(x-1, y),   pos(x, y),   pos(x+1, y),\n                    pos(x-1, y+1), pos(x, y+1), pos(x+1, y+1)];\n        \n        // groups connected via doors\n        _.each(this.connectedGroups[id], function(position) {\n            // don't add a connected group if it's already part of the surrounding ones.\n            if(!_.any(list, function(groupPos) { return equalPositions(groupPos, position); })) {\n                list.push(position);\n            }\n        });\n        \n        return _.reject(list, function(pos) { \n            return pos.x < 0 || pos.y < 0 || pos.x >= self.groupWidth || pos.y >= self.groupHeight;\n        });\n    },\n    \n    forEachAdjacentGroup: function(groupId, callback) {\n        if(groupId) {\n            _.each(this.getAdjacentGroupPositions(groupId), function(pos) {\n                callback(pos.x+'-'+pos.y);\n            });\n        }\n    },\n    \n    initConnectedGroups: function(doors) {\n        var self = this;\n\n        this.connectedGroups = {};\n        _.each(doors, function(door) {\n            var groupId = self.getGroupIdFromPosition(door.x, door.y),\n                connectedGroupId = self.getGroupIdFromPosition(door.tx, door.ty),\n                connectedPosition = self.GroupIdToGroupPosition(connectedGroupId);\n            \n            if(groupId in self.connectedGroups) {\n                self.connectedGroups[groupId].push(connectedPosition);\n            } else {\n                self.connectedGroups[groupId] = [connectedPosition];\n            }\n        });\n    },\n    \n    initCheckpoints: function(cpList) {\n        var self = this;\n        \n        this.checkpoints = {};\n        this.startingAreas = [];\n        \n        _.each(cpList, function(cp) {\n            var checkpoint = new Checkpoint(cp.id, cp.x, cp.y, cp.w, cp.h);\n            self.checkpoints[checkpoint.id] = checkpoint; \n            if(cp.s === 1) {\n                self.startingAreas.push(checkpoint);\n            }\n        });\n    },\n    \n    getCheckpoint: function(id) {\n        return this.checkpoints[id];\n    },\n    \n    getRandomStartingPosition: function() {\n        var nbAreas = _.size(this.startingAreas);\n            i = Utils.randomInt(0, nbAreas-1);\n            area = this.startingAreas[i];\n        \n        return area.getRandomPosition();\n    }\n});\n\nvar pos = function(x, y) {\n    return { x: x, y: y };\n};\n\nvar equalPositions = function(pos1, pos2) {\n    return pos1.x === pos2.x && pos2.y === pos2.y;\n};\n"
  },
  {
    "path": "server/js/message.js",
    "content": "\nvar cls = require(\"./lib/class\"),\n    _ = require(\"underscore\"),\n    Utils = require(\"./utils\"),\n    Types = require(\"../../shared/js/gametypes\");\n\nvar Messages = {};\nmodule.exports = Messages;\n\nvar Message = cls.Class.extend({\n});\n\nMessages.Spawn = Message.extend({\n    init: function(entity) {\n        this.entity = entity;\n    },\n    serialize: function() {\n        var spawn = [Types.Messages.SPAWN];\n        return spawn.concat(this.entity.getState());\n    }\n});\n\nMessages.Despawn = Message.extend({\n    init: function(entityId) {\n        this.entityId = entityId;\n    },\n    serialize: function() {\n        return [Types.Messages.DESPAWN, this.entityId];\n    }\n});\n\nMessages.Move = Message.extend({\n    init: function(entity) {\n        this.entity = entity;\n    },\n    serialize: function() {\n        return [Types.Messages.MOVE,\n                this.entity.id,\n                this.entity.x,\n                this.entity.y];\n    }\n});\n\nMessages.LootMove = Message.extend({\n    init: function(entity, item) {\n        this.entity = entity;\n        this.item = item;\n    },\n    serialize: function() {\n        return [Types.Messages.LOOTMOVE,\n                this.entity.id,\n                this.item.id];\n    }\n});\n\nMessages.Attack = Message.extend({\n    init: function(attackerId, targetId) {\n        this.attackerId = attackerId;\n        this.targetId = targetId;\n    },\n    serialize: function() {\n        return [Types.Messages.ATTACK,\n                this.attackerId,\n                this.targetId];\n    }\n});\n\nMessages.Health = Message.extend({\n    init: function(points, isRegen) {\n        this.points = points;\n        this.isRegen = isRegen;\n    },\n    serialize: function() {\n        var health = [Types.Messages.HEALTH,\n                      this.points];\n        \n        if(this.isRegen) {\n            health.push(1);\n        }\n        return health;\n    }\n});\n\nMessages.HitPoints = Message.extend({\n    init: function(maxHitPoints) {\n        this.maxHitPoints = maxHitPoints;\n    },\n    serialize: function() {\n        return [Types.Messages.HP,\n                this.maxHitPoints];\n    }\n});\n\nMessages.EquipItem = Message.extend({\n    init: function(player, itemKind) {\n        this.playerId = player.id;\n        this.itemKind = itemKind;\n    },\n    serialize: function() {\n        return [Types.Messages.EQUIP,\n                this.playerId,\n                this.itemKind];\n    }\n});\n\nMessages.Drop = Message.extend({\n    init: function(mob, item) {\n        this.mob = mob;\n        this.item = item;\n    },\n    serialize: function() {\n        var drop = [Types.Messages.DROP,\n                    this.mob.id,\n                    this.item.id,\n                    this.item.kind,\n                    _.pluck(this.mob.hatelist, \"id\")];\n\n        return drop;\n    }\n});\n\nMessages.Chat = Message.extend({\n    init: function(player, message) {\n        this.playerId = player.id;\n        this.message = message;\n    },\n    serialize: function() {\n        return [Types.Messages.CHAT,\n                this.playerId,\n                this.message];\n    }\n});\n\nMessages.Teleport = Message.extend({\n    init: function(entity) {\n        this.entity = entity;\n    },\n    serialize: function() {\n        return [Types.Messages.TELEPORT,\n                this.entity.id,\n                this.entity.x,\n                this.entity.y];\n    }\n});\n\nMessages.Damage = Message.extend({\n    init: function(entity, points) {\n        this.entity = entity;\n        this.points = points;\n    },\n    serialize: function() {\n        return [Types.Messages.DAMAGE,\n                this.entity.id,\n                this.points];\n    }\n});\n\nMessages.Population = Message.extend({\n    init: function(world, total) {\n        this.world = world;\n        this.total = total;\n    },\n    serialize: function() {\n        return [Types.Messages.POPULATION,\n                this.world,\n                this.total];\n    }\n});\n\nMessages.Kill = Message.extend({\n    init: function(mob) {\n        this.mob = mob;\n    },\n    serialize: function() {\n        return [Types.Messages.KILL,\n                this.mob.kind];\n    }\n});\n\nMessages.List = Message.extend({\n    init: function(ids) {\n        this.ids = ids;\n    },\n    serialize: function() {\n        var list = this.ids;\n        \n        list.unshift(Types.Messages.LIST);\n        return list;\n    }\n});\n\nMessages.Destroy = Message.extend({\n    init: function(entity) {\n        this.entity = entity;\n    },\n    serialize: function() {\n        return [Types.Messages.DESTROY,\n                this.entity.id];\n    }\n});\n\nMessages.Blink = Message.extend({\n    init: function(item) {\n        this.item = item;\n    },\n    serialize: function() {\n        return [Types.Messages.BLINK,\n                this.item.id];\n    }\n});\n"
  },
  {
    "path": "server/js/metrics.js",
    "content": "\nvar cls = require(\"./lib/class\"),\n    _ = require(\"underscore\");\n\nmodule.exports = Metrics = Class.extend({\n    init: function(config) {\n        var self = this;\n        \n        this.config = config;\n        this.client = new (require(\"memcache\")).Client(config.memcached_port, config.memcached_host);\n        this.client.connect();\n        \n        this.isReady = false;\n        \n        this.client.on('connect', function() {\n            log.info(\"Metrics enabled: memcached client connected to \"+config.memcached_host+\":\"+config.memcached_port);\n            self.isReady = true;\n            if(self.ready_callback) {\n                self.ready_callback();\n            }\n        });\n    },\n    \n    ready: function(callback) {\n        this.ready_callback = callback;\n    },\n    \n    updatePlayerCounters: function(worlds, updatedCallback) {\n        var self = this,\n            config = this.config,\n            numServers = _.size(config.game_servers),\n            playerCount = _.reduce(worlds, function(sum, world) { return sum + world.playerCount; }, 0);\n        \n        if(this.isReady) {\n            // Set the number of players on this server\n            this.client.set('player_count_'+config.server_name, playerCount, function() {\n                var total_players = 0;\n                \n                // Recalculate the total number of players and set it\n                _.each(config.game_servers, function(server) {\n                    self.client.get('player_count_'+server.name, function(error, result) {\n                        var count = result ? parseInt(result) : 0;\n\n                        total_players += count;\n                        numServers -= 1;\n                        if(numServers === 0) {\n                            self.client.set('total_players', total_players, function() {\n                                if(updatedCallback) {\n                                    updatedCallback(total_players);\n                                }\n                            });\n                        }\n                    });\n                });\n            });\n        } else {\n            log.error(\"Memcached client not connected\");\n        }\n    },\n    \n    updateWorldDistribution: function(worlds) {\n        this.client.set('world_distribution_'+this.config.server_name, worlds);\n    },\n    \n    getOpenWorldCount: function(callback) {\n        this.client.get('world_count_'+this.config.server_name, function(error, result) {\n            callback(result);\n        });\n    },\n    \n    getTotalPlayers: function(callback) {\n        this.client.get('total_players', function(error, result) {\n            callback(result);\n        });\n    }\n});\n"
  },
  {
    "path": "server/js/mob.js",
    "content": "\nvar cls = require(\"./lib/class\"),\n    _ = require(\"underscore\"),\n    Messages = require(\"./message\"),\n    Properties = require(\"./properties\"),\n    Types = require(\"../../shared/js/gametypes\");\n\nmodule.exports = Mob = Character.extend({\n    init: function(id, kind, x, y) {\n        this._super(id, \"mob\", kind, x, y);\n        \n        this.updateHitPoints();\n        this.spawningX = x;\n        this.spawningY = y;\n        this.armorLevel = Properties.getArmorLevel(this.kind);\n        this.weaponLevel = Properties.getWeaponLevel(this.kind);\n        this.hatelist = [];\n        this.respawnTimeout = null;\n        this.returnTimeout = null;\n        this.isDead = false;\n    },\n    \n    destroy: function() {\n        this.isDead = true;\n        this.hatelist = [];\n        this.clearTarget();\n        this.updateHitPoints();\n        this.resetPosition();\n        \n        this.handleRespawn();\n    },\n    \n    receiveDamage: function(points, playerId) {\n        this.hitPoints -= points;\n    },\n    \n    hates: function(playerId) {\n        return _.any(this.hatelist, function(obj) { \n            return obj.id === playerId; \n        });\n    },\n    \n    increaseHateFor: function(playerId, points) {\n        if(this.hates(playerId)) {\n            _.detect(this.hatelist, function(obj) {\n                return obj.id === playerId;\n            }).hate += points;\n        }\n        else {\n            this.hatelist.push({ id: playerId, hate: points });\n        }\n\n        /*\n        log.debug(\"Hatelist : \"+this.id);\n        _.each(this.hatelist, function(obj) {\n            log.debug(obj.id + \" -> \" + obj.hate);\n        });*/\n        \n        if(this.returnTimeout) {\n            // Prevent the mob from returning to its spawning position\n            // since it has aggroed a new player\n            clearTimeout(this.returnTimeout);\n            this.returnTimeout = null;\n        }\n    },\n    \n    getHatedPlayerId: function(hateRank) {\n        var i, playerId,\n            sorted = _.sortBy(this.hatelist, function(obj) { return obj.hate; }),\n            size = _.size(this.hatelist);\n        \n        if(hateRank && hateRank <= size) {\n            i = size - hateRank;\n        }\n        else {\n            i = size - 1;\n        }\n        if(sorted && sorted[i]) {\n            playerId = sorted[i].id;\n        }\n        \n        return playerId;\n    },\n    \n    forgetPlayer: function(playerId, duration) {\n        this.hatelist = _.reject(this.hatelist, function(obj) { return obj.id === playerId; });\n        \n        if(this.hatelist.length === 0) {\n            this.returnToSpawningPosition(duration);\n        }\n    },\n    \n    forgetEveryone: function() {\n        this.hatelist = [];\n        this.returnToSpawningPosition(1);\n    },\n    \n    drop: function(item) {\n        if(item) {\n            return new Messages.Drop(this, item);\n        }\n    },\n    \n    handleRespawn: function() {\n        var delay = 30000,\n            self = this;\n        \n        if(this.area && this.area instanceof MobArea) {\n            // Respawn inside the area if part of a MobArea\n            this.area.respawnMob(this, delay);\n        }\n        else {\n            if(this.area && this.area instanceof ChestArea) {\n                this.area.removeFromArea(this);\n            }\n            \n            setTimeout(function() {\n                if(self.respawn_callback) {\n                    self.respawn_callback();\n                }\n            }, delay);\n        }\n    },\n    \n    onRespawn: function(callback) {\n        this.respawn_callback = callback;\n    },\n    \n    resetPosition: function() {\n        this.setPosition(this.spawningX, this.spawningY);\n    },\n    \n    returnToSpawningPosition: function(waitDuration) {\n        var self = this,\n            delay = waitDuration || 4000;\n        \n        this.clearTarget();\n        \n        this.returnTimeout = setTimeout(function() {\n            self.resetPosition();\n            self.move(self.x, self.y);\n        }, delay);\n    },\n    \n    onMove: function(callback) {\n        this.move_callback = callback;\n    },\n    \n    move: function(x, y) {\n        this.setPosition(x, y);\n        if(this.move_callback) {\n            this.move_callback(this);\n        }\n    },\n    \n    updateHitPoints: function() {\n        this.resetHitPoints(Properties.getHitPoints(this.kind));\n    },\n    \n    distanceToSpawningPoint: function(x, y) {\n        return Utils.distanceTo(x, y, this.spawningX, this.spawningY);\n    }\n});\n"
  },
  {
    "path": "server/js/mobarea.js",
    "content": "\nvar Area = require('./area'),\n    _ = require('underscore'),\n    Types = require(\"../../shared/js/gametypes\");\n\nmodule.exports = MobArea = Area.extend({\n    init: function(id, nb, kind, x, y, width, height, world) {\n        this._super(id, x, y, width, height, world);\n        this.nb = nb;\n        this.kind = kind;\n        this.respawns = [];\n        this.setNumberOfEntities(this.nb);\n        \n        //this.initRoaming();\n    },\n    \n    spawnMobs: function() {\n        for(var i = 0; i < this.nb; i += 1) {\n            this.addToArea(this._createMobInsideArea());\n        }\n    },\n    \n    _createMobInsideArea: function() {\n        var k = Types.getKindFromString(this.kind),\n            pos = this._getRandomPositionInsideArea(),\n            mob = new Mob('1' + this.id + ''+ k + ''+ this.entities.length, k, pos.x, pos.y);\n        \n        mob.onMove(this.world.onMobMoveCallback.bind(this.world));\n\n        return mob;\n    },\n    \n    respawnMob: function(mob, delay) {\n        var self = this;\n        \n        this.removeFromArea(mob);\n        \n        setTimeout(function() {\n            var pos = self._getRandomPositionInsideArea();\n            \n            mob.x = pos.x;\n            mob.y = pos.y;\n            mob.isDead = false;\n            self.addToArea(mob);\n            self.world.addMob(mob);\n        }, delay);\n    },\n\n    initRoaming: function(mob) {\n        var self = this;\n        \n        setInterval(function() {\n            _.each(self.entities, function(mob) {\n                var canRoam = (Utils.random(20) === 1),\n                    pos;\n                \n                if(canRoam) {\n                    if(!mob.hasTarget() && !mob.isDead) {\n                        pos = self._getRandomPositionInsideArea();\n                        mob.move(pos.x, pos.y);\n                    }\n                }\n            });\n        }, 500);\n    },\n    \n    createReward: function() {\n        var pos = this._getRandomPositionInsideArea();\n        \n        return { x: pos.x, y: pos.y, kind: Types.Entities.CHEST };\n    }\n});\n"
  },
  {
    "path": "server/js/npc.js",
    "content": "\nmodule.exports = Npc = Entity.extend({\n    init: function(id, kind, x, y) {\n        this._super(id, \"npc\", kind, x, y);\n    }\n});"
  },
  {
    "path": "server/js/player.js",
    "content": "\nvar cls = require(\"./lib/class\"),\n    _ = require(\"underscore\"),\n    Messages = require(\"./message\"),\n    Utils = require(\"./utils\"),\n    Properties = require(\"./properties\"),\n    Formulas = require(\"./formulas\"),\n    check = require(\"./format\").check,\n    Types = require(\"../../shared/js/gametypes\");\n\nmodule.exports = Player = Character.extend({\n    init: function(connection, worldServer) {\n        var self = this;\n        \n        this.server = worldServer;\n        this.connection = connection;\n\n        this._super(this.connection.id, \"player\", Types.Entities.WARRIOR, 0, 0, \"\");\n\n        this.hasEnteredGame = false;\n        this.isDead = false;\n        this.haters = {};\n        this.lastCheckpoint = null;\n        this.formatChecker = new FormatChecker();\n        this.disconnectTimeout = null;\n        \n        this.connection.listen(function(message) {\n            var action = parseInt(message[0]);\n            \n            log.debug(\"Received: \"+message);\n            if(!check(message)) {\n                self.connection.close(\"Invalid \"+Types.getMessageTypeAsString(action)+\" message format: \"+message);\n                return;\n            }\n            \n            if(!self.hasEnteredGame && action !== Types.Messages.HELLO) { // HELLO must be the first message\n                self.connection.close(\"Invalid handshake message: \"+message);\n                return;\n            }\n            if(self.hasEnteredGame && !self.isDead && action === Types.Messages.HELLO) { // HELLO can be sent only once\n                self.connection.close(\"Cannot initiate handshake twice: \"+message);\n                return;\n            }\n            \n            self.resetTimeout();\n            \n            if(action === Types.Messages.HELLO) {\n                var name = Utils.sanitize(message[1]);\n                \n                // If name was cleared by the sanitizer, give a default name.\n                // Always ensure that the name is not longer than a maximum length.\n                // (also enforced by the maxlength attribute of the name input element).\n                self.name = (name === \"\") ? \"lorem ipsum\" : name.substr(0, 15);\n                \n                self.kind = Types.Entities.WARRIOR;\n                self.equipArmor(message[2]);\n                self.equipWeapon(message[3]);\n                self.orientation = Utils.randomOrientation();\n                self.updateHitPoints();\n                self.updatePosition();\n                \n                self.server.addPlayer(self);\n                self.server.enter_callback(self);\n\n                self.send([Types.Messages.WELCOME, self.id, self.name, self.x, self.y, self.hitPoints]);\n                self.hasEnteredGame = true;\n                self.isDead = false;\n            }\n            else if(action === Types.Messages.WHO) {\n                message.shift();\n                self.server.pushSpawnsToPlayer(self, message);\n            }\n            else if(action === Types.Messages.ZONE) {\n                self.zone_callback();\n            }\n            else if(action === Types.Messages.CHAT) {\n                var msg = Utils.sanitize(message[1]);\n                \n                // Sanitized messages may become empty. No need to broadcast empty chat messages.\n                if(msg && msg !== \"\") {\n                    msg = msg.substr(0, 60); // Enforce maxlength of chat input\n                    self.broadcastToZone(new Messages.Chat(self, msg), false);\n                }\n            }\n            else if(action === Types.Messages.MOVE) {\n                if(self.move_callback) {\n                    var x = message[1],\n                        y = message[2];\n                    \n                    if(self.server.isValidPosition(x, y)) {\n                        self.setPosition(x, y);\n                        self.clearTarget();\n                        \n                        self.broadcast(new Messages.Move(self));\n                        self.move_callback(self.x, self.y);\n                    }\n                }\n            }\n            else if(action === Types.Messages.LOOTMOVE) {\n                if(self.lootmove_callback) {\n                    self.setPosition(message[1], message[2]);\n                    \n                    var item = self.server.getEntityById(message[3]);\n                    if(item) {\n                        self.clearTarget();\n\n                        self.broadcast(new Messages.LootMove(self, item));\n                        self.lootmove_callback(self.x, self.y);\n                    }\n                }\n            }\n            else if(action === Types.Messages.AGGRO) {\n                if(self.move_callback) {\n                    self.server.handleMobHate(message[1], self.id, 5);\n                }\n            }\n            else if(action === Types.Messages.ATTACK) {\n                var mob = self.server.getEntityById(message[1]);\n                \n                if(mob) {\n                    self.setTarget(mob);\n                    self.server.broadcastAttacker(self);\n                }\n            }\n            else if(action === Types.Messages.HIT) {\n                var mob = self.server.getEntityById(message[1]);\n                if(mob) {\n                    var dmg = Formulas.dmg(self.weaponLevel, mob.armorLevel);\n                    \n                    if(dmg > 0) {\n                        mob.receiveDamage(dmg, self.id);\n                        self.server.handleMobHate(mob.id, self.id, dmg);\n                        self.server.handleHurtEntity(mob, self, dmg);\n                    }\n                }\n            }\n            else if(action === Types.Messages.HURT) {\n                var mob = self.server.getEntityById(message[1]);\n                if(mob && self.hitPoints > 0) {\n                    self.hitPoints -= Formulas.dmg(mob.weaponLevel, self.armorLevel);\n                    self.server.handleHurtEntity(self);\n                    \n                    if(self.hitPoints <= 0) {\n                        self.isDead = true;\n                        if(self.firepotionTimeout) {\n                            clearTimeout(self.firepotionTimeout);\n                        }\n                    }\n                }\n            }\n            else if(action === Types.Messages.LOOT) {\n                var item = self.server.getEntityById(message[1]);\n                \n                if(item) {\n                    var kind = item.kind;\n                    \n                    if(Types.isItem(kind)) {\n                        self.broadcast(item.despawn());\n                        self.server.removeEntity(item);\n                        \n                        if(kind === Types.Entities.FIREPOTION) {\n                            self.updateHitPoints();\n                            self.broadcast(self.equip(Types.Entities.FIREFOX));\n                            self.firepotionTimeout = setTimeout(function() {\n                                self.broadcast(self.equip(self.armor)); // return to normal after 15 sec\n                                self.firepotionTimeout = null;\n                            }, 15000);\n                            self.send(new Messages.HitPoints(self.maxHitPoints).serialize());\n                        } else if(Types.isHealingItem(kind)) {\n                            var amount;\n                            \n                            switch(kind) {\n                                case Types.Entities.FLASK: \n                                    amount = 40;\n                                    break;\n                                case Types.Entities.BURGER: \n                                    amount = 100;\n                                    break;\n                            }\n                            \n                            if(!self.hasFullHealth()) {\n                                self.regenHealthBy(amount);\n                                self.server.pushToPlayer(self, self.health());\n                            }\n                        } else if(Types.isArmor(kind) || Types.isWeapon(kind)) {\n                            self.equipItem(item);\n                            self.broadcast(self.equip(kind));\n                        }\n                    }\n                }\n            }\n            else if(action === Types.Messages.TELEPORT) {\n                var x = message[1],\n                    y = message[2];\n                \n                if(self.server.isValidPosition(x, y)) {\n                    self.setPosition(x, y);\n                    self.clearTarget();\n                    \n                    self.broadcast(new Messages.Teleport(self));\n                    \n                    self.server.handlePlayerVanish(self);\n                    self.server.pushRelevantEntityListTo(self);\n                }\n            }\n            else if(action === Types.Messages.OPEN) {\n                var chest = self.server.getEntityById(message[1]);\n                if(chest && chest instanceof Chest) {\n                    self.server.handleOpenedChest(chest, self);\n                }\n            }\n            else if(action === Types.Messages.CHECK) {\n                var checkpoint = self.server.map.getCheckpoint(message[1]);\n                if(checkpoint) {\n                    self.lastCheckpoint = checkpoint;\n                }\n            }\n            else {\n                if(self.message_callback) {\n                    self.message_callback(message);\n                }\n            }\n        });\n        \n        this.connection.onClose(function() {\n            if(self.firepotionTimeout) {\n                clearTimeout(self.firepotionTimeout);\n            }\n            clearTimeout(self.disconnectTimeout);\n            if(self.exit_callback) {\n                self.exit_callback();\n            }\n        });\n        \n        this.connection.sendUTF8(\"go\"); // Notify client that the HELLO/WELCOME handshake can start\n    },\n    \n    destroy: function() {\n        var self = this;\n        \n        this.forEachAttacker(function(mob) {\n            mob.clearTarget();\n        });\n        this.attackers = {};\n        \n        this.forEachHater(function(mob) {\n            mob.forgetPlayer(self.id);\n        });\n        this.haters = {};\n    },\n    \n    getState: function() {\n        var basestate = this._getBaseState(),\n            state = [this.name, this.orientation, this.armor, this.weapon];\n\n        if(this.target) {\n            state.push(this.target);\n        }\n        \n        return basestate.concat(state);\n    },\n    \n    send: function(message) {\n        this.connection.send(message);\n    },\n    \n    broadcast: function(message, ignoreSelf) {\n        if(this.broadcast_callback) {\n            this.broadcast_callback(message, ignoreSelf === undefined ? true : ignoreSelf);\n        }\n    },\n    \n    broadcastToZone: function(message, ignoreSelf) {\n        if(this.broadcastzone_callback) {\n            this.broadcastzone_callback(message, ignoreSelf === undefined ? true : ignoreSelf);\n        }\n    },\n    \n    onExit: function(callback) {\n        this.exit_callback = callback;\n    },\n    \n    onMove: function(callback) {\n        this.move_callback = callback;\n    },\n    \n    onLootMove: function(callback) {\n        this.lootmove_callback = callback;\n    },\n    \n    onZone: function(callback) {\n        this.zone_callback = callback;\n    },\n    \n    onOrient: function(callback) {\n        this.orient_callback = callback;\n    },\n    \n    onMessage: function(callback) {\n        this.message_callback = callback;\n    },\n    \n    onBroadcast: function(callback) {\n        this.broadcast_callback = callback;\n    },\n    \n    onBroadcastToZone: function(callback) {\n        this.broadcastzone_callback = callback;\n    },\n    \n    equip: function(item) {\n        return new Messages.EquipItem(this, item);\n    },\n    \n    addHater: function(mob) {\n        if(mob) {\n            if(!(mob.id in this.haters)) {\n                this.haters[mob.id] = mob;\n            }\n        }\n    },\n    \n    removeHater: function(mob) {\n        if(mob && mob.id in this.haters) {\n            delete this.haters[mob.id];\n        }\n    },\n    \n    forEachHater: function(callback) {\n        _.each(this.haters, function(mob) {\n            callback(mob);\n        });\n    },\n    \n    equipArmor: function(kind) {\n        this.armor = kind;\n        this.armorLevel = Properties.getArmorLevel(kind);\n    },\n    \n    equipWeapon: function(kind) {\n        this.weapon = kind;\n        this.weaponLevel = Properties.getWeaponLevel(kind);\n    },\n    \n    equipItem: function(item) {\n        if(item) {\n            log.debug(this.name + \" equips \" + Types.getKindAsString(item.kind));\n            \n            if(Types.isArmor(item.kind)) {\n                this.equipArmor(item.kind);\n                this.updateHitPoints();\n                this.send(new Messages.HitPoints(this.maxHitPoints).serialize());\n            } else if(Types.isWeapon(item.kind)) {\n                this.equipWeapon(item.kind);\n            }\n        }\n    },\n    \n    updateHitPoints: function() {\n        this.resetHitPoints(Formulas.hp(this.armorLevel));\n    },\n    \n    updatePosition: function() {\n        if(this.requestpos_callback) {\n            var pos = this.requestpos_callback();\n            this.setPosition(pos.x, pos.y);\n        }\n    },\n    \n    onRequestPosition: function(callback) {\n        this.requestpos_callback = callback;\n    },\n    \n    resetTimeout: function() {\n        clearTimeout(this.disconnectTimeout);\n        this.disconnectTimeout = setTimeout(this.timeout.bind(this), 1000 * 60 * 15); // 15 min.\n    },\n    \n    timeout: function() {\n        this.connection.sendUTF8(\"timeout\");\n        this.connection.close(\"Player was idle for too long\");\n    }\n});"
  },
  {
    "path": "server/js/properties.js",
    "content": "\nvar Types = require(\"../../shared/js/gametypes\");\n\nvar Properties = {\n    rat: {\n        drops: {\n            flask: 40,\n            burger: 10,\n            firepotion: 5\n        },\n        hp: 25,\n        armor: 1,\n        weapon: 1\n    },\n    \n    skeleton: {\n        drops: {\n            flask: 40,\n            mailarmor: 10,\n            axe: 20,\n            firepotion: 5\n        },\n        hp: 110,\n        armor: 2,\n        weapon: 2\n    },\n    \n    goblin: {\n        drops: {\n            flask: 50,\n            leatherarmor: 20,\n            axe: 10,\n            firepotion: 5\n        },\n        hp: 90,\n        armor: 2,\n        weapon: 1\n    },\n    \n    ogre: {\n        drops: {\n            burger: 10,\n            flask: 50,\n            platearmor: 20,\n            morningstar: 20,\n            firepotion: 5\n        },\n        hp: 200,\n        armor: 3,\n        weapon: 2\n    },\n    \n    spectre: {\n        drops: {\n            flask: 30,\n            redarmor: 40,\n            redsword: 30,\n            firepotion: 5\n        },\n        hp: 250,\n        armor: 2,\n        weapon: 4\n    },\n    \n    deathknight: {\n        drops: {\n            burger: 95,\n            firepotion: 5\n        },\n        hp: 250,\n        armor: 3,\n        weapon: 3\n    },\n    \n    crab: {\n        drops: {\n            flask: 50,\n            axe: 20,\n            leatherarmor: 10,\n            firepotion: 5\n        },\n        hp: 60,\n        armor: 2,\n        weapon: 1\n    },\n    \n    snake: {\n        drops: {\n            flask: 50,\n            mailarmor: 10,\n            morningstar: 10,\n            firepotion: 5\n        },\n        hp: 150,\n        armor: 3,\n        weapon: 2\n    },\n    \n    skeleton2: {\n        drops: {\n            flask: 60,\n            platearmor: 15,\n            bluesword: 15,\n            firepotion: 5\n        },\n        hp: 200,\n        armor: 3,\n        weapon: 3\n    },\n    \n    eye: {\n        drops: {\n            flask: 50,\n            redarmor: 20,\n            redsword: 10,\n            firepotion: 5\n        },\n        hp: 200,\n        armor: 3,\n        weapon: 3\n    },\n    \n    bat: {\n        drops: {\n            flask: 50,\n            axe: 10,\n            firepotion: 5\n        },\n        hp: 80,\n        armor: 2,\n        weapon: 1\n    },\n    \n    wizard: {\n        drops: {\n            flask: 50,\n            platearmor: 20,\n            firepotion: 5\n        },\n        hp: 100,\n        armor: 2,\n        weapon: 6\n    },\n    \n    boss: {\n        drops: {\n            goldensword: 100\n        },\n        hp: 700,\n        armor: 6,\n        weapon: 7\n    }\n};\n\nProperties.getArmorLevel = function(kind) {\n    try {\n        if(Types.isMob(kind)) {\n            return Properties[Types.getKindAsString(kind)].armor;\n        } else {\n            return Types.getArmorRank(kind) + 1;\n        }\n    } catch(e) {\n        log.error(\"No level found for armor: \"+Types.getKindAsString(kind));\n    }\n};\n\nProperties.getWeaponLevel = function(kind) {\n    try {\n        if(Types.isMob(kind)) {\n            return Properties[Types.getKindAsString(kind)].weapon;\n        } else {\n            return Types.getWeaponRank(kind) + 1;\n        }\n    } catch(e) {\n        log.error(\"No level found for weapon: \"+Types.getKindAsString(kind));\n    }\n};\n\nProperties.getHitPoints = function(kind) {\n    return Properties[Types.getKindAsString(kind)].hp;\n};\n\nmodule.exports = Properties;"
  },
  {
    "path": "server/js/utils.js",
    "content": "\nvar Utils = {},\n    sanitizer = require('sanitizer'),\n    Types = require(\"../../shared/js/gametypes\");\n\nmodule.exports = Utils;\n\nUtils.sanitize = function(string) {\n    // Strip unsafe tags, then escape as html entities.\n    return sanitizer.escape(sanitizer.sanitize(string));\n};\n\nUtils.random = function(range) {\n    return Math.floor(Math.random() * range);\n};\n\nUtils.randomRange = function(min, max) {\n    return min + (Math.random() * (max - min));\n};\n\nUtils.randomInt = function(min, max) {\n    return min + Math.floor(Math.random() * (max - min + 1));\n};\n\nUtils.clamp = function(min, max, value) {\n    if(value < min) {\n        return min;\n    } else if(value > max) {\n        return max;\n    } else {\n        return value;\n    }\n};\n\nUtils.randomOrientation = function() {\n    var o, r = Utils.random(4);\n    \n    if(r === 0)\n        o = Types.Orientations.LEFT;\n    if(r === 1)\n        o = Types.Orientations.RIGHT;\n    if(r === 2)\n        o = Types.Orientations.UP;\n    if(r === 3)\n        o = Types.Orientations.DOWN;\n    \n    return o;\n};\n\nUtils.Mixin = function(target, source) {\n  if (source) {\n    for (var key, keys = Object.keys(source), l = keys.length; l--; ) {\n      key = keys[l];\n\n      if (source.hasOwnProperty(key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\n\nUtils.distanceTo = function(x, y, x2, y2) {\n    var distX = Math.abs(x - x2);\n    var distY = Math.abs(y - y2);\n\n    return (distX > distY) ? distX : distY;\n};"
  },
  {
    "path": "server/js/worldserver.js",
    "content": "\nvar cls = require(\"./lib/class\"),\n    _ = require(\"underscore\"),\n    Log = require('log'),\n    Entity = require('./entity'),\n    Character = require('./character'),\n    Mob = require('./mob'),\n    Map = require('./map'),\n    Npc = require('./npc'),\n    Player = require('./player'),\n    Item = require('./item'),\n    MobArea = require('./mobarea'),\n    ChestArea = require('./chestarea'),\n    Chest = require('./chest'),\n    Messages = require('./message'),\n    Properties = require(\"./properties\"),\n    Utils = require(\"./utils\"),\n    Types = require(\"../../shared/js/gametypes\");\n\n// ======= GAME SERVER ========\n\nmodule.exports = World = cls.Class.extend({\n    init: function(id, maxPlayers, websocketServer) {\n        var self = this;\n\n        this.id = id;\n        this.maxPlayers = maxPlayers;\n        this.server = websocketServer;\n        this.ups = 50;\n        \n        this.map = null;\n        \n        this.entities = {};\n        this.players = {};\n        this.mobs = {};\n        this.attackers = {};\n        this.items = {};\n        this.equipping = {};\n        this.hurt = {};\n        this.npcs = {};\n        this.mobAreas = [];\n        this.chestAreas = [];\n        this.groups = {};\n        \n        this.outgoingQueues = {};\n        \n        this.itemCount = 0;\n        this.playerCount = 0;\n        \n        this.zoneGroupsReady = false;\n        \n        this.onPlayerConnect(function(player) {\n            player.onRequestPosition(function() {\n                if(player.lastCheckpoint) {\n                    return player.lastCheckpoint.getRandomPosition();\n                } else {\n                    return self.map.getRandomStartingPosition();\n                }\n            });\n        });\n        \n        this.onPlayerEnter(function(player) {\n            log.info(player.name + \" has joined \"+ self.id);\n            \n            if(!player.hasEnteredGame) {\n                self.incrementPlayerCount();\n            }\n            \n            // Number of players in this world\n            self.pushToPlayer(player, new Messages.Population(self.playerCount));\n            self.pushRelevantEntityListTo(player);\n    \n            var move_callback = function(x, y) {\n                log.debug(player.name + \" is moving to (\" + x + \", \" + y + \").\");\n                \n                player.forEachAttacker(function(mob) {\n                    var target = self.getEntityById(mob.target);\n                    if(target) {\n                        var pos = self.findPositionNextTo(mob, target);\n                        if(mob.distanceToSpawningPoint(pos.x, pos.y) > 50) {\n                            mob.clearTarget();\n                            mob.forgetEveryone();\n                            player.removeAttacker(mob);\n                        } else {\n                            self.moveEntity(mob, pos.x, pos.y);\n                        }\n                    }\n                });\n            };\n\n            player.onMove(move_callback);\n            player.onLootMove(move_callback);\n            \n            player.onZone(function() {\n                var hasChangedGroups = self.handleEntityGroupMembership(player);\n                \n                if(hasChangedGroups) {\n                    self.pushToPreviousGroups(player, new Messages.Destroy(player));\n                    self.pushRelevantEntityListTo(player);\n                }\n            });\n\n            player.onBroadcast(function(message, ignoreSelf) {\n                self.pushToAdjacentGroups(player.group, message, ignoreSelf ? player.id : null);\n            });\n            \n            player.onBroadcastToZone(function(message, ignoreSelf) {\n                self.pushToGroup(player.group, message, ignoreSelf ? player.id : null);\n            });\n    \n            player.onExit(function() {\n                log.info(player.name + \" has left the game.\");\n                self.removePlayer(player);\n                self.decrementPlayerCount();\n                \n                if(self.removed_callback) {\n                    self.removed_callback();\n                }\n            });\n            \n            if(self.added_callback) {\n                self.added_callback();\n            }\n        });\n        \n        // Called when an entity is attacked by another entity\n        this.onEntityAttack(function(attacker) {\n            var target = self.getEntityById(attacker.target);\n            if(target && attacker.type === \"mob\") {\n                var pos = self.findPositionNextTo(attacker, target);\n                self.moveEntity(attacker, pos.x, pos.y);\n            }\n        });\n        \n        this.onRegenTick(function() {\n            self.forEachCharacter(function(character) {\n                if(!character.hasFullHealth()) {\n                    character.regenHealthBy(Math.floor(character.maxHitPoints / 25));\n            \n                    if(character.type === 'player') {\n                        self.pushToPlayer(character, character.regen());\n                    }\n                }\n            });\n        });\n    },\n    \n    run: function(mapFilePath) {\n        var self = this;\n        \n        this.map = new Map(mapFilePath);\n\n        this.map.ready(function() {\n            self.initZoneGroups();\n            \n            self.map.generateCollisionGrid();\n            \n            // Populate all mob \"roaming\" areas\n            _.each(self.map.mobAreas, function(a) {\n                var area = new MobArea(a.id, a.nb, a.type, a.x, a.y, a.width, a.height, self);\n                area.spawnMobs();\n                area.onEmpty(self.handleEmptyMobArea.bind(self, area));\n                \n                self.mobAreas.push(area);\n            });\n            \n            // Create all chest areas\n            _.each(self.map.chestAreas, function(a) {\n                var area = new ChestArea(a.id, a.x, a.y, a.w, a.h, a.tx, a.ty, a.i, self);\n                self.chestAreas.push(area);\n                area.onEmpty(self.handleEmptyChestArea.bind(self, area));\n            });\n            \n            // Spawn static chests\n            _.each(self.map.staticChests, function(chest) {\n                var c = self.createChest(chest.x, chest.y, chest.i);\n                self.addStaticItem(c);\n            });\n            \n            // Spawn static entities\n            self.spawnStaticEntities();\n            \n            // Set maximum number of entities contained in each chest area\n            _.each(self.chestAreas, function(area) {\n                area.setNumberOfEntities(area.entities.length);\n            });\n        });\n        \n        var regenCount = this.ups * 2;\n        var updateCount = 0;\n        setInterval(function() {\n            self.processGroups();\n            self.processQueues();\n            \n            if(updateCount < regenCount) {\n                updateCount += 1;\n            } else {\n                if(self.regen_callback) {\n                    self.regen_callback();\n                }\n                updateCount = 0;\n            }\n        }, 1000 / this.ups);\n        \n        log.info(\"\"+this.id+\" created (capacity: \"+this.maxPlayers+\" players).\");\n    },\n    \n    setUpdatesPerSecond: function(ups) {\n        this.ups = ups;\n    },\n    \n    onInit: function(callback) {\n        this.init_callback = callback;\n    },\n\n    onPlayerConnect: function(callback) {\n        this.connect_callback = callback;\n    },\n    \n    onPlayerEnter: function(callback) {\n        this.enter_callback = callback;\n    },\n    \n    onPlayerAdded: function(callback) {\n        this.added_callback = callback;\n    },\n    \n    onPlayerRemoved: function(callback) {\n        this.removed_callback = callback;\n    },\n    \n    onRegenTick: function(callback) {\n        this.regen_callback = callback;\n    },\n    \n    pushRelevantEntityListTo: function(player) {\n        var entities;\n        \n        if(player && (player.group in this.groups)) {\n            entities = _.keys(this.groups[player.group].entities);\n            entities = _.reject(entities, function(id) { return id == player.id; });\n            entities = _.map(entities, function(id) { return parseInt(id); });\n            if(entities) {\n                this.pushToPlayer(player, new Messages.List(entities));\n            }\n        }\n    },\n    \n    pushSpawnsToPlayer: function(player, ids) {\n        var self = this;\n        \n        _.each(ids, function(id) {\n            var entity = self.getEntityById(id);\n            if(entity) {\n                self.pushToPlayer(player, new Messages.Spawn(entity));\n            }\n        });\n        \n        log.debug(\"Pushed \"+_.size(ids)+\" new spawns to \"+player.id);\n    },\n    \n    pushToPlayer: function(player, message) {\n        if(player && player.id in this.outgoingQueues) {\n            this.outgoingQueues[player.id].push(message.serialize());\n        } else {\n            log.error(\"pushToPlayer: player was undefined\");\n        }\n    },\n    \n    pushToGroup: function(groupId, message, ignoredPlayer) {\n        var self = this,\n            group = this.groups[groupId];\n        \n        if(group) {\n            _.each(group.players, function(playerId) {\n                if(playerId != ignoredPlayer) {\n                    self.pushToPlayer(self.getEntityById(playerId), message);\n                }\n            });\n        } else {\n            log.error(\"groupId: \"+groupId+\" is not a valid group\");\n        }\n    },\n    \n    pushToAdjacentGroups: function(groupId, message, ignoredPlayer) {\n        var self = this;\n        self.map.forEachAdjacentGroup(groupId, function(id) {\n            self.pushToGroup(id, message, ignoredPlayer);\n        });\n    },\n    \n    pushToPreviousGroups: function(player, message) {\n        var self = this;\n        \n        // Push this message to all groups which are not going to be updated anymore,\n        // since the player left them.\n        _.each(player.recentlyLeftGroups, function(id) {\n            self.pushToGroup(id, message);\n        });\n        player.recentlyLeftGroups = [];\n    },\n    \n    pushBroadcast: function(message, ignoredPlayer) {\n        for(var id in this.outgoingQueues) {\n            if(id != ignoredPlayer) {\n                this.outgoingQueues[id].push(message.serialize());\n            }\n        }\n    },\n    \n    processQueues: function() {\n        var self = this,\n            connection;\n\n        for(var id in this.outgoingQueues) {\n            if(this.outgoingQueues[id].length > 0) {\n                connection = this.server.getConnection(id);\n                connection.send(this.outgoingQueues[id]);\n                this.outgoingQueues[id] = [];\n            }\n        }\n    },\n    \n    addEntity: function(entity) {\n        this.entities[entity.id] = entity;\n        this.handleEntityGroupMembership(entity);\n    },\n    \n    removeEntity: function(entity) {\n        if(entity.id in this.entities) {\n            delete this.entities[entity.id];\n        }\n        if(entity.id in this.mobs) {\n            delete this.mobs[entity.id];\n        }\n        if(entity.id in this.items) {\n            delete this.items[entity.id];\n        }\n        \n        if(entity.type === \"mob\") {\n            this.clearMobAggroLink(entity);\n            this.clearMobHateLinks(entity);\n        }\n        \n        entity.destroy();\n        this.removeFromGroups(entity);\n        log.debug(\"Removed \"+ Types.getKindAsString(entity.kind) +\" : \"+ entity.id);\n    },\n    \n    addPlayer: function(player) {\n        this.addEntity(player);\n        this.players[player.id] = player;\n        this.outgoingQueues[player.id] = [];\n        \n        //log.info(\"Added player : \" + player.id);\n    },\n    \n    removePlayer: function(player) {\n        player.broadcast(player.despawn());\n        this.removeEntity(player);\n        delete this.players[player.id];\n        delete this.outgoingQueues[player.id];\n    },\n    \n    addMob: function(mob) {\n        this.addEntity(mob);\n        this.mobs[mob.id] = mob;\n    },\n    \n    addNpc: function(kind, x, y) {\n        var npc = new Npc('8'+x+''+y, kind, x, y);\n        this.addEntity(npc);\n        this.npcs[npc.id] = npc;\n        \n        return npc;\n    },\n    \n    addItem: function(item) {\n        this.addEntity(item);\n        this.items[item.id] = item;\n        \n        return item;\n    },\n\n    createItem: function(kind, x, y) {\n        var id = '9'+this.itemCount++,\n            item = null;\n        \n        if(kind === Types.Entities.CHEST) {\n            item = new Chest(id, x, y);\n        } else {\n            item = new Item(id, kind, x, y);\n        }\n        return item;\n    },\n\n    createChest: function(x, y, items) {\n        var chest = this.createItem(Types.Entities.CHEST, x, y);\n        chest.setItems(items);\n        return chest;\n    },\n    \n    addStaticItem: function(item) {\n        item.isStatic = true;\n        item.onRespawn(this.addStaticItem.bind(this, item));\n        \n        return this.addItem(item);\n    },\n    \n    addItemFromChest: function(kind, x, y) {\n        var item = this.createItem(kind, x, y);\n        item.isFromChest = true;\n        \n        return this.addItem(item);\n    },\n    \n    /**\n     * The mob will no longer be registered as an attacker of its current target.\n     */\n    clearMobAggroLink: function(mob) {\n        var player = null;\n        if(mob.target) {\n            player = this.getEntityById(mob.target);\n            if(player) {\n                player.removeAttacker(mob);\n            }\n        }\n    },\n\n    clearMobHateLinks: function(mob) {\n        var self = this;\n        if(mob) {\n            _.each(mob.hatelist, function(obj) {\n                var player = self.getEntityById(obj.id);\n                if(player) {\n                    player.removeHater(mob);\n                }\n            });\n        }\n    },\n    \n    forEachEntity: function(callback) {\n        for(var id in this.entities) {\n            callback(this.entities[id]);\n        }\n    },\n    \n    forEachPlayer: function(callback) {\n        for(var id in this.players) {\n            callback(this.players[id]);\n        }\n    },\n    \n    forEachMob: function(callback) {\n        for(var id in this.mobs) {\n            callback(this.mobs[id]);\n        }\n    },\n    \n    forEachCharacter: function(callback) {\n        this.forEachPlayer(callback);\n        this.forEachMob(callback);\n    },\n    \n    handleMobHate: function(mobId, playerId, hatePoints) {\n        var mob = this.getEntityById(mobId),\n            player = this.getEntityById(playerId),\n            mostHated;\n        \n        if(player && mob) {\n            mob.increaseHateFor(playerId, hatePoints);\n            player.addHater(mob);\n            \n            if(mob.hitPoints > 0) { // only choose a target if still alive\n                this.chooseMobTarget(mob);\n            }\n        }\n    },\n    \n    chooseMobTarget: function(mob, hateRank) {\n        var player = this.getEntityById(mob.getHatedPlayerId(hateRank));\n        \n        // If the mob is not already attacking the player, create an attack link between them.\n        if(player && !(mob.id in player.attackers)) {\n            this.clearMobAggroLink(mob);\n            \n            player.addAttacker(mob);\n            mob.setTarget(player);\n            \n            this.broadcastAttacker(mob);\n            log.debug(mob.id + \" is now attacking \" + player.id);\n        }\n    },\n    \n    onEntityAttack: function(callback) {\n        this.attack_callback = callback;\n    },\n    \n    getEntityById: function(id) {\n        if(id in this.entities) {\n            return this.entities[id];\n        } else {\n            log.error(\"Unknown entity : \" + id);\n        }\n    },\n    \n    getPlayerCount: function() {\n        var count = 0;\n        for(var p in this.players) {\n            if(this.players.hasOwnProperty(p)) {\n                count += 1;\n            }\n        }\n        return count;\n    },\n    \n    broadcastAttacker: function(character) {\n        if(character) {\n            this.pushToAdjacentGroups(character.group, character.attack(), character.id);\n        }\n        if(this.attack_callback) {\n            this.attack_callback(character);\n        }\n    },\n    \n    handleHurtEntity: function(entity, attacker, damage) {\n        var self = this;\n        \n        if(entity.type === 'player') {\n            // A player is only aware of his own hitpoints\n            this.pushToPlayer(entity, entity.health());\n        }\n        \n        if(entity.type === 'mob') {\n            // Let the mob's attacker (player) know how much damage was inflicted\n            this.pushToPlayer(attacker, new Messages.Damage(entity, damage));\n        }\n\n        // If the entity is about to die\n        if(entity.hitPoints <= 0) {\n            if(entity.type === \"mob\") {\n                var mob = entity,\n                    item = this.getDroppedItem(mob);\n\n                this.pushToPlayer(attacker, new Messages.Kill(mob));\n                this.pushToAdjacentGroups(mob.group, mob.despawn()); // Despawn must be enqueued before the item drop\n                if(item) {\n                    this.pushToAdjacentGroups(mob.group, mob.drop(item));\n                    this.handleItemDespawn(item);\n                }\n            }\n    \n            if(entity.type === \"player\") {\n                this.handlePlayerVanish(entity);\n                this.pushToAdjacentGroups(entity.group, entity.despawn());\n            }\n    \n            this.removeEntity(entity);\n        }\n    },\n    \n    despawn: function(entity) {\n        this.pushToAdjacentGroups(entity.group, entity.despawn());\n\n        if(entity.id in this.entities) {\n            this.removeEntity(entity);\n        }\n    },\n    \n    spawnStaticEntities: function() {\n        var self = this,\n            count = 0;\n        \n        _.each(this.map.staticEntities, function(kindName, tid) {\n            var kind = Types.getKindFromString(kindName),\n                pos = self.map.tileIndexToGridPosition(tid);\n            \n            if(Types.isNpc(kind)) {\n                self.addNpc(kind, pos.x + 1, pos.y);\n            }\n            if(Types.isMob(kind)) {\n                var mob = new Mob('7' + kind + count++, kind, pos.x + 1, pos.y);\n                mob.onRespawn(function() {\n                    mob.isDead = false;\n                    self.addMob(mob);\n                    if(mob.area && mob.area instanceof ChestArea) {\n                        mob.area.addToArea(mob);\n                    }\n                });\n                mob.onMove(self.onMobMoveCallback.bind(self));\n                self.addMob(mob);\n                self.tryAddingMobToChestArea(mob);\n            }\n            if(Types.isItem(kind)) {\n                self.addStaticItem(self.createItem(kind, pos.x + 1, pos.y));\n            }\n        });\n    },\n\n    isValidPosition: function(x, y) {\n        if(this.map && _.isNumber(x) && _.isNumber(y) && !this.map.isOutOfBounds(x, y) && !this.map.isColliding(x, y)) {\n            return true;\n        }\n        return false;\n    },\n    \n    handlePlayerVanish: function(player) {\n        var self = this,\n            previousAttackers = [];\n        \n        // When a player dies or teleports, all of his attackers go and attack their second most hated player.\n        player.forEachAttacker(function(mob) {\n            previousAttackers.push(mob);\n            self.chooseMobTarget(mob, 2);\n        });\n        \n        _.each(previousAttackers, function(mob) {\n            player.removeAttacker(mob);\n            mob.clearTarget();\n            mob.forgetPlayer(player.id, 1000);\n        });\n        \n        this.handleEntityGroupMembership(player);\n    },\n    \n    setPlayerCount: function(count) {\n        this.playerCount = count;\n    },\n    \n    incrementPlayerCount: function() {\n        this.setPlayerCount(this.playerCount + 1);\n    },\n    \n    decrementPlayerCount: function() {\n        if(this.playerCount > 0) {\n            this.setPlayerCount(this.playerCount - 1);\n        }\n    },\n    \n    getDroppedItem: function(mob) {\n        var kind = Types.getKindAsString(mob.kind),\n            drops = Properties[kind].drops,\n            v = Utils.random(100),\n            p = 0,\n            item = null;\n        \n        for(var itemName in drops) {\n            var percentage = drops[itemName];\n            \n            p += percentage;\n            if(v <= p) {\n                item = this.addItem(this.createItem(Types.getKindFromString(itemName), mob.x, mob.y));\n                break;\n            }\n        }\n        \n        return item;\n    },\n    \n    onMobMoveCallback: function(mob) {\n        this.pushToAdjacentGroups(mob.group, new Messages.Move(mob));\n        this.handleEntityGroupMembership(mob);\n    },\n    \n    findPositionNextTo: function(entity, target) {\n        var valid = false,\n            pos;\n        \n        while(!valid) {\n            pos = entity.getPositionNextTo(target);\n            valid = this.isValidPosition(pos.x, pos.y);\n        }\n        return pos;\n    },\n    \n    initZoneGroups: function() {\n        var self = this;\n        \n        this.map.forEachGroup(function(id) {\n            self.groups[id] = { entities: {},\n                                players: [],\n                                incoming: []};\n        });\n        this.zoneGroupsReady = true;\n    },\n    \n    removeFromGroups: function(entity) {\n        var self = this,\n            oldGroups = [];\n        \n        if(entity && entity.group) {\n            \n            var group = this.groups[entity.group];\n            if(entity instanceof Player) {\n                group.players = _.reject(group.players, function(id) { return id === entity.id; });\n            }\n            \n            this.map.forEachAdjacentGroup(entity.group, function(id) {\n                if(entity.id in self.groups[id].entities) {\n                    delete self.groups[id].entities[entity.id];\n                    oldGroups.push(id);\n                }\n            });\n            entity.group = null;\n        }\n        return oldGroups;\n    },\n    \n    /**\n     * Registers an entity as \"incoming\" into several groups, meaning that it just entered them.\n     * All players inside these groups will receive a Spawn message when WorldServer.processGroups is called.\n     */\n    addAsIncomingToGroup: function(entity, groupId) {\n        var self = this,\n            isChest = entity && entity instanceof Chest,\n            isItem = entity && entity instanceof Item,\n            isDroppedItem =  entity && isItem && !entity.isStatic && !entity.isFromChest;\n        \n        if(entity && groupId) {\n            this.map.forEachAdjacentGroup(groupId, function(id) {\n                var group = self.groups[id];\n                \n                if(group) {\n                    if(!_.include(group.entities, entity.id)\n                    //  Items dropped off of mobs are handled differently via DROP messages. See handleHurtEntity.\n                    && (!isItem || isChest || (isItem && !isDroppedItem))) {\n                        group.incoming.push(entity);\n                    }\n                }\n            });\n        }\n    },\n    \n    addToGroup: function(entity, groupId) {\n        var self = this,\n            newGroups = [];\n        \n        if(entity && groupId && (groupId in this.groups)) {\n            this.map.forEachAdjacentGroup(groupId, function(id) {\n                self.groups[id].entities[entity.id] = entity;\n                newGroups.push(id);\n            });\n            entity.group = groupId;\n            \n            if(entity instanceof Player) {\n                this.groups[groupId].players.push(entity.id);\n            }\n        }\n        return newGroups;\n    },\n    \n    logGroupPlayers: function(groupId) {\n        log.debug(\"Players inside group \"+groupId+\":\");\n        _.each(this.groups[groupId].players, function(id) {\n            log.debug(\"- player \"+id);\n        });\n    },\n    \n    handleEntityGroupMembership: function(entity) {\n        var hasChangedGroups = false;\n        if(entity) {\n            var groupId = this.map.getGroupIdFromPosition(entity.x, entity.y);\n            if(!entity.group || (entity.group && entity.group !== groupId)) {\n                hasChangedGroups = true;\n                this.addAsIncomingToGroup(entity, groupId);\n                var oldGroups = this.removeFromGroups(entity);\n                var newGroups = this.addToGroup(entity, groupId);\n                \n                if(_.size(oldGroups) > 0) {\n                    entity.recentlyLeftGroups = _.difference(oldGroups, newGroups);\n                    log.debug(\"group diff: \" + entity.recentlyLeftGroups);\n                }\n            }\n        }\n        return hasChangedGroups;\n    },\n    \n    processGroups: function() {\n        var self = this;\n        \n        if(this.zoneGroupsReady) {\n            this.map.forEachGroup(function(id) {\n                var spawns = [];\n                if(self.groups[id].incoming.length > 0) {\n                    spawns = _.each(self.groups[id].incoming, function(entity) {\n                        if(entity instanceof Player) {\n                            self.pushToGroup(id, new Messages.Spawn(entity), entity.id);\n                        } else {\n                            self.pushToGroup(id, new Messages.Spawn(entity));\n                        }\n                    });\n                    self.groups[id].incoming = [];\n                }\n            });\n        }\n    },\n    \n    moveEntity: function(entity, x, y) {\n        if(entity) {\n            entity.setPosition(x, y);\n            this.handleEntityGroupMembership(entity);\n        }\n    },\n    \n    handleItemDespawn: function(item) {\n        var self = this;\n        \n        if(item) {\n            item.handleDespawn({\n                beforeBlinkDelay: 10000,\n                blinkCallback: function() {\n                    self.pushToAdjacentGroups(item.group, new Messages.Blink(item));\n                },\n                blinkingDuration: 4000,\n                despawnCallback: function() {\n                    self.pushToAdjacentGroups(item.group, new Messages.Destroy(item));\n                    self.removeEntity(item);\n                }\n            });\n        }\n    },\n    \n    handleEmptyMobArea: function(area) {\n\n    },\n    \n    handleEmptyChestArea: function(area) {\n        if(area) {\n            var chest = this.addItem(this.createChest(area.chestX, area.chestY, area.items));\n            this.handleItemDespawn(chest);\n        }\n    },\n    \n    handleOpenedChest: function(chest, player) {\n        this.pushToAdjacentGroups(chest.group, chest.despawn());\n        this.removeEntity(chest);\n        \n        var kind = chest.getRandomItem();\n        if(kind) {\n            var item = this.addItemFromChest(kind, chest.x, chest.y);\n            this.handleItemDespawn(item);\n        }\n    },\n    \n    tryAddingMobToChestArea: function(mob) {\n        _.each(this.chestAreas, function(area) {\n            if(area.contains(mob)) {\n                area.addToArea(mob);\n            }\n        });\n    },\n    \n    updatePopulation: function(totalPlayers) {\n        this.pushBroadcast(new Messages.Population(this.playerCount, totalPlayers ? totalPlayers : this.playerCount));\n    }\n});\n"
  },
  {
    "path": "server/js/ws.js",
    "content": "\nvar cls = require(\"./lib/class\"),\n    url = require('url'),\n    wsserver = require(\"websocket-server\"),\n    miksagoConnection = require('websocket-server/lib/ws/connection'),\n    worlizeRequest = require('websocket').request,\n    http = require('http'),\n    Utils = require('./utils'),\n    _ = require('underscore'),\n    BISON = require('bison'),\n    WS = {},\n    useBison = false;\n\nmodule.exports = WS;\n\n\n/**\n * Abstract Server and Connection classes\n */\nvar Server = cls.Class.extend({\n    init: function(port) {\n        this.port = port;\n    },\n    \n    onConnect: function(callback) {\n        this.connection_callback = callback;\n    },\n    \n    onError: function(callback) {\n        this.error_callback = callback;\n    },\n    \n    broadcast: function(message) {\n        throw \"Not implemented\";\n    },\n    \n    forEachConnection: function(callback) {\n        _.each(this._connections, callback);\n    },\n    \n    addConnection: function(connection) {\n        this._connections[connection.id] = connection;\n    },\n    \n    removeConnection: function(id) {\n        delete this._connections[id];\n    },\n    \n    getConnection: function(id) {\n        return this._connections[id];\n    }\n});\n\n\nvar Connection = cls.Class.extend({\n    init: function(id, connection, server) {\n        this._connection = connection;\n        this._server = server;\n        this.id = id;\n    },\n    \n    onClose: function(callback) {\n        this.close_callback = callback;\n    },\n    \n    listen: function(callback) {\n        this.listen_callback = callback;\n    },\n    \n    broadcast: function(message) {\n        throw \"Not implemented\";\n    },\n    \n    send: function(message) {\n        throw \"Not implemented\";\n    },\n    \n    sendUTF8: function(data) {\n        throw \"Not implemented\";\n    },\n    \n    close: function(logError) {\n        log.info(\"Closing connection to \"+this._connection.remoteAddress+\". Error: \"+logError);\n        this._connection.close();\n    }\n});\n\n\n\n/**\n * MultiVersionWebsocketServer\n * \n * Websocket server supporting draft-75, draft-76 and version 08+ of the WebSocket protocol.\n * Fallback for older protocol versions borrowed from https://gist.github.com/1219165\n */\nWS.MultiVersionWebsocketServer = Server.extend({\n    worlizeServerConfig: {\n        // All options *except* 'httpServer' are required when bypassing\n        // WebSocketServer.\n        maxReceivedFrameSize: 0x10000,\n        maxReceivedMessageSize: 0x100000,\n        fragmentOutgoingMessages: true,\n        fragmentationThreshold: 0x4000,\n        keepalive: true,\n        keepaliveInterval: 20000,\n        assembleFragments: true,\n        // autoAcceptConnections is not applicable when bypassing WebSocketServer\n        // autoAcceptConnections: false,\n        disableNagleAlgorithm: true,\n        closeTimeout: 5000\n    },\n    _connections: {},\n    _counter: 0,\n    \n    init: function(port) {\n        var self = this;\n        \n        this._super(port);\n        \n        this._httpServer = http.createServer(function(request, response) {\n            var path = url.parse(request.url).pathname;\n            switch(path) {\n                case '/status':\n                    if(self.status_callback) {\n                        response.writeHead(200);\n                        response.write(self.status_callback());\n                        break;\n                    }\n                default:\n                    response.writeHead(404);\n            }\n            response.end();\n        });\n        this._httpServer.listen(port, function() {\n            log.info(\"Server is listening on port \"+port);\n        });\n        \n        this._miksagoServer = wsserver.createServer();\n        this._miksagoServer.server = this._httpServer;\n        this._miksagoServer.addListener('connection', function(connection) {\n            // Add remoteAddress property\n            connection.remoteAddress = connection._socket.remoteAddress;\n\n            // We want to use \"sendUTF\" regardless of the server implementation\n            connection.sendUTF = connection.send;\n            var c = new WS.miksagoWebSocketConnection(self._createId(), connection, self);\n            \n            if(self.connection_callback) {\n                self.connection_callback(c);\n            }\n            self.addConnection(c);\n        });\n        \n        this._httpServer.on('upgrade', function(req, socket, head) {\n            if (typeof req.headers['sec-websocket-version'] !== 'undefined') {\n                // WebSocket hybi-08/-09/-10 connection (WebSocket-Node)\n                var wsRequest = new worlizeRequest(socket, req, self.worlizeServerConfig);\n                try {\n                    wsRequest.readHandshake();\n                    var wsConnection = wsRequest.accept(wsRequest.requestedProtocols[0], wsRequest.origin);\n                    var c = new WS.worlizeWebSocketConnection(self._createId(), wsConnection, self);\n                    if(self.connection_callback) {\n                        self.connection_callback(c);\n                    }\n                    self.addConnection(c);\n                }\n                catch(e) {\n                    console.log(\"WebSocket Request unsupported by WebSocket-Node: \" + e.toString());\n                    return;\n                }\n            } else {\n                // WebSocket hixie-75/-76/hybi-00 connection (node-websocket-server)\n                if (req.method === 'GET' &&\n                    (req.headers.upgrade && req.headers.connection) &&\n                    req.headers.upgrade.toLowerCase() === 'websocket' &&\n                    req.headers.connection.toLowerCase() === 'upgrade') {\n                    new miksagoConnection(self._miksagoServer.manager, self._miksagoServer.options, req, socket, head);\n                }\n            }\n        });\n    },\n    \n    _createId: function() {\n        return '5' + Utils.random(99) + '' + (this._counter++);\n    },\n    \n    broadcast: function(message) {\n        this.forEachConnection(function(connection) {\n            connection.send(message);\n        });\n    },\n    \n    onRequestStatus: function(status_callback) {\n        this.status_callback = status_callback;\n    }\n});\n\n\n/**\n * Connection class for Websocket-Node (Worlize)\n * https://github.com/Worlize/WebSocket-Node\n */\nWS.worlizeWebSocketConnection = Connection.extend({\n    init: function(id, connection, server) {\n        var self = this;\n        \n        this._super(id, connection, server);\n        \n        this._connection.on('message', function(message) {\n            if(self.listen_callback) {\n                if(message.type === 'utf8') {\n                    if(useBison) {\n                        self.listen_callback(BISON.decode(message.utf8Data));\n                    } else {\n                        try {\n                            self.listen_callback(JSON.parse(message.utf8Data));\n                        } catch(e) {\n                            if(e instanceof SyntaxError) {\n                                self.close(\"Received message was not valid JSON.\");\n                            } else {\n                                throw e;\n                            }\n                        }\n                    }\n                }\n            }\n        });\n        \n        this._connection.on('close', function(connection) {\n            if(self.close_callback) {\n                self.close_callback();\n            }\n            delete self._server.removeConnection(self.id);\n        });\n    },\n    \n    send: function(message) {\n        var data;\n        if(useBison) {\n            data = BISON.encode(message);\n        } else {\n            data = JSON.stringify(message);\n        }\n        this.sendUTF8(data);\n    },\n    \n    sendUTF8: function(data) {\n        this._connection.sendUTF(data);\n    }\n});\n\n\n/**\n * Connection class for websocket-server (miksago)\n * https://github.com/miksago/node-websocket-server\n */\nWS.miksagoWebSocketConnection = Connection.extend({\n    init: function(id, connection, server) {\n        var self = this;\n        \n        this._super(id, connection, server);\n        \n        this._connection.addListener(\"message\", function(message) {\n            if(self.listen_callback) {\n                if(useBison) {\n                    self.listen_callback(BISON.decode(message));\n                } else {\n                    self.listen_callback(JSON.parse(message));\n                }\n            }\n        });\n        \n        this._connection.on('close', function(connection) {\n            if(self.close_callback) {\n                self.close_callback();\n            }\n            delete self._server.removeConnection(self.id);\n        });\n    },\n    \n    send: function(message) {\n        var data;\n        if(useBison) {\n            data = BISON.encode(message);\n        } else {\n            data = JSON.stringify(message);\n        }\n        this.sendUTF8(data);\n    },\n    \n    sendUTF8: function(data) {\n        this._connection.send(data);\n    }\n});\n"
  },
  {
    "path": "server/maps/world_server.json",
    "content": "{\"width\":172,\"height\":314,\"collisions\":[51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51445,51446,51447,51448,51449,51450,51451,51452,51453,51454,51455,51456,51457,51458,51459,51460,51461,51462,51463,51464,51465,51466,51467,51468,51469,51470,51471,51472,51473,51474,51475,51476,51477,51478,51479,51480,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,51500,51501,51502,51503,51504,51505,51506,51507,51508,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680,51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,51774,51775,51776,51777,51778,51779,51780,51781,51782,51783,51784,51785,51786,51787,51788,51789,51790,51791,51792,51793,51794,51795,51796,51797,51798,51799,51800,51801,51802,51803,51804,51805,51806,51807,51808,51809,51810,51811,51812,51813,51814,51815,51816,51817,51818,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51837,51838,51839,51840,51841,51842,51843,51844,51845,51846,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51864,51946,51947,51948,51949,51950,51951,51952,51953,51954,51955,51956,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51976,51977,51978,51979,51980,51981,51982,51983,51984,51985,51986,51987,51988,51989,51990,51991,51992,51993,51994,51995,51996,51997,51998,51999,52000,52001,52002,52003,52004,52005,52006,52007,52008,52009,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52033,52034,52035,52036,52117,52118,52119,52120,52121,52122,52123,52124,52125,52126,52127,52128,52129,52130,52131,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52152,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52180,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,52192,52193,52194,52195,52196,52197,52198,52199,52200,52201,52202,52203,52204,52205,52206,52207,52208,52288,52289,52290,52291,52292,52293,52294,52295,52296,52297,52298,52299,52300,52301,52302,52303,52304,52305,52306,52307,52308,52309,52310,52311,52312,52313,52314,52315,52316,52317,52318,52319,52320,52321,52322,52323,52324,52325,52326,52327,52328,52329,52330,52331,52332,52333,52334,52335,52336,52337,52338,52339,52340,52341,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,52372,52373,52374,52375,52376,52377,52378,52379,52380,52460,52461,52462,52463,52464,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,52478,52479,52480,52481,52482,52483,52484,52485,52486,52487,52488,52489,52490,52491,52492,52493,52494,52495,52496,52497,52498,52499,52500,52501,52502,52503,52504,52505,52506,52507,52508,52509,52510,52511,52512,52513,52514,52515,52516,52517,52518,52519,52520,52521,52522,52523,52524,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52537,52538,52539,52540,52541,52542,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52632,52633,52634,52635,52636,52637,52638,52639,52640,52641,52642,52643,52644,52645,52646,52647,52648,52649,52650,52651,52652,52653,52654,52655,52656,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52676,52677,52678,52679,52680,52681,52682,52683,52684,52685,52686,52687,52688,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,52706,52707,52708,52709,52710,52711,52712,52713,52714,52715,52716,52717,52718,52719,52720,52721,52722,52723,52724,52804,52805,52806,52807,52808,52809,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52824,52825,52826,52827,52828,52829,52830,52831,52832,52833,52834,52835,52836,52837,52838,52839,52840,52841,52842,52843,52844,52845,52846,52847,52848,52849,52850,52851,52852,52853,52854,52855,52856,52857,52858,52859,52860,52861,52862,52863,52864,52865,52866,52867,52868,52869,52870,52871,52872,52873,52874,52875,52876,52877,52878,52879,52880,52881,52882,52883,52884,52885,52886,52887,52888,52889,52890,52891,52892,52893,52894,52895,52896,52976,52977,52978,52979,52980,52981,52982,52983,52984,52985,52986,52987,52988,52989,52990,52991,52992,52993,52994,52995,52996,52997,52998,52999,53000,53001,53002,53003,53004,53005,53006,53007,53008,53009,53010,53011,53012,53013,53014,53015,53016,53017,53018,53019,53020,53021,53022,53023,53024,53025,53026,53027,53028,53029,53030,53031,53032,53033,53034,53035,53036,53037,53038,53039,53040,53041,53042,53043,53044,53045,53046,53047,53048,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,53061,53062,53063,53064,53065,53066,53067,53068,53148,53149,53150,53151,53152,53153,53154,53155,53156,53157,53158,53159,53160,53161,53162,53163,53164,53165,53166,53167,53168,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53188,53189,53190,53191,53192,53193,53194,53195,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53216,53217,53218,53219,53220,53221,53222,53223,53224,53225,53226,53227,53228,53229,53230,53231,53232,53233,53234,53235,53236,53237,53238,53239,53240,53320,53321,53322,53323,53324,53325,53326,53327,53328,53329,53330,53331,53332,53333,53334,53335,53336,53337,53338,53339,53340,53341,53342,53343,53344,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53356,53357,53358,53359,53360,53361,53362,53363,53364,53365,53366,53367,53368,53369,53370,53371,53372,53373,53374,53375,53376,53377,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53412,53492,53493,53494,53495,53496,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,53509,53510,53511,53512,53513,53514,53515,53516,53517,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53552,53553,53554,53555,53556,53557,53558,53559,53560,53561,53562,53563,53564,53565,53566,53567,53568,53569,53570,53571,53572,53573,53574,53575,53576,53577,53578,53579,53580,53581,53582,53583,53584,31429,31431,31432,31433,31599,31600,31601,31602,31604,31605,31606,31607,31771,31772,31773,31777,31778,31779,31943,31951,32115,32123,32287,32295,32459,32460,32466,32467,32632,32633,32637,32638,32805,32806,32808,32809,33662,33663,33664,33665,33666,33667,33668,33669,33670,33671,33691,33692,33693,33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33833,33834,33835,33836,33837,33838,33840,33841,33842,33843,33844,33862,33863,33864,33865,33867,33868,33869,33871,33872,33873,33875,33876,34002,34003,34004,34005,34006,34015,34016,34017,34018,34019,34031,34032,34033,34034,34035,34048,34174,34175,34176,34177,34188,34189,34190,34191,34203,34204,34205,34206,34220,34346,34363,34375,34392,34518,34519,34521,34522,34530,34531,34532,34534,34535,34547,34548,34559,34560,34561,34562,34563,34564,34694,34695,34696,34697,34701,34702,34720,34721,34730,34731,34869,34870,34872,34873,34893,34894,34895,34897,34898,34899,34901,34902,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35756,35757,35758,35759,35760,35761,35762,35763,35764,35895,35896,35897,35898,35900,35901,35902,35904,35905,35906,35908,35909,35910,35928,35929,35931,35932,35933,35935,35936,36066,36067,36068,36081,36082,36083,36100,36108,36238,36239,36254,36255,36272,36280,36410,36427,36444,36452,36582,36583,36584,36585,36586,36594,36595,36596,36597,36598,36599,36616,36617,36623,36624,36758,36759,36760,36761,36765,36766,36789,36790,36794,36795,36933,36934,36936,36937,36962,36963,36965,36966,31072,31073,31074,31075,31076,31077,31078,31079,31080,31081,31082,31083,31084,31085,31086,31087,31088,31089,31090,31091,31092,31093,31094,31095,31096,31097,31098,31099,31100,31101,31102,31129,31244,31245,31246,31247,31248,31249,31250,31251,31252,31253,31254,31255,31256,31257,31258,31259,31260,31261,31262,31263,31264,31265,31266,31267,31268,31269,31270,31271,31272,31273,31274,31301,31416,31417,31418,31419,31420,31421,31422,31423,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31435,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31446,31473,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31598,31599,31600,31605,31606,31607,31608,31609,31610,31611,31612,31613,31614,31615,31616,31617,31618,31645,31760,31761,31762,31763,31764,31765,31766,31767,31768,31769,31770,31780,31781,31782,31783,31784,31785,31786,31787,31788,31789,31790,31817,31932,31933,31934,31935,31936,31937,31938,31939,31940,31941,31942,31952,31953,31954,31955,31956,31957,31958,31959,31960,31961,31962,31989,32104,32105,32106,32107,32108,32109,32110,32111,32112,32113,32114,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32161,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32333,32448,32449,32450,32451,32452,32453,32454,32455,32456,32457,32458,32459,32467,32468,32469,32470,32471,32472,32473,32474,32475,32476,32477,32478,32505,32620,32621,32622,32623,32624,32625,32626,32627,32628,32629,32630,32631,32632,32638,32639,32640,32641,32642,32643,32644,32645,32646,32647,32648,32649,32650,32677,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32809,32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32849,32964,32965,32966,32967,32968,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978,32979,32980,32981,32982,32983,32984,32985,32986,32987,32988,32989,32990,32991,32992,32993,32994,33021,33136,33137,33138,33139,33140,33141,33142,33143,33144,33145,33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33156,33157,33158,33159,33160,33161,33162,33163,33164,33165,33166,33193,33308,33309,33310,33311,33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324,33325,33326,33327,33328,33329,33330,33331,33332,33333,33334,33335,33336,33337,33338,33339,33340,33341,33342,33343,33344,33345,33346,33347,33348,33349,33350,33351,33352,33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365,33480,33481,33482,33483,33484,33485,33486,33487,33488,33489,33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502,33503,33504,33505,33506,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516,33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33527,33528,33529,33530,33531,33532,33533,33534,33535,33536,33537,33652,33653,33654,33655,33656,33657,33658,33659,33660,33661,33662,33663,33664,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679,33680,33681,33682,33683,33684,33685,33686,33687,33688,33689,33690,33691,33692,33693,33698,33699,33700,33701,33702,33703,33704,33705,33706,33707,33708,33709,33824,33825,33826,33827,33828,33829,33830,33831,33832,33833,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853,33854,33855,33856,33857,33858,33859,33860,33861,33862,33876,33877,33878,33879,33880,33881,33996,33997,33998,33999,34000,34001,34002,34003,34004,34017,34018,34019,34020,34021,34022,34023,34024,34025,34026,34027,34028,34029,34030,34031,34032,34033,34049,34050,34051,34052,34053,34168,34169,34170,34171,34172,34173,34174,34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34203,34221,34222,34223,34224,34225,34340,34341,34342,34343,34344,34345,34364,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34393,34394,34395,34396,34397,34512,34513,34514,34515,34516,34517,34518,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34564,34565,34566,34567,34568,34569,34684,34685,34686,34687,34688,34689,34690,34691,34692,34693,34694,34702,34703,34704,34705,34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717,34718,34719,34720,34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34866,34867,34868,34869,34873,34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885,34886,34887,34888,34889,34890,34891,34892,34893,34902,34903,34904,34905,34906,34907,34908,34909,34910,34911,34912,34913,35028,35029,35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041,35042,35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053,35054,35055,35056,35057,35058,35059,35060,35061,35062,35063,35064,35065,35066,35067,35068,35069,35070,35071,35072,35073,35074,35075,35076,35077,35078,35079,35080,35081,35082,35083,35084,35085,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35591,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755,35756,35757,35762,35763,35764,35765,35766,35767,35768,35769,35770,35771,35772,35773,35888,35889,35890,35891,35892,35893,35894,35895,35896,35909,35910,35911,35912,35913,35914,35915,35916,35917,35918,35919,35920,35921,35922,35923,35924,35925,35926,35927,35937,35938,35939,35940,35941,35942,35943,35944,35945,36060,36061,36062,36063,36064,36065,36066,36067,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36109,36110,36111,36112,36113,36114,36115,36116,36117,36232,36233,36234,36235,36236,36237,36238,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36281,36282,36283,36284,36285,36286,36287,36288,36289,36404,36405,36406,36407,36408,36409,36428,36429,36430,36431,36432,36433,36434,36435,36436,36437,36438,36439,36440,36441,36442,36443,36453,36454,36455,36456,36457,36458,36459,36460,36461,36576,36577,36578,36579,36580,36581,36582,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36748,36749,36750,36751,36752,36753,36754,36755,36756,36757,36758,36766,36767,36768,36769,36770,36771,36772,36773,36774,36775,36776,36777,36778,36779,36780,36781,36782,36783,36784,36785,36786,36787,36788,36789,36795,36796,36797,36798,36799,36800,36801,36802,36803,36804,36805,36920,36921,36922,36923,36924,36925,36926,36927,36928,36929,36930,36931,36932,36933,36937,36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36948,36949,36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36961,36962,36966,36967,36968,36969,36970,36971,36972,36973,36974,36975,36976,36977,37092,37093,37094,37095,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105,37106,37107,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117,37118,37119,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37145,37146,37147,37148,37149,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,25698,25706,25356,25360,758,760,930,932,1102,1104,1274,1276,1446,1448,1618,1620,4513,4516,4685,4688,4857,4860,5029,5032,5092,5094,5201,5204,5264,5266,5373,5376,5436,5438,5545,5548,5608,5610,5780,5782,5952,5954,6124,6126,6296,6298,6468,6470,6549,6551,6640,6642,6721,6723,6812,6814,6893,6895,6984,6986,7065,7067,7156,7158,7237,7239,7328,7330,7409,7411,7581,7583,7672,7674,7844,7846,8016,8018,8188,8190,8360,8362,8532,8534,8676,8679,8704,8706,8814,8817,8848,8851,8876,8878,8986,8989,9020,9023,9048,9050,9132,9135,9158,9161,9192,9195,9304,9307,9330,9333,9355,9358,9364,9367,9476,9479,9502,9505,9527,9530,9536,9539,9648,9651,9674,9677,9699,9702,9708,9711,9820,9823,9846,9849,9871,9874,9992,9995,10043,10046,10215,10218,32234,32237,32406,32409,32578,32581,32750,32753,32856,32859,32893,32899,32922,32925,33028,33031,33065,33071,33094,33097,33200,33203,33237,33243,33266,33269,33372,33375,33409,33415,33438,33441,33610,33613,33782,33785,44670,44672,44677,44679,44842,44844,44849,44851,45021,45023,45193,45195,45358,45360,45365,45367,45530,45532,45537,45539,45702,45704,45709,45711,45874,45876,45881,45883,46046,46048,46053,46055,46218,46220,46225,46227,46390,46392,46397,46399,46562,46564,46569,46571,46734,46736,46741,46743,24461,24462,24633,24634,24800,24801,24972,24973,25161,25162,25297,25298,25333,25334,25366,25367,25469,25470,25475,25477,25538,25539,25647,25649,25667,25668,25839,25840,26007,26008,26160,26161,26179,26180,26204,26205,26322,26323,26332,26333,26376,26377,26494,26495,26517,26518,26537,26538,26554,26555,26566,26567,26689,26690,26700,26701,26709,26710,26726,26727,26738,26739,26872,26873,27356,27357,27528,27529,27535,27536,27707,27708,27710,27711,27738,27739,27752,27753,27772,27773,27882,27883,27888,27889,27900,27901,27910,27911,27924,27925,27944,27945,28060,28061,28072,28073,28275,28276,28385,28386,28430,28431,28447,28448,28451,28452,28557,28558,28602,28603,28623,28624,28756,28757,28928,28929,29146,29147,29252,29253,29285,29286,29318,29319,29424,29425,29457,29458,29603,29604,29622,29623,29775,29776,29794,29795,30000,30001,30108,30109,30126,30127,30172,30173,30280,30281,30298,30299,30456,30457,30484,30485,30495,30496,30523,30524,30628,30629,30656,30657,30667,30668,30681,30682,30695,30696,30853,30854,30992,30993,31164,31165,31325,31326,31363,31364,31497,31498,31528,31529,31535,31536,31700,31701,31724,31725,31887,31888,31896,31897,32059,32060,12565,12566,12738,12739,12910,12911,12912,12917,13083,13089,13261,13484,13656,13828,19271,23260,23265,23432,23437,23603,23604,23609,23610,23771,23772,23773,23774,23775,23776,23781,23782,23783,23784,23785,23942,23943,23944,23945,23946,23947,23954,23955,23956,23957,23958,24113,24114,24115,24129,24130,24131,24132,24133,24283,24284,24285,24286,24302,24303,24304,24305,24306,24307,24308,24309,24310,24311,24312,24313,24314,24452,24453,24454,24455,24456,24457,24477,24478,24479,24480,24481,24482,24483,24484,24485,24486,24487,24619,24620,24621,24622,24623,24624,24625,24626,24627,24658,24659,24776,24777,24778,24779,24784,24785,24786,24787,24788,24789,24790,24791,24792,24793,24794,24795,24796,24831,24832,24838,24839,24840,24841,24842,24843,24844,24845,24846,24847,24848,24849,24850,24851,24945,24946,24947,24948,24949,24950,24951,24952,24953,24954,24955,24956,24957,24958,24959,24961,24962,24963,25003,25004,25005,25009,25010,25011,25012,25013,25015,25016,25017,25018,25019,25020,25021,25022,25023,25024,25116,25117,25118,25119,25120,25123,25124,25125,25126,25127,25128,25175,25176,25177,25178,25180,25181,25182,25195,25196,25288,25289,25349,25350,25352,25353,25368,25460,25540,25632,25711,25712,25804,25883,25975,25976,26055,26147,26227,26228,26319,26399,26400,26491,26572,26662,26663,26744,26834,26835,26916,27005,27006,27088,27177,27178,27259,27260,27349,27431,27521,27522,27603,27694,27775,27776,27866,27947,27948,28037,28038,28120,28209,28210,28292,28381,28464,28553,28636,28725,28808,28897,28898,28980,29070,29071,29151,29152,29243,29244,29322,29323,29416,29494,29588,29666,29760,29837,29838,29932,30009,30103,30104,30181,30274,30275,30276,30353,30354,30446,30447,30525,30526,30618,30698,30790,30870,30962,31042,31043,31134,31135,31214,31215,31307,31344,31353,31387,31479,31484,31516,31525,31559,31650,31651,31656,31661,31662,31663,31664,31665,31666,31677,31678,31679,31680,31681,31682,31683,31684,31687,31688,31697,31698,31731,31732,31822,31823,31828,31829,31832,31833,31834,31835,31836,31837,31838,31839,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31859,31860,31869,31870,31871,31895,31903,31904,31994,32000,32001,32002,32003,32004,32005,32010,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32028,32029,32030,32031,32042,32043,32044,32045,32046,32047,32048,32049,32050,32051,32052,32053,32054,32067,32076,32077,32166,32173,32174,32175,32176,32183,32184,32185,32186,32187,32188,32189,32190,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32238,32239,32248,32249,32337,32338,32398,32399,32400,32401,32402,32403,32404,32405,32406,32409,32410,32411,32421,32508,32509,32510,32573,32574,32575,32576,32577,32578,32581,32582,32593,32594,32680,32681,32765,32766,32767,32768,32769,32770,32771,32772,32938,32939,32940,32941,32942,32943,32944,24792,24964,25128,25135,25136,25299,25300,25301,25307,25471,25472,25473,25474,25475,25477,25478,25479,25644,25645,25646,25647,25649,25650,26742,26743,26744,26910,26911,26912,26913,26914,27080,27081,27082,27083,27084,27085,27252,27424,27596,27597,27768,27769,27770,27941,27942,28113,28114,28115,28116,28286,28287,28288,28289,28290,28291,28461,28462,28463,24656,24657,24828,24829,25147,25148,25319,25320,25994,25995,26166,26167,27755,27756,27927,27928,28425,28426,28597,28598,29275,29276,29447,29448,30467,30468,30639,30640,8927,23371,23372,23373,23518,23548,23549,3594,3596,24721,24723,24749,24751,49346,49348,51067,51069,51554,51556,2905,2906,2907,2908,2909,3077,3081,3249,3253,3421,3425,3593,3594,3596,3597,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23341,23351,23369,23379,23513,23523,23541,23551,23685,23695,23713,23723,23857,23867,23885,23895,24029,24039,24057,24067,24201,24211,24229,24239,24373,24383,24401,24411,24545,24555,24573,24583,24717,24718,24719,24720,24724,24725,24726,24727,24745,24746,24747,24748,24752,24753,24754,24755,47966,47967,47968,47969,47970,47971,47972,47973,47974,47975,47976,48138,48148,48310,48320,48482,48492,48654,48664,48826,48836,48998,49008,49170,49180,49342,49343,49344,49345,49349,49350,49351,49352,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50174,50184,50346,50356,50378,50379,50380,50381,50382,50518,50528,50550,50554,50690,50700,50722,50726,50862,50872,50894,50898,51034,51044,51066,51070,51206,51216,51378,51388,51550,51551,51552,51553,51557,51558,51559,51560,22816,22817,22818,22819,22820,22821,22822,22823,22824,22825,22826,22827,22828,22829,22830,22831,22832,22833,22834,22835,22836,22837,22838,22839,22840,22841,22842,22843,22844,22845,22846,22847,22848,22849,22850,22851,22852,22853,22854,22855,22856,22857,22858,22859,22860,22861,22862,22863,22864,22865,22866,22867,22868,22869,22870,22871,22872,22873,22988,22989,22990,22991,22992,22993,22994,22995,22996,22997,22998,22999,23000,23001,23002,23003,23004,23005,23006,23007,23008,23009,23010,23011,23012,23013,23014,23015,23016,23017,23018,23019,23020,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23033,23034,23035,23036,23037,23038,23039,23040,23041,23042,23043,23044,23045,23160,23161,23162,23163,23164,23165,23166,23167,23168,23180,23181,23182,23183,23184,23185,23186,23187,23188,23189,23190,23191,23192,23193,23194,23195,23196,23208,23209,23210,23211,23212,23213,23214,23215,23216,23217,23332,23333,23334,23335,23336,23337,23338,23339,23340,23352,23353,23354,23355,23356,23357,23358,23359,23360,23361,23362,23363,23364,23365,23366,23367,23368,23380,23381,23382,23383,23384,23385,23386,23387,23388,23389,23504,23505,23506,23507,23508,23509,23510,23511,23512,23524,23525,23526,23527,23528,23529,23530,23531,23532,23533,23534,23535,23536,23537,23538,23539,23540,23552,23553,23554,23555,23556,23557,23558,23559,23560,23561,23676,23677,23678,23679,23680,23681,23682,23683,23684,23696,23697,23698,23699,23700,23701,23702,23703,23704,23705,23706,23707,23708,23709,23710,23711,23712,23724,23725,23726,23727,23728,23729,23730,23731,23732,23733,23848,23849,23850,23851,23852,23853,23854,23855,23856,23868,23869,23870,23871,23872,23873,23874,23875,23876,23877,23878,23879,23880,23881,23882,23883,23884,23896,23897,23898,23899,23900,23901,23902,23903,23904,23905,24020,24021,24022,24023,24024,24025,24026,24027,24028,24040,24041,24042,24043,24044,24045,24046,24047,24048,24049,24050,24051,24052,24053,24054,24055,24056,24068,24069,24070,24071,24072,24073,24074,24075,24076,24077,24192,24193,24194,24195,24196,24197,24198,24199,24200,24212,24213,24214,24215,24216,24217,24218,24219,24220,24221,24222,24223,24224,24225,24226,24227,24228,24240,24241,24242,24243,24244,24245,24246,24247,24248,24249,24364,24365,24366,24367,24368,24369,24370,24371,24372,24384,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24400,24412,24413,24414,24415,24416,24417,24418,24419,24420,24421,24536,24537,24538,24539,24540,24541,24542,24543,24544,24556,24557,24558,24559,24560,24561,24562,24563,24564,24565,24566,24567,24568,24569,24570,24571,24572,24584,24585,24586,24587,24588,24589,24590,24591,24592,24593,24708,24709,24710,24711,24712,24713,24714,24715,24716,24728,24729,24730,24731,24732,24733,24734,24735,24736,24737,24738,24739,24740,24741,24742,24743,24744,24756,24757,24758,24759,24760,24761,24762,24763,24764,24765,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24895,24896,24897,24898,24899,24900,24901,24902,24903,24904,24905,24906,24907,24908,24909,24910,24911,24912,24913,24914,24915,24916,24917,24918,24919,24920,24921,24922,24923,24924,24925,24926,24927,24928,24929,24930,24931,24932,24933,24934,24935,24936,24937,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25062,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25077,25078,25079,25080,25081,25082,25083,25084,25085,25086,25087,25088,25089,25090,25091,25092,25093,25094,25095,25096,25097,25098,25099,25100,25101,25102,25103,25104,25105,25106,25107,25108,25109,47612,47613,47614,47615,47616,47617,47618,47619,47620,47621,47622,47623,47624,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47637,47638,47639,47640,47641,47784,47785,47786,47787,47788,47789,47790,47791,47792,47793,47794,47795,47796,47797,47798,47799,47800,47801,47802,47803,47804,47805,47806,47807,47808,47809,47810,47811,47812,47813,47956,47957,47958,47959,47960,47961,47962,47963,47964,47965,47977,47978,47979,47980,47981,47982,47983,47984,47985,48128,48129,48130,48131,48132,48133,48134,48135,48136,48137,48149,48150,48151,48152,48153,48154,48155,48156,48157,48300,48301,48302,48303,48304,48305,48306,48307,48308,48309,48321,48322,48323,48324,48325,48326,48327,48328,48329,48472,48473,48474,48475,48476,48477,48478,48479,48480,48481,48493,48494,48495,48496,48497,48498,48499,48500,48501,48644,48645,48646,48647,48648,48649,48650,48651,48652,48653,48665,48666,48667,48668,48669,48670,48671,48672,48673,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48837,48838,48839,48840,48841,48842,48843,48844,48845,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,49009,49010,49011,49012,49013,49014,49015,49016,49017,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49181,49182,49183,49184,49185,49186,49187,49188,49189,49332,49333,49334,49335,49336,49337,49338,49339,49340,49341,49353,49354,49355,49356,49357,49358,49359,49360,49361,49504,49505,49506,49507,49508,49509,49510,49511,49512,49513,49514,49515,49516,49517,49518,49519,49520,49521,49522,49523,49524,49525,49526,49527,49528,49529,49530,49531,49532,49533,49648,49649,49650,49651,49652,49653,49654,49655,49656,49657,49658,49659,49660,49661,49662,49663,49664,49665,49666,49667,49668,49669,49670,49671,49672,49673,49674,49675,49676,49677,49678,49679,49680,49681,49682,49683,49684,49685,49686,49687,49688,49689,49690,49691,49692,49693,49694,49695,49696,49697,49698,49699,49700,49701,49702,49703,49704,49705,49820,49821,49822,49823,49824,49825,49826,49827,49828,49829,49830,49831,49832,49833,49834,49835,49836,49837,49838,49839,49840,49841,49842,49843,49844,49845,49846,49847,49848,49849,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49992,49993,49994,49995,49996,49997,49998,49999,50000,50001,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50024,50025,50026,50027,50028,50029,50030,50031,50032,50033,50034,50035,50036,50037,50038,50039,50040,50041,50042,50043,50044,50045,50046,50047,50048,50049,50164,50165,50166,50167,50168,50169,50170,50171,50172,50173,50185,50186,50187,50188,50189,50190,50191,50192,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,50203,50204,50205,50206,50207,50208,50209,50210,50211,50212,50213,50214,50215,50216,50217,50218,50219,50220,50221,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50357,50358,50359,50360,50361,50362,50363,50364,50365,50366,50367,50368,50369,50370,50371,50372,50373,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50508,50509,50510,50511,50512,50513,50514,50515,50516,50517,50529,50530,50531,50532,50533,50534,50535,50536,50537,50538,50539,50540,50541,50542,50543,50544,50545,50546,50547,50548,50549,50550,50554,50555,50556,50557,50558,50559,50560,50561,50562,50563,50564,50565,50680,50681,50682,50683,50684,50685,50686,50687,50688,50689,50701,50702,50703,50704,50705,50706,50707,50708,50709,50710,50711,50712,50713,50714,50715,50716,50717,50718,50719,50720,50721,50722,50726,50727,50728,50729,50730,50731,50732,50733,50734,50735,50736,50737,50852,50853,50854,50855,50856,50857,50858,50859,50860,50861,50873,50874,50875,50876,50877,50878,50879,50880,50881,50882,50883,50884,50885,50886,50887,50888,50889,50890,50891,50892,50893,50894,50898,50899,50900,50901,50902,50903,50904,50905,50906,50907,50908,50909,51024,51025,51026,51027,51028,51029,51030,51031,51032,51033,51045,51046,51047,51048,51049,51050,51051,51052,51053,51054,51055,51056,51057,51058,51059,51060,51061,51062,51063,51064,51065,51066,51067,51071,51072,51073,51074,51075,51076,51077,51078,51079,51080,51081,51196,51197,51198,51199,51200,51201,51202,51203,51204,51205,51217,51218,51219,51220,51221,51222,51223,51224,51225,51226,51227,51228,51229,51230,51231,51232,51233,51234,51235,51236,51237,51238,51239,51240,51241,51242,51243,51244,51245,51246,51247,51248,51249,51250,51251,51252,51253,51368,51369,51370,51371,51372,51373,51374,51375,51376,51377,51389,51390,51391,51392,51393,51394,51395,51396,51397,51398,51399,51400,51401,51402,51403,51404,51405,51406,51407,51408,51409,51410,51411,51412,51413,51414,51415,51416,51417,51418,51419,51420,51421,51422,51423,51424,51425,51540,51541,51542,51543,51544,51545,51546,51547,51548,51549,51561,51562,51563,51564,51565,51566,51567,51568,51569,51570,51571,51572,51573,51574,51575,51576,51577,51578,51579,51580,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51592,51593,51594,51595,51596,51597,51712,51713,51714,51715,51716,51717,51718,51719,51720,51721,51722,51723,51724,51725,51726,51727,51728,51729,51730,51731,51732,51733,51734,51735,51736,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,51750,51751,51752,51753,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51900,51901,51902,51903,51904,51905,51906,51907,51908,51909,51910,51911,51912,51913,51914,51915,51916,51917,51918,51919,51920,51921,51922,51923,51924,51925,51926,51927,51928,51929,51930,51931,51932,51933,51934,51935,51936,51937,51938,51939,51940,51941,4785,4786,4788,4789,4790,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4957,4958,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,5129,5134,5135,5136,5137,5138,5139,5148,5149,5150,5301,5321,5322,5323,5473,5494,5495,5496,5497,5498,5499,5500,5645,5667,5668,5669,5670,5671,5672,5817,5818,5819,5840,5844,5991,5992,5993,5996,6012,6016,6165,6166,6172,6173,6174,6175,6184,6188,6338,6339,6340,6341,6342,6343,6344,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6359,6360,14773,14774,14775,14776,14777,14944,14945,14946,14948,14949,14950,15083,15084,15085,15086,15087,15088,15089,15090,15097,15098,15099,15100,15101,15116,15117,15121,15122,15252,15253,15254,15255,15256,15257,15258,15259,15260,15261,15262,15263,15268,15269,15270,15272,15273,15274,15288,15294,15423,15424,15425,15426,15427,15434,15435,15440,15441,15445,15446,15460,15466,15595,15596,15607,15608,15611,15612,15618,15632,15638,15767,15772,15773,15774,15775,15776,15779,15780,15781,15782,15783,15784,15790,15804,15810,15939,15943,15944,15948,15949,15952,15953,15954,15955,15961,15962,15976,15982,16111,16115,16121,16122,16132,16133,16148,16154,16283,16284,16286,16287,16294,16295,16296,16297,16298,16299,16300,16301,16302,16303,16304,16320,16326,16492,16498,16664,16665,16666,16668,16669,16670,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19214,19215,19216,19217,19218,19219,19220,19221,19222,19223,19224,19225,19237,19247,19248,19384,19385,19386,19387,19396,19397,19398,19409,19420,19556,19557,19558,19569,19570,19581,19582,19584,19585,19586,19592,19593,19728,19742,19758,19759,19764,19765,19766,19900,19914,19931,19932,19937,19938,19939,20072,20086,20104,20110,20111,20112,20244,20258,20276,20283,20284,20416,20417,20418,20426,20427,20428,20429,20430,20448,20449,20450,20456,20590,20591,20592,20593,20597,20598,20622,20623,20627,20628,20765,20766,20768,20769,20795,20796,20798,20799,27473,27474,27476,27477,27502,27504,27643,27644,27645,27646,27648,27649,27650,27651,27674,27676,27815,27816,27817,27821,27822,27823,27845,27846,27848,27849,27987,27995,28012,28013,28014,28015,28016,28017,28018,28020,28021,28022,28023,28024,28025,28026,28159,28167,28184,28185,28186,28187,28188,28189,28193,28194,28195,28196,28197,28198,28331,28332,28338,28339,28356,28370,28504,28505,28509,28510,28528,28529,28530,28531,28532,28533,28537,28538,28539,28540,28541,28542,28677,28678,28680,28681,28705,28706,28708,28709,28878,28880,29050,29051,29052,31458,31459,31461,31462,31628,31629,31630,31631,31633,31634,31635,31636,31800,31801,31802,31806,31807,31808,31972,31980,32144,32152,32316,32324,32488,32489,32495,32496,32661,32662,32666,32667,32834,32835,32837,32838,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37986,37987,37988,37989,37990,37991,37992,37993,37994,37995,37996,37997,37998,37999,38000,38001,38136,38137,38146,38147,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38158,38159,38172,38173,38174,38308,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38345,38346,38347,38480,38486,38487,38488,38518,38519,38652,38653,38657,38658,38660,38661,38674,38675,38676,38677,38678,38679,38683,38684,38685,38686,38691,38825,38826,38829,38833,38834,38835,38845,38846,38851,38852,38853,38854,38855,38858,38859,38863,38998,39001,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39031,39035,39170,39173,39202,39203,39206,39207,39342,39345,39373,39374,39375,39377,39378,39513,39514,39517,39544,39545,39546,39549,39685,39686,39689,39711,39712,39713,39714,39715,39716,39717,39720,39721,39857,39861,39862,39882,39883,39884,39885,39886,39887,39888,39891,39892,40029,40033,40034,40035,40054,40055,40062,40063,40201,40206,40207,40208,40225,40226,40233,40234,40373,40374,40379,40380,40397,40398,40405,40546,40552,40569,40577,40718,40724,40741,40742,40749,40750,40889,40890,40896,40914,40921,40922,41061,41062,41067,41068,41086,41087,41088,41094,41233,41238,41239,41260,41261,41265,41266,41405,41406,41408,41409,41410,41433,41434,41436,41437,43809,43810,43811,43812,43813,43814,43815,43816,43817,43818,43819,43820,43981,43982,43983,43984,43985,43986,43987,43988,43989,43990,43991,43992,44005,44006,44008,44009,44010,44011,44012,44013,44014,44015,44153,44164,44177,44178,44180,44181,44182,44183,44184,44185,44186,44187,44188,44325,44336,44349,44359,44360,44361,44497,44508,44521,44532,44533,44534,44669,44680,44693,44694,44695,44696,44697,44698,44705,44706,44707,44841,44852,44870,44871,44878,44879,44880,45013,45024,45043,45044,45051,45052,45185,45196,45216,45217,45218,45224,45357,45368,45390,45391,45395,45396,45529,45540,45563,45564,45566,45567,45701,45712,45873,45884,46045,46056,46217,46228,46389,46400,46561,46572,46733,46744,46905,46916,47077,47088,47249,47260,47421,47422,47423,47425,47426,47427,47428,47430,47431,47432,52441,52442,52443,52444,52445,52612,52613,52614,52615,52616,52617,52618,52783,52784,52785,52789,52790,52791,52955,52956,52962,52963,53127,53135,53299,53300,53306,53307,53472,53473,53477,53478,53645,53646,53648,53649,4790,4962,4969,4976,5133,5134,5141,5148,5304,5305,5306,5307,5308,5309,5310,5311,5313,5314,5319,5320,5476,5477,5478,5479,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5648,5650,5656,5658,5659,5660,5661,5662,5663,5668,5820,5822,5823,5827,5828,5833,5834,5835,5836,5837,5992,5994,5995,5996,5997,5998,5999,6000,6004,6005,6009,6010,6167,6168,6169,6170,6171,6176,6182,6348,6354,6356,19220,19392,19393,19397,19565,19566,19567,19568,19569,19741,19913,19914,27817,27987,27988,27989,28159,38494,38843,38844,44497,44508,44669,44670,44679,44680,44841,44842,44844,44845,44846,44847,44848,44849,44851,44852,45014,45015,45016,45017,45018,45019,45020,45021,45023,46562,46564,46569,46571,46733,46734,46736,46737,46740,46741,46743,46744,46905,46909,46910,46911,46912,46916,47082,47083,47254,47255,47426,47427,1429,1467,1762,1911,2849,2950,3131,3347,3832,4838,5053,5214,5339,5413,6883,6975,7117,7336,7986,8118,8311,8614,8834,10372,10740,11565,11597,11706,11929,12465,12574,13099,14357,15200,15902,23992,23993,33553,33554,33725,33726,33742,33743,33767,33768,33914,33915,33939,33940,34287,34288,34459,34460,35294,35295,35466,35467,35777,35778,35949,35950,36344,36345,36516,36517,37353,37354,37525,37526,37916,37917,38088,38089,38550,38551,38619,38620,38722,38723,38746,38747,38791,38792,38918,38919,39047,39048,39219,39220,39269,39270,39441,39442,40615,40616,40787,40788,40821,40822,40937,40938,40993,40994,41027,41028,41109,41110,41199,41200,42534,42535,42706,42707,42848,42849,43020,43021,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4612,4613,4614,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4784,4785,4786,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4956,4957,4962,4963,4964,4965,4966,4967,4968,4969,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,5128,5134,5135,5136,5137,5138,5139,5140,5141,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5300,5305,5306,5307,5308,5309,5310,5311,5312,5313,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5472,5476,5477,5478,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5644,5648,5649,5650,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5672,5673,5816,5817,5820,5821,5822,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5845,5988,5989,5990,5991,5992,5993,5994,5995,5998,5999,6000,6001,6002,6003,6004,6010,6011,6012,6017,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6182,6183,6184,6189,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6354,6355,6356,6360,6361,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,14560,14561,14562,14563,14564,14565,14566,14567,14568,14569,14570,14571,14572,14573,14574,14575,14576,14577,14578,14579,14580,14581,14582,14583,14584,14585,14586,14587,14588,14589,14590,14591,14592,14593,14594,14595,14596,14597,14598,14599,14600,14601,14602,14603,14604,14605,14606,14607,14608,14609,14610,14611,14612,14613,14614,14615,14616,14617,14732,14733,14734,14735,14736,14737,14738,14739,14740,14741,14742,14743,14744,14745,14746,14747,14748,14749,14750,14751,14752,14753,14754,14755,14756,14757,14758,14759,14760,14761,14762,14763,14764,14765,14766,14767,14768,14769,14770,14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14786,14787,14788,14789,14904,14905,14906,14907,14908,14909,14910,14911,14912,14913,14914,14915,14916,14917,14918,14919,14920,14921,14922,14923,14924,14925,14926,14927,14928,14929,14930,14931,14932,14933,14934,14935,14936,14937,14938,14939,14940,14941,14942,14943,14944,14950,14951,14952,14953,14954,14955,14956,14957,14958,14959,14960,14961,15076,15077,15078,15079,15080,15081,15082,15083,15084,15085,15086,15087,15090,15091,15092,15093,15094,15095,15096,15097,15098,15099,15100,15101,15102,15103,15104,15105,15106,15107,15108,15109,15110,15111,15112,15113,15114,15115,15123,15124,15125,15126,15127,15128,15129,15130,15131,15132,15133,15248,15249,15250,15251,15252,15263,15264,15265,15266,15267,15268,15273,15274,15275,15276,15277,15278,15279,15280,15281,15282,15283,15284,15285,15286,15287,15295,15296,15297,15298,15299,15300,15301,15302,15303,15304,15305,15420,15421,15422,15423,15436,15437,15438,15439,15440,15447,15448,15449,15450,15451,15452,15453,15454,15455,15456,15457,15458,15459,15467,15468,15469,15470,15471,15472,15473,15474,15475,15476,15477,15592,15593,15594,15608,15609,15610,15619,15620,15621,15622,15623,15624,15625,15626,15627,15628,15629,15630,15631,15639,15640,15641,15642,15643,15644,15645,15646,15647,15648,15649,15764,15765,15766,15791,15792,15793,15794,15795,15796,15797,15798,15799,15800,15801,15802,15803,15811,15812,15813,15814,15815,15816,15817,15818,15819,15820,15821,15936,15937,15938,15944,15945,15946,15947,15948,15962,15963,15964,15965,15966,15967,15968,15969,15970,15971,15972,15973,15974,15975,15983,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,16108,16109,16110,16116,16117,16118,16119,16120,16121,16133,16134,16135,16136,16137,16138,16139,16140,16141,16142,16143,16144,16145,16146,16147,16155,16156,16157,16158,16159,16160,16161,16162,16163,16164,16165,16280,16281,16282,16283,16287,16288,16289,16290,16291,16292,16293,16304,16305,16306,16307,16308,16309,16310,16311,16312,16313,16314,16315,16316,16317,16318,16319,16327,16328,16329,16330,16331,16332,16333,16334,16335,16336,16337,16452,16453,16454,16455,16456,16457,16458,16459,16460,16461,16462,16463,16464,16465,16466,16467,16468,16469,16470,16471,16472,16473,16474,16475,16476,16477,16478,16479,16480,16481,16482,16483,16484,16485,16486,16487,16488,16489,16490,16491,16499,16500,16501,16502,16503,16504,16505,16506,16507,16508,16509,16624,16625,16626,16627,16628,16629,16630,16631,16632,16633,16634,16635,16636,16637,16638,16639,16640,16641,16642,16643,16644,16645,16646,16647,16648,16649,16650,16651,16652,16653,16654,16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16670,16671,16672,16673,16674,16675,16676,16677,16678,16679,16680,16681,16796,16797,16798,16799,16800,16801,16802,16803,16804,16805,16806,16807,16808,16809,16810,16811,16812,16813,16814,16815,16816,16817,16818,16819,16820,16821,16822,16823,16824,16825,16826,16827,16828,16829,16830,16831,16832,16833,16834,16835,16836,16837,16838,16839,16840,16841,16842,16843,16844,16845,16846,16847,16848,16849,16850,16851,16852,16853,18686,18687,18688,18689,18690,18691,18692,18693,18694,18695,18696,18697,18698,18699,18700,18701,18702,18703,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19075,19076,19077,19078,19079,19080,19081,19082,19083,19084,19085,19086,19087,19088,19089,19202,19203,19204,19205,19206,19207,19208,19209,19210,19211,19212,19213,19214,19215,19225,19226,19227,19228,19229,19230,19231,19232,19233,19234,19235,19236,19249,19250,19251,19252,19253,19254,19255,19256,19257,19258,19259,19260,19261,19374,19375,19376,19377,19378,19379,19380,19381,19382,19383,19384,19398,19399,19400,19401,19402,19403,19404,19405,19406,19407,19408,19421,19422,19423,19424,19425,19426,19427,19428,19429,19430,19431,19432,19433,19546,19547,19548,19549,19550,19551,19552,19553,19554,19555,19571,19572,19573,19574,19575,19576,19577,19578,19579,19580,19581,19593,19594,19595,19596,19597,19598,19599,19600,19601,19602,19603,19604,19605,19718,19719,19720,19721,19722,19723,19724,19725,19726,19727,19743,19744,19745,19746,19747,19748,19749,19750,19751,19752,19753,19754,19755,19756,19757,19758,19766,19767,19768,19769,19770,19771,19772,19773,19774,19775,19776,19777,19890,19891,19892,19893,19894,19895,19896,19897,19898,19899,19915,19916,19917,19918,19919,19920,19921,19922,19923,19924,19925,19926,19927,19928,19929,19930,19931,19938,19939,19940,19941,19942,19943,19944,19945,19946,19947,19948,19949,20062,20063,20064,20065,20066,20067,20068,20069,20070,20071,20087,20088,20089,20090,20091,20092,20093,20094,20095,20096,20097,20098,20099,20100,20101,20102,20103,20112,20113,20114,20115,20116,20117,20118,20119,20120,20121,20234,20235,20236,20237,20238,20239,20240,20241,20242,20243,20259,20260,20261,20262,20263,20264,20265,20266,20267,20268,20269,20270,20271,20272,20273,20274,20275,20284,20285,20286,20287,20288,20289,20290,20291,20292,20293,20406,20407,20408,20409,20410,20411,20412,20413,20414,20415,20416,20430,20431,20432,20433,20434,20435,20436,20437,20438,20439,20440,20441,20442,20443,20444,20445,20446,20447,20448,20456,20457,20458,20459,20460,20461,20462,20463,20464,20465,20578,20579,20580,20581,20582,20583,20584,20585,20586,20587,20588,20589,20590,20598,20599,20600,20601,20602,20603,20604,20605,20606,20607,20608,20609,20610,20611,20612,20613,20614,20615,20616,20617,20618,20619,20620,20621,20622,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20750,20751,20752,20753,20754,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20769,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20799,20800,20801,20802,20803,20804,20805,20806,20807,20808,20809,20922,20923,20924,20925,20926,20927,20928,20929,20930,20931,20932,20933,20934,20935,20936,20937,20938,20939,20940,20941,20942,20943,20944,20945,20946,20947,20948,20949,20950,20951,20952,20953,20954,20955,20956,20957,20958,20959,20960,20961,20962,20963,20964,20965,20966,20967,20968,20969,20970,20971,20972,20973,20974,20975,20976,20977,20978,20979,20980,20981,26944,26945,26946,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26964,26965,26966,26967,26968,26969,26970,26971,26972,26973,26974,26975,26976,26977,26978,26979,26980,26981,26982,26983,26984,26985,26986,26987,26988,26989,26990,26991,26992,26993,26994,26995,26996,26997,26998,26999,27000,27001,27116,27117,27118,27119,27120,27121,27122,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27133,27134,27135,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27146,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27159,27160,27161,27162,27163,27164,27165,27166,27167,27168,27169,27170,27171,27172,27173,27288,27289,27290,27291,27292,27293,27294,27295,27296,27297,27298,27299,27300,27301,27302,27304,27305,27306,27307,27308,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27460,27461,27462,27463,27464,27465,27466,27467,27468,27469,27470,27471,27472,27473,27474,27476,27477,27478,27479,27480,27481,27482,27483,27484,27485,27486,27487,27488,27489,27490,27491,27492,27493,27494,27495,27496,27497,27498,27499,27500,27501,27502,27504,27505,27506,27507,27508,27509,27510,27511,27512,27513,27514,27515,27516,27517,27632,27633,27634,27635,27636,27637,27638,27639,27640,27641,27642,27643,27644,27645,27650,27651,27652,27653,27654,27655,27656,27657,27658,27659,27660,27661,27662,27663,27664,27665,27666,27667,27668,27669,27670,27671,27672,27673,27677,27678,27679,27680,27681,27682,27683,27684,27685,27686,27687,27688,27689,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,27815,27823,27824,27825,27826,27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,27839,27840,27841,27842,27843,27844,27845,27849,27850,27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27976,27977,27978,27979,27980,27981,27982,27983,27984,27985,27986,27996,27997,27998,27999,28000,28001,28002,28003,28004,28005,28006,28007,28008,28009,28010,28011,28012,28013,28014,28015,28016,28017,28026,28027,28028,28029,28030,28031,28032,28033,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28198,28199,28200,28201,28202,28203,28204,28205,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,28355,28371,28372,28373,28374,28375,28376,28377,28492,28493,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28504,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28542,28543,28544,28545,28546,28547,28548,28549,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,28703,28704,28705,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29052,29053,29054,29055,29056,29057,29058,29059,29060,29061,29062,29063,29064,29065,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29190,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29213,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229,29230,29231,29232,29233,29234,29235,29236,29237,29352,29353,29354,29355,29356,29357,29358,29359,29360,29361,29362,29363,29364,29365,29366,29367,29368,29369,29370,29371,29372,29373,29374,29375,29376,29377,29378,29379,29380,29381,29382,29383,29384,29385,29386,29387,29388,29389,29390,29391,29392,29393,29394,29395,29396,29397,29398,29399,29400,29401,29402,29403,29404,29405,29406,29407,29408,29409,29524,29525,29526,29527,29528,29529,29530,29531,29532,29533,29534,29535,29536,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29548,29549,29550,29551,29552,29553,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29566,29567,29568,29569,29570,29571,29572,29573,29574,29575,29576,29577,29578,29579,29580,29581,29724,29725,29726,29727,29728,29729,29730,29731,29732,29733,29734,29735,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29746,29747,29748,29749,29750,29751,29752,29753,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29906,29907,29908,29909,29910,29911,29912,29913,29914,29915,29916,29917,29918,29919,29920,29921,29922,29923,29924,29925,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30412,30413,30414,30415,30416,30417,30418,30419,30420,30421,30422,30423,30424,30425,30426,30427,30428,30429,30430,30431,30432,30433,30434,30435,30436,30437,30438,30439,30440,30441,30584,30585,30586,30587,30588,30589,30590,30591,30592,30593,30594,30595,30596,30597,30598,30599,30600,30601,30602,30603,30604,30605,30606,30607,30608,30609,30610,30611,30612,30613,30756,30757,30758,30759,30760,30761,30762,30763,30764,30765,30766,30767,30768,30769,30770,30771,30772,30773,30774,30775,30776,30777,30778,30779,30780,30781,30782,30783,30784,30785,30928,30929,30930,30931,30932,30933,30934,30935,30936,30937,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30952,30953,30954,30955,30956,30957,31103,31104,31105,31106,31107,31108,31109,31110,31111,31112,31113,31114,31115,31116,31117,31118,31119,31120,31121,31122,31123,31124,31125,31126,31127,31128,31275,31276,31277,31278,31279,31280,31281,31282,31283,31284,31285,31286,31287,31289,31290,31291,31292,31293,31294,31295,31296,31297,31298,31299,31300,31447,31448,31449,31450,31451,31452,31453,31454,31455,31456,31457,31458,31459,31461,31462,31463,31464,31465,31466,31467,31468,31469,31470,31471,31472,31619,31620,31621,31622,31623,31624,31625,31626,31627,31636,31637,31638,31639,31640,31641,31642,31643,31644,31791,31792,31793,31794,31795,31796,31797,31798,31799,31808,31809,31810,31811,31812,31813,31814,31815,31816,31963,31964,31965,31966,31967,31968,31969,31970,31971,31981,31982,31983,31984,31985,31986,31987,31988,32135,32136,32137,32138,32139,32140,32141,32142,32143,32153,32154,32155,32156,32157,32158,32159,32160,32307,32308,32309,32310,32311,32312,32313,32314,32315,32325,32326,32327,32328,32329,32330,32331,32332,32479,32480,32481,32482,32483,32484,32485,32486,32487,32497,32498,32499,32500,32501,32502,32503,32504,32651,32652,32653,32654,32655,32656,32657,32658,32659,32660,32667,32668,32669,32670,32671,32672,32673,32674,32675,32676,32823,32824,32825,32826,32827,32828,32829,32830,32831,32832,32833,32834,32839,32840,32841,32842,32843,32844,32845,32846,32847,32848,32995,32996,32997,32998,32999,33000,33001,33002,33003,33004,33005,33006,33007,33008,33009,33010,33011,33012,33013,33014,33015,33016,33017,33018,33019,33020,33167,33168,33169,33170,33171,33172,33173,33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186,33187,33188,33189,33190,33191,33192,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37828,37829,37830,37831,37832,37833,37834,37835,37836,37837,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,38001,38002,38003,38004,38005,38006,38007,38008,38009,38124,38125,38126,38127,38128,38129,38130,38131,38132,38133,38134,38135,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38174,38175,38176,38177,38178,38179,38180,38181,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38346,38347,38348,38349,38350,38351,38352,38353,38468,38469,38470,38471,38472,38473,38474,38475,38476,38477,38478,38479,38519,38520,38521,38522,38523,38524,38525,38640,38641,38642,38643,38644,38645,38646,38647,38648,38649,38650,38651,38652,38658,38659,38660,38691,38692,38693,38694,38695,38696,38697,38812,38813,38814,38815,38816,38817,38818,38819,38820,38821,38822,38823,38824,38825,38830,38831,38832,38833,38846,38847,38848,38849,38850,38851,38855,38856,38857,38858,38864,38865,38866,38867,38868,38869,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,39002,39003,39004,39005,39006,39007,39008,39009,39017,39018,39019,39020,39021,39022,39023,39024,39025,39026,39027,39028,39029,39030,39036,39037,39038,39039,39040,39041,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39174,39175,39176,39177,39178,39179,39180,39181,39182,39183,39184,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39207,39208,39209,39210,39211,39212,39213,39328,39329,39330,39331,39332,39333,39334,39335,39336,39337,39338,39339,39340,39341,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39378,39379,39380,39381,39382,39383,39384,39385,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39532,39533,39534,39535,39536,39537,39538,39539,39540,39541,39542,39543,39544,39545,39550,39551,39552,39553,39554,39555,39556,39557,39672,39673,39674,39675,39676,39677,39678,39679,39680,39681,39682,39683,39684,39690,39691,39692,39693,39694,39695,39696,39697,39698,39699,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39711,39712,39721,39722,39723,39724,39725,39726,39727,39728,39729,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39892,39893,39894,39895,39896,39897,39898,39899,39900,39901,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40063,40064,40065,40066,40067,40068,40069,40070,40071,40072,40073,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40532,40533,40534,40535,40536,40537,40538,40539,40540,40541,40542,40543,40544,40545,40546,40553,40554,40555,40556,40557,40558,40559,40560,40561,40562,40563,40564,40565,40566,40567,40568,40578,40579,40580,40581,40582,40583,40584,40585,40586,40587,40588,40589,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40715,40716,40717,40725,40726,40727,40728,40729,40730,40731,40732,40733,40734,40735,40736,40737,40738,40739,40740,40741,40750,40751,40752,40753,40754,40755,40756,40757,40758,40759,40760,40761,40876,40877,40878,40879,40880,40881,40882,40883,40884,40885,40886,40887,40888,40889,40897,40898,40899,40900,40901,40902,40903,40904,40905,40906,40907,40908,40909,40910,40911,40912,40913,40923,40924,40925,40926,40927,40928,40929,40930,40931,40932,40933,41048,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41060,41068,41069,41070,41071,41072,41073,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41086,41095,41096,41097,41098,41099,41100,41101,41102,41103,41104,41105,41220,41221,41222,41223,41224,41225,41226,41227,41228,41229,41230,41231,41232,41239,41240,41241,41242,41243,41244,41245,41246,41247,41248,41249,41250,41251,41252,41253,41254,41255,41256,41257,41258,41259,41260,41266,41267,41268,41269,41270,41271,41272,41273,41274,41275,41276,41277,41392,41393,41394,41395,41396,41397,41398,41399,41400,41401,41402,41403,41404,41405,41410,41411,41412,41413,41414,41415,41416,41417,41418,41419,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41432,41433,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41448,41449,41564,41565,41566,41567,41568,41569,41570,41571,41572,41573,41574,41575,41576,41577,41578,41579,41580,41581,41582,41583,41584,41585,41586,41587,41588,41589,41590,41591,41592,41593,41594,41595,41596,41597,41598,41599,41600,41601,41602,41603,41604,41605,41606,41607,41608,41609,41610,41611,41612,41613,41614,41615,41616,41617,41618,41619,41620,41621,41736,41737,41738,41739,41740,41741,41742,41743,41744,41745,41746,41747,41748,41749,41750,41751,41752,41753,41754,41755,41756,41757,41758,41759,41760,41761,41762,41763,41764,41765,41766,41767,41768,41769,41770,41771,41772,41773,41774,41775,41776,41777,41778,41779,41780,41781,41782,41783,41784,41785,41786,41787,41788,41789,41790,41791,41792,41793,43456,43457,43458,43459,43460,43461,43462,43463,43464,43465,43466,43467,43468,43469,43470,43471,43472,43473,43474,43475,43476,43477,43478,43479,43480,43481,43482,43483,43484,43485,43486,43487,43488,43489,43490,43491,43492,43493,43494,43495,43496,43497,43498,43499,43500,43501,43502,43503,43504,43505,43506,43507,43508,43509,43510,43511,43512,43513,43628,43629,43630,43631,43632,43633,43634,43635,43636,43637,43638,43639,43640,43641,43642,43643,43644,43645,43646,43647,43648,43649,43650,43651,43652,43653,43654,43655,43656,43657,43658,43659,43660,43661,43662,43663,43664,43665,43666,43667,43668,43669,43670,43671,43672,43673,43674,43675,43676,43677,43678,43679,43680,43681,43682,43683,43684,43685,43800,43801,43802,43803,43804,43805,43806,43807,43808,43809,43810,43811,43812,43813,43814,43815,43816,43817,43818,43819,43820,43821,43822,43823,43824,43825,43826,43827,43828,43829,43830,43831,43832,43833,43834,43836,43837,43838,43839,43840,43841,43842,43843,43844,43845,43846,43847,43848,43849,43850,43851,43852,43853,43854,43855,43856,43857,43972,43973,43974,43975,43976,43977,43978,43979,43980,43993,43994,43995,43996,43997,43998,43999,44000,44001,44002,44003,44004,44005,44015,44016,44017,44018,44019,44020,44021,44022,44023,44024,44025,44026,44027,44028,44029,44144,44145,44146,44147,44148,44149,44150,44151,44152,44165,44166,44167,44168,44169,44170,44171,44172,44173,44174,44175,44176,44188,44189,44190,44191,44192,44193,44194,44195,44196,44197,44198,44199,44200,44201,44316,44317,44318,44319,44320,44321,44322,44323,44324,44337,44338,44339,44340,44341,44342,44343,44344,44345,44346,44347,44348,44349,44361,44362,44363,44364,44365,44366,44367,44368,44369,44370,44371,44372,44373,44488,44489,44490,44491,44492,44493,44494,44495,44496,44509,44510,44511,44512,44513,44514,44515,44516,44517,44518,44519,44520,44534,44535,44536,44537,44538,44539,44540,44541,44542,44543,44544,44545,44660,44661,44662,44663,44664,44665,44666,44667,44668,44681,44682,44683,44684,44685,44686,44687,44688,44689,44690,44691,44692,44693,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44832,44833,44834,44835,44836,44837,44838,44839,44840,44841,44842,44844,44845,44848,44849,44851,44852,44853,44854,44855,44856,44857,44858,44859,44860,44861,44862,44863,44864,44865,44866,44867,44868,44869,44880,44881,44882,44883,44884,44885,44886,44887,44888,44889,45004,45005,45006,45007,45008,45009,45010,45011,45012,45013,45014,45015,45016,45017,45018,45019,45020,45021,45023,45024,45025,45026,45027,45028,45029,45030,45031,45032,45033,45034,45035,45036,45037,45038,45039,45040,45041,45042,45043,45052,45053,45054,45055,45056,45057,45058,45059,45060,45061,45176,45177,45178,45179,45180,45181,45182,45183,45184,45185,45186,45187,45188,45189,45190,45191,45192,45193,45195,45196,45197,45198,45199,45200,45201,45202,45203,45204,45205,45206,45207,45208,45209,45210,45211,45212,45213,45214,45215,45216,45224,45225,45226,45227,45228,45229,45230,45231,45232,45233,45348,45349,45350,45351,45352,45353,45354,45355,45356,45357,45358,45360,45361,45362,45363,45364,45365,45367,45368,45369,45370,45371,45372,45373,45374,45375,45376,45377,45378,45379,45380,45381,45382,45383,45384,45385,45386,45387,45388,45389,45390,45396,45397,45398,45399,45400,45401,45402,45403,45404,45405,45520,45521,45522,45523,45524,45525,45526,45527,45528,45529,45530,45532,45533,45534,45535,45536,45537,45539,45540,45541,45542,45543,45544,45545,45546,45547,45548,45549,45550,45551,45552,45553,45554,45555,45556,45557,45558,45559,45560,45561,45562,45563,45567,45568,45569,45570,45571,45572,45573,45574,45575,45576,45577,45692,45693,45694,45695,45696,45697,45698,45699,45700,45701,45702,45704,45705,45706,45707,45708,45709,45711,45712,45713,45714,45715,45716,45717,45718,45719,45720,45721,45722,45723,45724,45725,45726,45727,45728,45729,45730,45731,45732,45733,45734,45735,45736,45737,45738,45739,45740,45741,45742,45743,45744,45745,45746,45747,45748,45749,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45876,45877,45878,45879,45880,45881,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,46036,46037,46038,46039,46040,46041,46042,46043,46044,46045,46046,46048,46049,46050,46051,46052,46053,46055,46056,46057,46058,46059,46060,46061,46062,46063,46064,46065,46208,46209,46210,46211,46212,46213,46214,46215,46216,46217,46218,46220,46221,46222,46223,46224,46225,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46237,46380,46381,46382,46383,46384,46385,46386,46387,46388,46389,46390,46392,46393,46394,46395,46396,46397,46399,46400,46401,46402,46403,46404,46405,46406,46407,46408,46409,46552,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46564,46565,46566,46567,46568,46569,46571,46572,46573,46574,46575,46576,46577,46578,46579,46580,46581,46724,46725,46726,46727,46728,46729,46730,46731,46732,46737,46738,46739,46740,46745,46746,46747,46748,46749,46750,46751,46752,46753,46896,46897,46898,46899,46900,46901,46902,46903,46904,46910,46911,46917,46918,46919,46920,46921,46922,46923,46924,46925,47068,47069,47070,47071,47072,47073,47074,47075,47076,47077,47082,47083,47089,47090,47091,47092,47093,47094,47095,47096,47097,47240,47241,47242,47243,47244,47245,47246,47247,47248,47254,47255,47261,47262,47263,47264,47265,47266,47267,47268,47269,47412,47413,47414,47415,47416,47417,47418,47419,47420,47421,47426,47427,47432,47433,47434,47435,47436,47437,47438,47439,47440,47441,47584,47585,47586,47587,47588,47589,47590,47591,47592,47593,47594,47595,47596,47597,47598,47599,47600,47601,47602,47603,47604,47605,47606,47607,47608,47609,47610,47611,47612,47613,47756,47757,47758,47759,47760,47761,47762,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47784,47785,52084,52085,52086,52087,52088,52089,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,52105,52106,52107,52108,52109,52110,52111,52112,52113,52256,52257,52258,52259,52260,52261,52262,52263,52264,52265,52266,52267,52268,52269,52270,52271,52272,52273,52274,52275,52276,52277,52278,52279,52280,52281,52282,52283,52284,52285,52428,52429,52430,52431,52432,52433,52434,52435,52436,52437,52438,52439,52440,52441,52442,52443,52444,52445,52446,52447,52448,52449,52450,52451,52452,52453,52454,52455,52456,52457,52600,52601,52602,52603,52604,52605,52606,52607,52608,52609,52610,52611,52612,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52628,52629,52772,52773,52774,52775,52776,52777,52778,52779,52780,52781,52782,52783,52784,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52944,52945,52946,52947,52948,52949,52950,52951,52952,52953,52954,52964,52965,52966,52967,52968,52969,52970,52971,52972,52973,53116,53117,53118,53119,53120,53121,53122,53123,53124,53125,53126,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53288,53289,53290,53291,53292,53293,53294,53295,53296,53297,53298,53299,53307,53308,53309,53310,53311,53312,53313,53314,53315,53316,53317,53460,53461,53462,53463,53464,53465,53466,53467,53468,53469,53470,53471,53472,53478,53479,53480,53481,53482,53483,53484,53485,53486,53487,53488,53489,53632,53633,53634,53635,53636,53637,53638,53639,53640,53641,53642,53643,53644,53645,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53804,53805,53806,53807,53808,53809,53810,53811,53812,53813,53814,53815,53816,53817,53818,53819,53820,53821,53822,53823,53824,53825,53826,53827,53828,53829,53830,53831,53832,53833,53976,53977,53978,53979,53980,53981,53982,53983,53984,53985,53986,53987,53988,53989,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54000,54001,54002,54003,54004,54005,2408,2580,2581,2753,2754,2926,3098,3270,3441,3442,3613,3614,3785,3957,4129,4301,4473,4645,4817,4988,4989,5160,5161,5332,5504,5676,5848,6020,6192,6364,6536,6708,6880,6881,7053,7225,7397,7569,7570,7742,7914,8085,8086,8256,8257,8258,8428,8429,13793,13794,14115,14116,14965,14966,15998,15999,16552,16553,17259,17260,18265,18266,18303,18304,16007,16177,16181,16404,16423,17418,17423,42527,42695,42696,42697,42698,42699,42867,42868,65,66,67,75,76,77,238,239,240,246,247,248,411,412,413,414,415,416,417,418,419,584,585,586,588,589,590,929,933,1101,1105,1439,1440,1441,1442,1452,1453,1454,1455,1610,1611,1614,1615,1623,1624,1627,1628,1782,1787,1795,1800,1954,1972,2126,2144,2298,2316,2470,2488,2642,2660,2814,2831,2832,8397,8398,8399,8422,8423,8424,8568,8569,8570,8595,8596,8597,8740,8741,8768,8769,8912,8941,9084,9113,9256,9285,9428,9457,9600,9628,9629,9772,9773,9800,9945,9946,9972,9976,9977,9978,9979,10117,10118,10144,10151,10152,10289,10290,10316,10324,10325,10461,10488,10497,10633,10659,10660,10669,10805,10831,10840,10841,10977,11003,11004,11011,11012,11013,11149,11175,11176,11180,11181,11182,11183,11184,11321,11348,11352,11353,11354,11355,11493,11520,11665,11692,11739,11837,11864,11911,12009,12036,12082,12083,12181,12208,12237,12238,12239,12240,12241,12242,12243,12244,12249,12250,12251,12252,12253,12254,12255,12353,12354,12379,12380,12384,12385,12386,12387,12388,12389,12390,12391,12392,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12526,12527,12550,12551,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12579,12580,12581,12588,12589,12590,12591,12592,12593,12699,12722,12736,12737,12738,12739,12741,12742,12743,12744,12750,12751,12752,12910,12911,12912,12913,12914,12915,12916,12917,12921,12922,12923,13083,13084,13085,13088,13089,13090,13091,13092,13093,13094,13261,13262,13264,13265,14492,14493,14494,14495,14496,14497,14498,14663,14664,14670,14671,14834,14835,14843,14844,15006,15016,15178,15188,15350,15360,15522,15523,15531,15532,15694,15695,15696,15702,15703,15704,15867,15868,15869,15870,15872,15873,15874,15875,16040,16041,16042,16044,16045,16046,104,105,106,107,108,109,193,194,195,196,197,198,213,214,215,216,217,218,219,220,224,229,230,231,232,233,249,250,251,252,253,254,255,256,260,271,272,273,274,275,276,277,278,279,280,281,282,283,284,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,440,441,442,443,444,445,446,447,448,453,454,455,456,519,520,521,522,523,524,525,526,529,530,531,532,533,534,535,536,537,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,564,565,566,567,568,569,570,571,572,573,577,578,579,580,581,582,583,591,592,593,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,628,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,719,720,721,722,723,724,754,755,756,762,763,764,781,782,783,784,788,789,790,791,792,793,794,795,800,801,860,861,862,863,870,871,872,873,877,878,879,880,881,882,883,884,885,886,899,900,901,902,903,904,905,906,910,911,912,913,914,915,916,917,918,919,920,921,922,927,928,929,930,932,933,934,935,946,947,948,949,950,951,952,953,958,959,960,967,968,972,973,1032,1033,1034,1036,1037,1038,1039,1040,1041,1042,1047,1048,1049,1058,1059,1060,1065,1066,1067,1068,1069,1070,1071,1078,1079,1080,1081,1082,1094,1095,1096,1097,1098,1100,1101,1102,1104,1105,1106,1108,1109,1110,1111,1114,1115,1116,1117,1118,1125,1126,1127,1128,1129,1130,1140,1145,1207,1208,1214,1215,1216,1217,1218,1219,1226,1227,1228,1229,1232,1233,1234,1235,1236,1237,1270,1271,1279,1280,1283,1284,1285,1286,1311,1312,1316,1317,1378,1379,1397,1398,1401,1402,1443,1444,1445,1446,1448,1449,1450,1451,1483,1484,1488,1550,1569,1574,1655,1660,1722,1741,1742,1745,1746,1826,1827,1832,1893,1894,1913,1914,1915,1916,1917,1918,1959,1960,1961,1962,1964,1965,1966,1967,1998,1999,2003,2004,2065,2086,2087,2088,2089,2135,2170,2175,2236,2237,2341,2342,2347,2513,2514,2519,2520,2643,2659,2685,2691,2692,2759,2760,2761,2762,2763,2802,2803,2804,2805,2815,2816,2817,2818,2828,2829,2830,2831,2857,2864,2930,2931,2932,2934,2935,2936,2964,2973,2974,2977,2978,2987,2988,2989,2990,3000,3001,3002,3003,3029,3036,3102,3103,3107,3108,3128,3136,3145,3150,3162,3163,3171,3172,3196,3197,3198,3199,3201,3202,3208,3274,3280,3300,3307,3308,3317,3318,3321,3322,3334,3335,3336,3342,3343,3344,3367,3368,3371,3372,3374,3379,3380,3446,3452,3472,3473,3476,3477,3478,3479,3480,3489,3490,3491,3492,3493,3494,3507,3508,3509,3510,3511,3512,3513,3514,3515,3539,3544,3546,3551,3618,3619,3623,3624,3644,3645,3646,3647,3648,3649,3650,3651,3662,3663,3664,3665,3680,3681,3682,3684,3685,3686,3711,3712,3715,3716,3718,3723,3791,3792,3793,3794,3795,3817,3818,3819,3820,3883,3884,3885,3886,3887,3888,3890,3891,3895,3896,4056,4057,4058,4059,4063,4064,4067,4068,4236,4237,4240,4409,4412,4581,4584,4681,4682,4683,4684,4685,4688,4689,4690,4704,4713,4753,4756,4850,4851,4852,4853,4854,4855,4856,4857,4860,4861,4862,4863,4876,4885,4924,4925,4928,5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5034,5035,5036,5048,5049,5056,5057,5076,5077,5078,5080,5081,5095,5096,5097,5100,5171,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5207,5208,5209,5220,5221,5222,5227,5228,5229,5247,5248,5251,5253,5254,5264,5266,5267,5268,5271,5272,5335,5343,5353,5354,5355,5356,5357,5372,5373,5376,5377,5380,5381,5382,5393,5394,5395,5396,5397,5398,5399,5400,5419,5426,5435,5436,5438,5439,5443,5507,5514,5515,5522,5523,5524,5525,5526,5543,5544,5549,5550,5553,5554,5566,5567,5568,5569,5570,5571,5591,5592,5597,5598,5607,5608,5615,5679,5680,5685,5686,5687,5693,5694,5695,5696,5697,5707,5708,5709,5710,5711,5712,5713,5714,5715,5722,5723,5726,5763,5764,5765,5766,5767,5768,5769,5770,5779,5787,5788,5851,5852,5853,5854,5855,5856,5857,5858,5865,5866,5872,5873,5874,5875,5876,5877,5878,5879,5895,5898,5919,5926,5927,5928,5929,5930,5936,5937,5938,5939,5940,5941,5950,5951,5959,5960,6024,6025,6026,6027,6028,6029,6037,6043,6044,6067,6070,6091,6095,6096,6097,6098,6099,6100,6101,6102,6103,6122,6123,6132,6209,6214,6215,6239,6242,6263,6264,6266,6267,6268,6269,6270,6274,6275,6276,6277,6278,6279,6285,6294,6303,6304,6380,6381,6386,6411,6414,6415,6435,6436,6437,6438,6439,6447,6448,6449,6450,6451,6452,6457,6465,6466,6475,6551,6552,6553,6558,6583,6584,6586,6587,6588,6608,6609,6610,6623,6624,6625,6628,6629,6637,6638,6647,6716,6717,6718,6719,6720,6721,6723,6724,6730,6756,6757,6759,6760,6784,6785,6786,6787,6788,6796,6797,6798,6799,6800,6801,6809,6819,6888,6889,6890,6891,6892,6893,6895,6901,6902,6929,6932,6938,6956,6957,6959,6960,6961,6969,6970,6971,6972,6980,6981,6990,6991,7060,7073,7101,7104,7110,7120,7128,7132,7133,7152,7153,7156,7158,7162,7231,7232,7245,7273,7276,7282,7283,7292,7300,7301,7305,7324,7327,7328,7330,7331,7334,7403,7404,7408,7409,7411,7416,7417,7454,7455,7456,7463,7464,7473,7477,7496,7499,7503,7506,7507,7575,7579,7580,7583,7584,7585,7586,7587,7588,7627,7628,7629,7630,7631,7634,7635,7636,7645,7649,7668,7671,7672,7674,7675,7678,7679,7747,7750,7751,7789,7792,7800,7801,7802,7803,7804,7805,7806,7807,7817,7818,7820,7821,7840,7841,7843,7844,7846,7847,7851,7919,7922,7961,7964,7975,7976,7977,7978,7991,8013,8016,8018,8023,8133,8136,8185,8195,8263,8266,8305,8308,8356,8357,8367,8400,8401,8409,8410,8411,8412,8419,8420,8421,8435,8438,8476,8477,8480,8481,8523,8524,8525,8526,8527,8528,8529,8538,8539,8571,8572,8573,8576,8577,8578,8579,8580,8581,8584,8585,8586,8587,8588,8589,8592,8593,8594,8606,8607,8610,8647,8648,8649,8652,8653,8654,8694,8695,8696,8697,8698,8699,8700,8710,8742,8743,8744,8747,8748,8761,8762,8765,8766,8767,8772,8773,8774,8775,8776,8777,8778,8779,8782,8783,8818,8819,8820,8825,8826,8827,8847,8848,8851,8852,8861,8862,8863,8864,8865,8866,8867,8874,8875,8876,8878,8879,8882,8914,8915,8918,8919,8934,8935,8938,8939,8944,8945,8946,8947,8948,8949,8950,8954,8955,8956,8969,8970,8971,8972,8973,8974,8975,8976,8980,8985,8986,8989,8990,8991,8998,8999,9000,9001,9002,9018,9019,9020,9023,9024,9025,9026,9027,9028,9029,9032,9033,9034,9035,9037,9038,9045,9046,9051,9052,9054,9055,9086,9090,9107,9111,9127,9128,9129,9130,9131,9136,9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9161,9162,9171,9172,9173,9174,9175,9189,9190,9191,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9217,9224,9226,9227,9258,9262,9279,9283,9288,9289,9290,9291,9292,9293,9300,9301,9302,9303,9304,9307,9308,9309,9310,9311,9312,9313,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9335,9336,9337,9338,9339,9340,9341,9342,9343,9346,9347,9348,9360,9361,9362,9373,9374,9375,9376,9389,9390,9395,9396,9399,9430,9434,9451,9455,9465,9466,9475,9476,9479,9480,9505,9506,9507,9515,9516,9519,9520,9521,9522,9523,9524,9525,9526,9527,9530,9531,9532,9533,9536,9539,9540,9541,9542,9543,9544,9561,9562,9563,9564,9565,9566,9567,9568,9571,9602,9606,9623,9626,9627,9632,9633,9634,9635,9636,9637,9638,9639,9640,9663,9664,9665,9666,9667,9668,9669,9670,9674,9677,9688,9689,9692,9693,9694,9695,9696,9697,9698,9699,9702,9703,9704,9706,9707,9708,9716,9717,9734,9735,9736,9737,9738,9739,9742,9743,9774,9775,9778,9779,9794,9795,9798,9809,9810,9812,9813,9814,9815,9816,9817,9818,9819,9820,9823,9824,9829,9830,9831,9832,9833,9834,9835,9842,9843,9844,9845,9846,9861,9862,9877,9878,9889,9912,9913,9914,9947,9948,9950,9951,9952,9965,9966,9967,9970,9982,9983,9996,9997,9998,9999,10000,10001,10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10046,10047,10048,10049,10061,10073,10074,10075,10076,10077,10078,10082,10083,10084,10120,10123,10124,10137,10138,10142,10155,10156,10233,10242,10243,10244,10245,10250,10251,10252,10253,10254,10291,10292,10296,10309,10314,10328,10329,10405,10406,10412,10413,10414,10463,10464,10467,10468,10481,10486,10501,10578,10579,10582,10583,10584,10635,10638,10639,10653,10654,10657,10658,10673,10751,10752,10753,10754,10807,10810,10826,10829,10845,10979,10982,10998,11001,11017,11093,11094,11095,11096,11151,11154,11170,11173,11174,11188,11189,11265,11266,11268,11269,11323,11326,11327,11342,11345,11346,11359,11360,11361,11436,11437,11441,11442,11443,11495,11498,11499,11514,11515,11518,11528,11529,11530,11531,11532,11608,11615,11616,11667,11671,11687,11690,11699,11700,11701,11702,11703,11780,11839,11842,11843,11859,11862,11868,11869,11870,11871,11872,11952,12011,12014,12031,12034,12040,12041,12042,12043,12124,12183,12186,12203,12206,12296,12355,12356,12357,12358,12364,12365,12366,12368,12369,12370,12375,12376,12377,12378,12414,12415,12468,12531,12532,12533,12534,12535,12536,12539,12542,12543,12544,12545,12546,12587,12588,12640,12700,12701,12702,12703,12718,12719,12720,12721,12728,12743,12760,12761,12780,12781,12782,12783,12784,12785,12811,12812,12900,12914,12915,12933,12951,12952,12957,12958,12983,13072,13085,13086,13105,13123,13130,13131,13132,13139,13145,13155,13244,13256,13257,13276,13277,13295,13296,13304,13305,13311,13317,13327,13416,13417,13427,13428,13447,13448,13449,13467,13468,13469,13477,13478,13483,13484,13488,13489,13499,13589,13599,13619,13620,13640,13641,13642,13643,13650,13655,13656,13658,13659,13660,13661,13671,13761,13770,13771,13791,13804,13805,13806,13807,13813,13814,13815,13816,13817,13821,13822,13828,13829,13831,13832,13843,13844,13933,13934,13941,13942,13963,13975,13976,13979,13980,13987,13988,13989,13990,13991,13992,13993,13994,14015,14016,14106,14113,14134,14135,14146,14147,14152,14153,14154,14161,14162,14163,14164,14165,14188,14278,14285,14286,14305,14306,14307,14317,14318,14326,14327,14360,14450,14457,14458,14459,14460,14461,14462,14463,14468,14469,14470,14471,14472,14473,14474,14475,14476,14477,14478,14488,14489,14499,14500,14532,14622,14623,14630,14631,14632,14633,14634,14635,14636,14637,14638,14639,14640,14641,14642,14643,14644,14645,14646,14647,14648,14649,14660,14672,14673,14703,14704,14795,14807,14808,14809,14811,14812,14832,14845,14846,14875,14967,15004,15018,15046,15047,15139,15176,15190,15217,15218,15311,15348,15362,15389,15483,15484,15519,15520,15534,15561,15656,15657,15689,15690,15691,15706,15733,15829,15860,15861,15877,15878,15886,15887,15888,15889,15905,16001,16031,16032,16049,16050,16057,16058,16061,16062,16076,16077,16172,16173,16203,16220,16221,16229,16234,16235,16248,16344,16345,16375,16391,16392,16393,16401,16407,16420,16516,16547,16548,16558,16559,16560,16561,16562,16563,16564,16571,16572,16573,16579,16592,16688,16719,16720,16721,16729,16730,16731,16732,16734,16735,16742,16743,16751,16764,16765,16860,16892,16893,16894,16895,16896,16900,16901,16902,16913,16914,16923,16928,16936,16937,16938,17032,17038,17065,17066,17067,17068,17069,17070,17071,17072,17073,17084,17085,17094,17095,17100,17109,17110,17111,17112,17113,17204,17210,17240,17241,17242,17243,17244,17255,17256,17265,17266,17267,17272,17273,17282,17283,17284,17285,17286,17376,17377,17382,17383,17427,17434,17435,17436,17437,17438,17444,17445,17447,17448,17449,17450,17451,17452,17453,17457,17458,17459,17460,17461,17549,17550,17554,17555,17556,17559,17560,17561,17562,17563,17564,17565,17566,17567,17568,17599,17600,17605,17606,17607,17608,17609,17617,17618,17620,17621,17622,17624,17625,17626,17627,17628,17630,17631,17632,17633,17634,17635,17636,17722,17727,17728,17729,17730,17731,17732,17733,17734,17735,17736,17737,17738,17739,17740,17741,17771,17772,17773,17774,17775,17776,17777,17778,17797,17798,17799,17800,17805,17806,17807,17808,17894,17900,17901,17902,17903,17912,17913,17914,17944,17945,17946,17947,17948,17949,17972,18066,18067,18085,18086,18087,18099,18144,18239,18240,18258,18259,18260,18271,18316,18412,18413,18431,18432,18433,18442,18443,18487,18488,18585,18604,18605,18606,18611,18612,18613,18614,18615,18659,18757,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18831,18929,18950,18951,18952,18953,18954,18955,19003,19100,19101,19175,19270,19271,19272,19273,19347,19442,19443,19444,19519,19614,19691,19785,19786,19836,19863,19957,19958,20008,20034,20035,20129,20180,20181,20205,20206,20301,20352,20353,20354,20376,20377,20472,20473,20525,20526,20540,20548,20644,20645,20698,20712,20720,20816,20870,20883,20884,20892,20893,20988,21042,21043,21054,21055,21056,21064,21065,21066,21160,21214,21215,21216,21225,21226,21227,21237,21238,21239,21332,21387,21388,21389,21390,21391,21392,21393,21394,21395,21396,21397,21398,21410,21411,21504,21560,21561,21562,21563,21564,21566,21567,21568,21569,21583,21676,21755,21848,21849,21927,21928,22021,22099,22100,22193,22272,22365,22369,22444,22536,22537,22541,22553,22616,22708,22709,22713,22714,22725,22787,22788,22880,22885,22886,22887,22896,22897,22958,22959,23052,23058,23059,23060,23061,23062,23063,23064,23065,23066,23067,23068,23069,23130,23224,23231,23232,23233,23234,23235,23237,23238,23239,23240,23302,23396,23474,23568,23646,23740,23818,23912,23913,23990,24085,24162,24163,24257,24334,24335,24336,24429,24507,24508,24509,24510,24511,24512,24513,24514,24515,24516,24600,24601,24680,24681,24682,24683,24684,24685,24686,24687,24688,24771,24772,24773,24942,24943,24944,25112,25113,25114,25115,25284,25285,25286,42728,42900,43072,43073,43244,43245,43246,43255,43417,43418,43419,43420,43421,43422,43423,43424,43425,43426,43427,43590,43591,43592,43593,43594,43595,43596,43597,43598,43599,44043,44215,44219,44220,44221,44222,44223,44224,44225,44226,44387,44388,44390,44391,44392,44393,44394,44395,44396,44397,44398,44399,44400,44559,44560,44561,44562,44563,44570,44571,44572,44573,44574,44724,44725,44732,44733,44734,44744,44745,44746,44799,44895,44896,44897,44961,44962,44963,44964,44965,44966,44971,45066,45067,45068,45090,45091,45092,45093,45126,45132,45133,45134,45135,45136,45137,45138,45139,45142,45143,45238,45239,45260,45261,45262,45265,45266,45267,45298,45303,45304,45305,45310,45311,45312,45313,45314,45315,45410,45431,45432,45439,45440,45470,45471,45474,45475,45476,45483,45484,45485,45486,45582,45603,45612,45642,45643,45644,45645,45646,45647,45754,45775,45783,45784,45815,45816,45817,45818,45926,45947,45948,45954,45955,45956,46098,46119,46120,46125,46126,46127,46270,46292,46297,46298,46312,46442,46464,46465,46468,46469,46484,46614,46615,46636,46637,46638,46639,46640,46641,46645,46655,46656,46787,46809,46810,46811,46812,46817,46824,46825,46826,46827,46828,46959,46989,46990,46993,46994,46995,46996,46997,46998,46999,47130,47131,47161,47162,47163,47164,47165,47166,47167,47168,47302,47303,47334,47335,47336,47337,47474,47646,47659,47818,47823,47831,47990,47995,48002,48003,48162,48167,48168,48171,48172,48173,48174,48175,48236,48334,48339,48340,48341,48342,48343,48344,48345,48346,48408,48506,48512,48513,48514,48515,48569,48579,48580,48678,48741,48748,48749,48750,48751,48752,48850,48872,48873,48874,48875,48913,48914,48917,48918,48919,48920,48921,48922,48923,49022,49023,49042,49043,49044,49047,49048,49049,49074,49075,49076,49085,49086,49087,49088,49089,49090,49091,49092,49195,49213,49214,49221,49222,49244,49245,49246,49248,49249,49250,49258,49259,49260,49261,49367,49385,49394,49395,49415,49416,49422,49423,49539,49557,49567,49587,49595,49711,49712,49729,49730,49738,49739,49759,49766,49767,49884,49901,49902,49909,49910,49911,49931,49932,49935,49936,49937,49938,49939,50056,50074,50081,50082,50103,50104,50105,50106,50107,50108,50109,50110,50228,50246,50253,50276,50277,50278,50279,50400,50418,50425,50571,50572,50590,50591,50596,50597,50742,50743,50744,50762,50763,50764,50765,50766,50767,50768,50769,50823,50913,50914,50915,50935,50936,50937,50939,50940,50995,50996,50998,50999,51000,51001,51002,51003,51004,51085,51086,51167,51168,51170,51171,51172,51173,51174,51175,51176,51257,51429,51601,51772,51773,51944,51945,52116,9023,9024,9119,9295,9470,9471,9486,9487,9494,9521,9522,9523,9524,9527,9530,9646,9653,9707,9864,51,52,53,54,86,87,88,89,90,223,225,259,261,262,278,279,366,367,368,369,386,387,388,389,390,391,401,402,403,404,405,422,423,425,445,446,447,448,449,450,451,452,533,534,535,536,537,538,539,540,541,545,546,553,556,557,558,559,560,561,562,563,564,565,567,568,569,570,571,574,575,576,577,578,579,580,581,592,593,594,595,596,597,598,602,603,605,606,607,608,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,691,692,693,694,695,696,697,702,704,705,706,707,708,709,710,711,712,713,714,717,718,719,724,725,726,727,728,729,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,795,796,797,798,799,800,862,863,864,865,866,867,868,869,870,871,872,873,874,876,877,878,879,880,881,882,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,925,926,927,928,929,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,952,953,954,955,956,957,958,959,968,969,970,971,972,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1059,1060,1061,1063,1064,1065,1066,1067,1068,1081,1098,1099,1101,1102,1104,1105,1106,1107,1108,1114,1115,1116,1126,1127,1128,1140,1141,1142,1143,1144,1145,1204,1205,1206,1207,1215,1216,1271,1272,1273,1274,1276,1277,1278,1279,1312,1313,1314,1315,1316,1376,1377,1378,1444,1445,1446,1448,1449,1450,1484,1485,1486,1487,1488,1548,1549,1550,1656,1657,1658,1659,1660,1720,1721,1722,1828,1829,1830,1831,1892,1893,2000,2001,2002,2003,2064,2065,2172,2173,2174,2175,2236,2343,2344,2345,2346,2347,2515,2516,2517,2518,2687,2688,2689,2690,2858,2859,2860,2861,2862,3029,3030,3031,3032,3033,3034,3202,3203,3204,3205,3206,3374,3375,3376,3377,3378,3547,3548,3549,3550,3551,3720,3721,3722,3723,3893,3894,3895,4064,4065,4066,4067,4068,4238,4239,4240,4410,4411,4412,4582,4583,4584,4754,4755,4756,4854,4855,4856,4926,4927,4928,5022,5023,5024,5025,5026,5027,5028,5029,5032,5033,5034,5097,5098,5099,5100,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5204,5205,5206,5207,5269,5270,5271,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5372,5373,5376,5377,5378,5379,5380,5438,5439,5440,5441,5442,5443,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5550,5551,5552,5553,5554,5608,5610,5611,5612,5613,5614,5615,5695,5699,5700,5701,5702,5703,5704,5705,5706,5707,5724,5725,5726,5780,5782,5783,5784,5785,5786,5787,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876,5877,5878,5896,5897,5898,5952,5954,5955,5956,5957,5958,5959,6038,6039,6040,6041,6042,6043,6068,6069,6070,6124,6126,6127,6128,6129,6210,6211,6212,6213,6214,6240,6241,6242,6298,6299,6300,6301,6382,6383,6384,6385,6405,6406,6412,6413,6414,6468,6470,6471,6472,6473,6554,6555,6556,6557,6576,6577,6578,6579,6585,6586,6639,6640,6642,6643,6644,6645,6723,6724,6725,6726,6727,6728,6729,6730,6749,6750,6751,6752,6757,6758,6759,6811,6812,6814,6815,6816,6817,6890,6891,6892,6893,6895,6896,6897,6898,6899,6900,6901,6923,6929,6930,6931,6932,6982,6983,6984,6986,6987,6988,6989,6990,7060,7061,7062,7063,7064,7065,7067,7068,7069,7070,7071,7072,7101,7102,7103,7104,7153,7154,7155,7160,7161,7162,7232,7233,7234,7235,7236,7237,7239,7240,7241,7242,7243,7244,7245,7273,7274,7275,7276,7324,7325,7326,7332,7333,7334,7403,7404,7405,7406,7407,7408,7409,7411,7412,7413,7414,7415,7416,7496,7497,7498,7504,7505,7506,7575,7576,7577,7578,7579,7584,7585,7586,7587,7669,7670,7671,7676,7677,7678,7747,7748,7749,7750,7776,7777,7778,7789,7790,7791,7792,7842,7843,7847,7848,7849,7850,7919,7920,7921,7922,7948,7949,7950,7961,7962,7963,7964,8014,8015,8016,8018,8019,8020,8021,8022,8119,8120,8121,8122,8133,8134,8135,8136,8186,8187,8188,8190,8191,8192,8193,8263,8264,8265,8266,8291,8292,8293,8294,8305,8306,8307,8308,8358,8359,8360,8362,8363,8364,8365,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8435,8436,8437,8438,8462,8463,8464,8465,8466,8477,8478,8479,8480,8530,8531,8532,8534,8535,8536,8537,8573,8574,8575,8576,8577,8578,8579,8580,8585,8586,8587,8588,8589,8590,8591,8592,8607,8608,8609,8610,8634,8635,8636,8637,8638,8649,8650,8651,8652,8698,8699,8700,8701,8702,8703,8704,8706,8707,8708,8709,8744,8745,8746,8747,8762,8763,8764,8765,8779,8780,8781,8782,8806,8807,8808,8809,8810,8821,8822,8823,8824,8825,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8880,8881,8882,8914,8915,8916,8917,8918,8935,8936,8937,8938,8944,8945,8946,8947,8948,8949,8951,8952,8953,8954,8955,8977,8978,8979,8981,8982,8983,8992,8993,8994,8995,8996,8997,8998,9020,9038,9039,9040,9041,9042,9043,9044,9052,9053,9054,9086,9087,9088,9089,9090,9107,9108,9109,9110,9111,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9143,9144,9145,9146,9147,9148,9150,9151,9152,9153,9157,9158,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9191,9192,9195,9196,9198,9199,9211,9212,9213,9214,9225,9226,9258,9259,9260,9261,9262,9279,9280,9281,9282,9283,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9325,9326,9327,9328,9329,9330,9333,9334,9335,9336,9342,9343,9344,9345,9362,9363,9364,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9383,9384,9385,9386,9397,9398,9399,9430,9431,9432,9433,9434,9451,9452,9453,9454,9455,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9479,9480,9481,9482,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9505,9516,9517,9518,9533,9534,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9554,9555,9556,9557,9558,9559,9560,9569,9570,9571,9602,9603,9604,9605,9606,9623,9624,9625,9626,9640,9641,9642,9643,9644,9645,9646,9647,9648,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9689,9690,9691,9692,9693,9703,9704,9705,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9740,9741,9742,9775,9776,9777,9778,9795,9796,9797,9798,9817,9818,9819,9820,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9844,9845,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9874,9875,9876,9877,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9948,9949,9950,9951,9967,9968,9969,9970,10035,10036,10037,10038,10039,10040,10041,10042,10043,10046,10047,10061,10063,10064,10065,10066,10067,10068,10069,10070,10076,10077,10078,10079,10080,10081,10082,10083,10120,10121,10122,10123,10138,10139,10140,10141,10142,10233,10235,10236,10237,10238,10239,10240,10241,10242,10251,10252,10292,10293,10294,10295,10296,10309,10310,10311,10312,10313,10314,10408,10409,10410,10413,10463,10464,10465,10466,10467,10481,10482,10483,10484,10485,10486,10581,10582,10635,10636,10637,10638,10654,10655,10656,10657,10807,10808,10809,10810,10826,10827,10828,10829,10979,10980,10981,10982,10998,10999,11000,11001,11151,11152,11153,11154,11170,11171,11172,11173,11323,11324,11325,11326,11342,11343,11344,11345,11495,11496,11497,11498,11515,11516,11517,11518,11667,11668,11669,11670,11671,11687,11688,11689,11690,11839,11840,11841,11842,11859,11860,11861,11862,12011,12012,12013,12014,12031,12032,12033,12034,12183,12184,12185,12186,12203,12204,12205,12206,12356,12357,12376,12377,15617,15788,15789,15790,15959,15960,15961,16131,16132,16303,10697,10700,10869,10872,11194,11195,11196,11197,11198,11367,11368,11369,11540,12796,12797,12798,12799,12800,12969,12970,12971,13142,16014,16017,16186,16189,19164,19167,19336,19339,12903,12904,13075,13076,14292,14293,14294,14295,15183,20695,20696,20867,20868,23297,23298,23299,23464,23465,23469,23470,23471,23636,23637,23641,23643,33917,34591,35342,38043,38044,38091,38092,38263,38264,38580,39915,39916,40087,40088,40638,42832,42833,42910,19105,19106,20323,20324,20692,20693,20878,20879,21507,21508,21531,21532,22028,22029,22411,22412,22774,22775,23760,23761,19109,19110,19111,19281,19282,19283,19453,19455,19623,19630,19639,19640,19641,19808,19811,19812,19813,19966,19970,20147,20159,20483,20499,20530,20531,20532,20653,20664,20702,20703,20704,20820,20821,20822,20992,20993,20994,21347,21353,21527,21528,21529,21688,21699,21700,21701,22422,22423,22424,22425,22717,22718,22719,22720,22721,22722,23750,23756,23965,23966,23967,23968,24091,18286,19675,20340,11231,11232,11233,11403,11404,11405,17717,17718,17719,17889,17890,17891,17971,18092,18962,18963,18964,19134,19135,19136,33390,33391,33392,33562,33563,33564,36367,36368,36369,36539,36540,36541,36684,36685,36686,36856,36857,36858,38019,38020,38021,38191,38192,38193,40284,40285,40286,40456,40457,40458,42885,42886,42887,43057,43058,43059,33231,33232,33233,33234,33235,33236,33403,33404,33405,33406,33407,33408,33575,33576,33577,33578,33579,33580,33747,33748,33749,33750,33751,33752,33919,33920,33921,33922,33923,33924,34091,34092,34093,34094,34095,34096,34120,34121,34240,34241,34242,34243,34244,34245,34292,34293,34412,34413,34414,34415,34416,34417,34454,34584,34585,34586,34587,34588,34589,34620,34621,34622,34623,34624,34625,34626,34652,34749,34750,34756,34757,34758,34759,34760,34761,34792,34793,34794,34795,34796,34797,34798,34805,34806,34818,34819,34820,34821,34822,34823,34824,34921,34922,34928,34929,34930,34931,34932,34933,34964,34965,34966,34967,34968,34969,34970,34977,34978,34990,34991,34992,34993,34994,34995,34996,35100,35101,35102,35103,35104,35105,35118,35136,35137,35138,35139,35140,35141,35142,35162,35163,35164,35165,35166,35167,35168,35284,35285,35286,35287,35288,35289,35290,35308,35309,35310,35312,35313,35314,35334,35335,35336,35337,35338,35339,35340,35456,35457,35458,35459,35460,35461,35462,35506,35507,35508,35510,35511,35512,35628,35629,35630,35631,35632,35633,35634,35800,35801,35802,35803,35804,35805,35806,35954,35955,35972,35973,35974,35976,35977,35978,36126,36127,36833,36834,36992,36993,36994,36995,36996,36997,37005,37006,37164,37165,37166,37167,37168,37169,37336,37337,37338,37339,37340,37341,37358,37359,37360,37361,37362,37363,37508,37509,37510,37511,37512,37513,37530,37531,37532,37533,37534,37535,37546,37547,37680,37681,37682,37683,37684,37685,37702,37703,37704,37705,37706,37707,37718,37719,37852,37853,37854,37855,37856,37857,37874,37875,37876,37877,37878,37879,38046,38047,38048,38049,38050,38051,38187,38188,38218,38219,38220,38221,38222,38223,38359,38360,38730,38896,38897,38898,38899,38900,38901,38902,39068,39069,39070,39071,39072,39073,39074,39240,39241,39242,39243,39244,39245,39246,39412,39413,39414,39415,39416,39417,39418,39584,39585,39586,39587,39588,39589,39590,39780,39781,39782,39783,39784,39785,39952,39953,39954,39955,39956,39957,39965,39966,39967,39968,39969,39970,40124,40125,40126,40127,40128,40129,40137,40138,40139,40140,40141,40142,40296,40297,40298,40299,40300,40301,40309,40310,40311,40312,40313,40314,40438,40439,40468,40469,40470,40471,40472,40473,40481,40482,40483,40484,40485,40486,40610,40611,40640,40641,40642,40643,40644,40645,40653,40654,40655,40656,40657,40658,40825,40826,40827,40828,40829,40830,41321,41487,41488,41489,41490,41491,41492,41493,41628,41629,41630,41631,41632,41633,41659,41660,41661,41662,41663,41664,41665,41800,41801,41802,41803,41804,41805,41831,41832,41833,41834,41835,41836,41837,41972,41973,41974,41975,41976,41977,42003,42004,42005,42006,42007,42008,42009,42049,42144,42145,42146,42147,42148,42149,42175,42176,42177,42179,42180,42181,42215,42216,42217,42218,42219,42220,42221,42316,42317,42318,42319,42320,42321,42387,42388,42389,42390,42391,42392,42393,42488,42489,42490,42491,42492,42493,42559,42560,42561,42562,42563,42564,42565,42731,42732,42733,42734,42735,42736,42737,42903,42904,42905,42906,42907,42908,42909,43576,43577,43877,43878,43879,43880,43904,43905,43906,43907,43912,43913,43914,43915,37384,37385,37386,37387,37388,37389,37556,37557,37558,37559,37560,37561,37728,37729,37730,37731,37732,37733,37900,37901,37902,37903,37904,37905,38072,38073,38074,38075,38076,38077,41461,41462,41633,41634,41877,41878,42049,42050,32852,32853,32854,32855,32856,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880,32881,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908,32909,32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936,32937,32938,32939,32940,32941,32942,32943,32944,33024,33025,33026,33027,33028,33031,33032,33033,33034,33035,33036,33037,33038,33039,33040,33041,33042,33043,33044,33045,33046,33047,33048,33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33071,33072,33073,33074,33075,33076,33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089,33090,33091,33092,33093,33094,33097,33098,33099,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109,33110,33111,33112,33113,33114,33115,33116,33196,33197,33198,33199,33200,33203,33204,33205,33206,33207,33208,33209,33210,33211,33212,33213,33214,33215,33216,33217,33218,33219,33220,33221,33222,33223,33225,33226,33227,33228,33229,33230,33237,33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255,33256,33258,33259,33260,33261,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33275,33276,33277,33278,33279,33280,33281,33282,33283,33284,33285,33286,33287,33288,33368,33369,33370,33371,33372,33375,33376,33377,33378,33379,33380,33381,33382,33383,33384,33385,33386,33387,33388,33389,33390,33391,33392,33393,33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33405,33406,33407,33408,33409,33415,33416,33417,33418,33419,33420,33421,33422,33423,33424,33425,33426,33427,33428,33429,33430,33431,33432,33433,33434,33435,33436,33437,33438,33441,33442,33443,33444,33445,33446,33447,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33966,33967,33968,33969,33970,33971,33972,33973,33974,33975,33976,34137,34138,34309,34481,34653,34654,34825,34826,34827,34998,34999,35000,35171,35172,35344,35515,35516,35687,35859,35860,36031,36032,36033,36204,36205,36206,36377,36378,36379,36550,36551,36552,36723,36724,36896,37067,37068,37239,37411,37583,37584,37755,37756,37757,37928,37929,38101,38272,38273,38443,38444,38615,38786,38787,38955,38956,38957,38958,39126,39127,39298,39468,39469,39470,39639,39640,39811,39983,39984,40155,40156,40157,40158,40159,40160,40328,40329,40331,40332,40333,40504,40505,40677,40849,41021,41022,41193,41194,41195,41366,41367,41368,41539,41540,41541,41542,41712,41713,41714,41715,41716,41886,41887,41888,42060,42568,42740,42912,43084,43256,43428,33540,33541,33598,33599,33600,33601,33602,33603,33610,33613,33622,33623,33624,33625,33626,33627,33628,33629,33630,33631,33632,33713,33714,33769,33770,33775,33776,33777,33778,33779,33780,33781,33782,33785,33786,33787,33793,33794,33886,33941,33959,33960,33961,33962,33963,33964,33965,34058,34113,34230,34284,34285,34401,34402,34456,34573,34574,34628,34745,34800,34917,34918,34919,34972,34973,35091,35092,35093,35094,35095,35145,35267,35268,35317,35440,35489,35612,35613,35661,35673,35676,35785,35833,35834,35839,35840,35841,35842,35845,35848,35957,36005,36006,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36017,36020,36021,36129,36178,36179,36180,36181,36182,36183,36186,36187,36188,36189,36192,36193,36194,36195,36196,36197,36199,36200,36201,36202,36300,36301,36365,36366,36367,36368,36369,36371,36373,36374,36375,36376,36471,36472,36473,36546,36547,36548,36640,36641,36642,36643,36644,36720,36811,36812,36813,36814,36815,36891,36892,36983,36984,37062,37063,37155,37234,37326,37327,37406,37498,37499,37578,37579,37670,37750,37751,37752,37842,37923,37924,38013,38014,38096,38185,38186,38268,38357,38439,38440,38529,38610,38611,38701,38782,38873,38953,38954,39045,39119,39120,39121,39122,39123,39124,39125,39216,39217,39290,39291,39388,39389,39462,39560,39634,39806,39978,40150,40322,40494,40495,40592,40593,40597,40598,40599,40666,40667,40668,40669,40670,40671,40765,40766,40767,40768,40769,40771,40772,40839,40840,40842,40843,40844,40944,40970,40971,40972,40973,40974,40975,40976,40977,40978,41015,41016,41017,41116,41141,41142,41150,41151,41188,41189,41190,41191,41192,41288,41313,41323,41361,41362,41363,41364,41459,41460,41485,41495,41536,41630,41631,41632,41657,41667,41708,41799,41800,41801,41802,41803,41829,41839,41880,41970,41971,41972,41973,41974,42001,42011,42052,42142,42143,42173,42183,42224,42314,42345,42355,42396,42486,42517,42518,42526,42527,42658,42689,42690,42691,42692,42693,42695,42696,42697,42698,42699,42830,42831,42862,42863,42864,42865,42867,42868,42869,42870,43003,43084,43175,43236,43256,43347,43408,43428,43519,43579,43580,43600,43691,43692,43750,43751,43752,43772,43864,43865,43891,43899,43919,43920,43921,43922,43923,43944,44037,44038,44063,44071,44080,44082,44083,44088,44089,44090,44091,44092,44093,44094,44116,44210,44234,44235,44243,44244,44247,44248,44249,44250,44251,44252,44254,44255,44256,44257,44258,44259,44260,44261,44262,44263,44288,44382,44405,44406,44407,44415,44416,44417,44418,44419,44420,44421,44422,44423,44424,44427,44428,44429,44430,44431,44432,44459,44460,44553,44554,44575,44576,44577,44578,44588,44589,44590,44591,44631,44725,44726,44747,44748,44749,44803,44897,44975,44976,45147,45148,45320,45492,45664,45836,46008,46179,46180,46350,46351,46522,46694,46866,47038,47209,47210,47380,47381,47552,47724,47896,48068,48240,48412,48584,48756,48928,48929,49100,49101,49102,49273,49274,49446,49618,49789,49790,49961,50133,50305,50477,50649,50650,50821,50822,50823,50994,50995,50996,50997,51167,51168,51169,37328,37329,38609,38610,38779,38780,38949,38950,39390,39563,39564,40252,40253,41818,41819,41989,41992,42027,42028,42029,42160,42165,42199,42201,42371,42373,42543,42544,42545,42703,42704,42875,42876,37327,37499,37670,37671,37842,37843,38014,38322,38323,38324,38325,38326,38494,38495,38496,38497,38498,38781,38782,38838,38839,38840,38841,38842,38843,38844,38951,38952,38953,39010,39011,39012,39013,39014,39015,39016,39121,39122,39123,39124,39389,39560,39561,39562,39732,39733,39734,39735,39736,39904,39905,39906,39907,40076,40077,40078,40079,40248,40249,40250,40251,40420,40421,40422,40423,40424,40425,40592,40593,40594,40595,40596,40597,40766,40767,40768,41990,41991,42161,42162,42163,42164,42200,42332,42333,42334,42335,42336,42337,42372,42504,42505,42506,42507,42508,42509,42677,42678,42679,42680,42850,42851,51601,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680,51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,23423,37500,37672,37844,44908,44909,45080,45081,45129,45650,45651,45822,45823,46622,46672,46820,47035,47149,47522,48061,48405,48406,48574,48575,48743,48744,49037,49231,49941,50473,50474,51104,51128,51429,51601,51773,51944,51945,52116],\"doors\":[{\"x\":80,\"y\":211,\"p\":0,\"tcx\":148,\"tcy\":306,\"to\":\"u\",\"tx\":155,\"ty\":311},{\"x\":127,\"y\":120,\"p\":0,\"to\":\"d\",\"tx\":65,\"ty\":125},{\"x\":20,\"y\":145,\"p\":0,\"tcx\":151,\"tcy\":115,\"to\":\"u\",\"tx\":157,\"ty\":120},{\"x\":16,\"y\":135,\"p\":0,\"to\":\"u\",\"tx\":147,\"ty\":113},{\"x\":157,\"y\":120,\"p\":0,\"to\":\"d\",\"tx\":20,\"ty\":145},{\"x\":147,\"y\":113,\"p\":0,\"to\":\"d\",\"tx\":16,\"ty\":135},{\"x\":51,\"y\":205,\"p\":0,\"tcx\":147,\"tcy\":138,\"to\":\"u\",\"tx\":154,\"ty\":143},{\"x\":154,\"y\":143,\"p\":0,\"to\":\"d\",\"tx\":51,\"ty\":205},{\"x\":77,\"y\":237,\"p\":1,\"tcx\":72,\"tcy\":231,\"to\":\"d\",\"tx\":82,\"ty\":234},{\"x\":82,\"y\":234,\"p\":1,\"tcx\":65,\"tcy\":235,\"to\":\"d\",\"tx\":77,\"ty\":237},{\"x\":154,\"y\":208,\"p\":0,\"to\":\"d\",\"tx\":154,\"ty\":196},{\"x\":158,\"y\":208,\"p\":0,\"tcx\":120,\"tcy\":210,\"to\":\"u\",\"tx\":127,\"ty\":214},{\"x\":156,\"y\":202,\"p\":0,\"to\":\"d\",\"tx\":158,\"ty\":208},{\"x\":152,\"y\":202,\"p\":0,\"tcx\":120,\"tcy\":205,\"to\":\"d\",\"tx\":123,\"ty\":208},{\"x\":154,\"y\":196,\"p\":0,\"to\":\"u\",\"tx\":133,\"ty\":200},{\"x\":158,\"y\":196,\"p\":0,\"to\":\"d\",\"tx\":131,\"ty\":208},{\"x\":162,\"y\":196,\"p\":0,\"to\":\"u\",\"tx\":127,\"ty\":214},{\"x\":127,\"y\":214,\"p\":0,\"to\":\"d\",\"tx\":154,\"ty\":208},{\"x\":127,\"y\":208,\"p\":0,\"to\":\"u\",\"tx\":156,\"ty\":202},{\"x\":131,\"y\":208,\"p\":0,\"to\":\"u\",\"tx\":120,\"ty\":200},{\"x\":123,\"y\":208,\"p\":0,\"to\":\"u\",\"tx\":127,\"ty\":202},{\"x\":127,\"y\":202,\"p\":0,\"to\":\"d\",\"tx\":127,\"ty\":208},{\"x\":133,\"y\":200,\"p\":0,\"to\":\"d\",\"tx\":158,\"ty\":196},{\"x\":127,\"y\":196,\"p\":0,\"to\":\"d\",\"tx\":154,\"ty\":208},{\"x\":120,\"y\":200,\"p\":0,\"to\":\"d\",\"tx\":127,\"ty\":183},{\"x\":127,\"y\":190,\"p\":0,\"to\":\"d\",\"tx\":74,\"ty\":145},{\"x\":127,\"y\":183,\"p\":0,\"to\":\"u\",\"tx\":120,\"ty\":200},{\"x\":156,\"y\":214,\"p\":0,\"to\":\"d\",\"tx\":74,\"ty\":145},{\"x\":74,\"y\":145,\"p\":0,\"tcx\":149,\"tcy\":211,\"to\":\"u\",\"tx\":156,\"ty\":214},{\"x\":65,\"y\":125,\"p\":0,\"tcx\":120,\"tcy\":115,\"to\":\"u\",\"tx\":127,\"ty\":120},{\"x\":155,\"y\":71,\"p\":0,\"to\":\"d\",\"tx\":71,\"ty\":3},{\"x\":155,\"y\":96,\"p\":0,\"to\":\"d\",\"tx\":71,\"ty\":21},{\"x\":155,\"y\":86,\"p\":0,\"to\":\"u\",\"tx\":71,\"ty\":11},{\"x\":155,\"y\":240,\"p\":0,\"to\":\"d\",\"tx\":18,\"ty\":86},{\"x\":127,\"y\":240,\"p\":0,\"to\":\"d\",\"tx\":19,\"ty\":77},{\"x\":18,\"y\":86,\"p\":0,\"tcx\":149,\"tcy\":236,\"to\":\"u\",\"tx\":155,\"ty\":240},{\"x\":19,\"y\":77,\"p\":0,\"tcx\":123,\"tcy\":236,\"to\":\"u\",\"tx\":127,\"ty\":240},{\"x\":126,\"y\":143,\"p\":0,\"to\":\"d\",\"tx\":77,\"ty\":206},{\"x\":77,\"y\":206,\"p\":0,\"tcx\":119,\"tcy\":138,\"to\":\"u\",\"tx\":126,\"ty\":143},{\"x\":92,\"y\":52,\"p\":0,\"to\":\"u\",\"tx\":79,\"ty\":45},{\"x\":79,\"y\":45,\"p\":0,\"tcx\":89,\"tcy\":50,\"to\":\"d\",\"tx\":92,\"ty\":52},{\"x\":78,\"y\":40,\"p\":0,\"tcx\":112,\"tcy\":91,\"to\":\"u\",\"tx\":117,\"ty\":94},{\"x\":91,\"y\":29,\"p\":0,\"tcx\":125,\"tcy\":86,\"to\":\"d\",\"tx\":135,\"ty\":88},{\"x\":135,\"y\":88,\"p\":0,\"to\":\"u\",\"tx\":91,\"ty\":29},{\"x\":117,\"y\":94,\"p\":0,\"tcx\":72,\"tcy\":40,\"to\":\"d\",\"tx\":78,\"ty\":40},{\"x\":6,\"y\":10,\"p\":0,\"tcx\":149,\"tcy\":180,\"to\":\"d\",\"tx\":156,\"ty\":183},{\"x\":156,\"y\":181,\"p\":0,\"to\":\"u\",\"tx\":6,\"ty\":9},{\"x\":156,\"y\":190,\"p\":0,\"to\":\"d\",\"tx\":9,\"ty\":17},{\"x\":9,\"y\":17,\"p\":0,\"tcx\":149,\"tcy\":185,\"to\":\"u\",\"tx\":156,\"ty\":190},{\"x\":155,\"y\":158,\"p\":0,\"to\":\"u\",\"tx\":104,\"ty\":6},{\"x\":104,\"y\":7,\"p\":0,\"tcx\":148,\"tcy\":157,\"to\":\"d\",\"tx\":155,\"ty\":161},{\"x\":127,\"y\":166,\"p\":0,\"to\":\"d\",\"tx\":26,\"ty\":296},{\"x\":127,\"y\":158,\"p\":0,\"to\":\"u\",\"tx\":25,\"ty\":291},{\"x\":26,\"y\":296,\"p\":0,\"tcx\":120,\"tcy\":162,\"to\":\"u\",\"tx\":127,\"ty\":166},{\"x\":25,\"y\":292,\"p\":0,\"tcx\":120,\"tcy\":157,\"to\":\"d\",\"tx\":127,\"ty\":161},{\"x\":49,\"y\":97,\"p\":0,\"tcx\":151,\"tcy\":259,\"to\":\"u\",\"tx\":157,\"ty\":264},{\"x\":38,\"y\":94,\"p\":0,\"to\":\"d\",\"tx\":147,\"ty\":257},{\"x\":157,\"y\":264,\"p\":0,\"to\":\"d\",\"tx\":49,\"ty\":97},{\"x\":147,\"y\":254,\"p\":0,\"tcx\":28,\"tcy\":90,\"to\":\"u\",\"tx\":38,\"ty\":93},{\"x\":124,\"y\":275,\"p\":0,\"to\":\"d\",\"tx\":75,\"ty\":102},{\"x\":129,\"y\":275,\"p\":0,\"to\":\"d\",\"tx\":79,\"ty\":102},{\"x\":79,\"y\":102,\"p\":0,\"tcx\":120,\"tcy\":270,\"to\":\"u\",\"tx\":129,\"ty\":275},{\"x\":75,\"y\":102,\"p\":0,\"tcx\":120,\"tcy\":270,\"to\":\"u\",\"tx\":124,\"ty\":275},{\"x\":71,\"y\":3,\"p\":0,\"tcx\":148,\"tcy\":65,\"to\":\"u\",\"tx\":155,\"ty\":71},{\"x\":71,\"y\":21,\"p\":0,\"to\":\"u\",\"tx\":155,\"ty\":96},{\"x\":127,\"y\":299,\"p\":0,\"to\":\"d\",\"tx\":38,\"ty\":245},{\"x\":38,\"y\":245,\"p\":0,\"tcx\":120,\"tcy\":294,\"to\":\"u\",\"tx\":127,\"ty\":299},{\"x\":71,\"y\":11,\"p\":0,\"to\":\"d\",\"tx\":155,\"ty\":86},{\"x\":78,\"y\":137,\"p\":0,\"tcx\":149,\"tcy\":291,\"to\":\"u\",\"tx\":156,\"ty\":296},{\"x\":156,\"y\":296,\"p\":0,\"to\":\"d\",\"tx\":78,\"ty\":137},{\"x\":27,\"y\":209,\"p\":0,\"tcx\":148,\"tcy\":281,\"to\":\"u\",\"tx\":155,\"ty\":286},{\"x\":155,\"y\":286,\"p\":0,\"to\":\"d\",\"tx\":27,\"ty\":209},{\"x\":155,\"y\":311,\"p\":0,\"to\":\"d\",\"tx\":80,\"ty\":211},{\"x\":155,\"y\":20,\"p\":0,\"to\":\"d\",\"tx\":18,\"ty\":113},{\"x\":18,\"y\":113,\"p\":0,\"tcx\":148,\"tcy\":15,\"to\":\"u\",\"tx\":155,\"ty\":20},{\"x\":70,\"y\":80,\"p\":0,\"tcx\":155,\"tcy\":31,\"to\":\"u\",\"tx\":166,\"ty\":36},{\"x\":166,\"y\":36,\"p\":0,\"to\":\"d\",\"tx\":70,\"ty\":80},{\"x\":143,\"y\":26,\"p\":0,\"tcx\":49,\"tcy\":75,\"to\":\"d\",\"tx\":54,\"ty\":76},{\"x\":53,\"y\":76,\"p\":0,\"tcx\":140,\"tcy\":27,\"to\":\"d\",\"tx\":143,\"ty\":29},{\"x\":166,\"y\":33,\"p\":1,\"to\":\"l\",\"tx\":160,\"ty\":35},{\"x\":158,\"y\":35,\"p\":1,\"tcx\":142,\"tcy\":28,\"to\":\"l\",\"tx\":150,\"ty\":32},{\"x\":148,\"y\":32,\"p\":1,\"tcx\":148,\"tcy\":26,\"to\":\"l\",\"tx\":158,\"ty\":29},{\"x\":155,\"y\":29,\"p\":1,\"tcx\":140,\"tcy\":26,\"to\":\"l\",\"tx\":142,\"ty\":31},{\"x\":142,\"y\":32,\"p\":1,\"tcx\":155,\"tcy\":31,\"to\":\"d\",\"tx\":166,\"ty\":34}],\"checkpoints\":[{\"id\":1,\"x\":14,\"y\":210,\"w\":9,\"h\":2,\"s\":1},{\"id\":2,\"x\":40,\"y\":208,\"w\":6,\"h\":5,\"s\":1},{\"id\":3,\"x\":40,\"y\":221,\"w\":5,\"h\":4,\"s\":1},{\"id\":4,\"x\":13,\"y\":223,\"w\":4,\"h\":3,\"s\":1},{\"id\":5,\"x\":68,\"y\":220,\"w\":5,\"h\":5,\"s\":1},{\"id\":6,\"x\":40,\"y\":232,\"w\":5,\"h\":5,\"s\":1},{\"id\":7,\"x\":14,\"y\":233,\"w\":4,\"h\":3,\"s\":1},{\"id\":8,\"x\":41,\"y\":184,\"w\":8,\"h\":4,\"s\":0},{\"id\":9,\"x\":4,\"y\":184,\"w\":4,\"h\":3,\"s\":0},{\"id\":10,\"x\":70,\"y\":184,\"w\":4,\"h\":3,\"s\":0},{\"id\":11,\"x\":41,\"y\":133,\"w\":4,\"h\":3,\"s\":0},{\"id\":12,\"x\":156,\"y\":118,\"w\":3,\"h\":2,\"s\":0},{\"id\":13,\"x\":68,\"y\":100,\"w\":4,\"h\":2,\"s\":0},{\"id\":14,\"x\":32,\"y\":81,\"w\":10,\"h\":2,\"s\":0},{\"id\":15,\"x\":15,\"y\":50,\"w\":6,\"h\":3,\"s\":0},{\"id\":16,\"x\":42,\"y\":49,\"w\":4,\"h\":2,\"s\":0},{\"id\":17,\"x\":67,\"y\":52,\"w\":4,\"h\":2,\"s\":0},{\"id\":18,\"x\":76,\"y\":48,\"w\":4,\"h\":2,\"s\":0},{\"id\":19,\"x\":7,\"y\":257,\"w\":4,\"h\":3,\"s\":0},{\"id\":20,\"x\":33,\"y\":255,\"w\":5,\"h\":2,\"s\":0},{\"id\":21,\"x\":48,\"y\":253,\"w\":3,\"h\":2,\"s\":0},{\"id\":22,\"x\":65,\"y\":250,\"w\":7,\"h\":2,\"s\":0},{\"id\":23,\"x\":65,\"y\":143,\"w\":5,\"h\":2,\"s\":0},{\"id\":24,\"x\":55,\"y\":92,\"w\":6,\"h\":2,\"s\":0}],\"roamingAreas\":[{\"id\":0,\"x\":10,\"y\":206,\"width\":13,\"height\":7,\"type\":\"rat\",\"nb\":3},{\"id\":1,\"x\":39,\"y\":206,\"width\":8,\"height\":9,\"type\":\"rat\",\"nb\":3},{\"id\":2,\"x\":31,\"y\":218,\"width\":20,\"height\":9,\"type\":\"rat\",\"nb\":3},{\"id\":3,\"x\":6,\"y\":223,\"width\":15,\"height\":5,\"type\":\"rat\",\"nb\":3},{\"id\":4,\"x\":14,\"y\":153,\"width\":13,\"height\":3,\"type\":\"skeleton\",\"nb\":2},{\"id\":5,\"x\":47,\"y\":170,\"width\":8,\"height\":5,\"type\":\"goblin\",\"nb\":2},{\"id\":6,\"x\":49,\"y\":158,\"width\":6,\"height\":4,\"type\":\"goblin\",\"nb\":2},{\"id\":7,\"x\":6,\"y\":243,\"width\":8,\"height\":8,\"type\":\"rat\",\"nb\":2},{\"id\":8,\"x\":66,\"y\":221,\"width\":9,\"height\":6,\"type\":\"rat\",\"nb\":2},{\"id\":9,\"x\":6,\"y\":290,\"width\":17,\"height\":7,\"type\":\"crab\",\"nb\":2},{\"id\":10,\"x\":33,\"y\":266,\"width\":22,\"height\":9,\"type\":\"crab\",\"nb\":3},{\"id\":11,\"x\":32,\"y\":278,\"width\":21,\"height\":7,\"type\":\"crab\",\"nb\":3},{\"id\":12,\"x\":34,\"y\":122,\"width\":8,\"height\":9,\"type\":\"skeleton\",\"nb\":2},{\"id\":13,\"x\":12,\"y\":139,\"width\":6,\"height\":3,\"type\":\"skeleton\",\"nb\":1},{\"id\":14,\"x\":30,\"y\":135,\"width\":24,\"height\":8,\"type\":\"skeleton\",\"nb\":3},{\"id\":15,\"x\":73,\"y\":124,\"width\":7,\"height\":5,\"type\":\"goblin\",\"nb\":2},{\"id\":16,\"x\":59,\"y\":159,\"width\":15,\"height\":7,\"type\":\"goblin\",\"nb\":3},{\"id\":17,\"x\":34,\"y\":290,\"width\":17,\"height\":7,\"type\":\"crab\",\"nb\":2},{\"id\":18,\"x\":61,\"y\":290,\"width\":13,\"height\":7,\"type\":\"crab\",\"nb\":2},{\"id\":19,\"x\":32,\"y\":231,\"width\":13,\"height\":6,\"type\":\"rat\",\"nb\":2},{\"id\":20,\"x\":46,\"y\":242,\"width\":9,\"height\":9,\"type\":\"rat\",\"nb\":2},{\"id\":21,\"x\":16,\"y\":235,\"width\":10,\"height\":4,\"type\":\"rat\",\"nb\":2},{\"id\":22,\"x\":58,\"y\":230,\"width\":2,\"height\":4,\"type\":\"rat\",\"nb\":1}],\"chestAreas\":[{\"x\":123,\"y\":113,\"w\":8,\"h\":5,\"i\":[23],\"tx\":127,\"ty\":115},{\"x\":153,\"y\":52,\"w\":4,\"h\":3,\"i\":[26],\"tx\":154,\"ty\":52},{\"x\":2,\"y\":77,\"w\":6,\"h\":5,\"i\":[24,66],\"tx\":6,\"ty\":75},{\"x\":148,\"y\":163,\"w\":15,\"h\":3,\"i\":[25,62],\"tx\":155,\"ty\":167},{\"x\":44,\"y\":86,\"w\":7,\"h\":5,\"i\":[25],\"tx\":47,\"ty\":86},{\"x\":152,\"y\":280,\"w\":7,\"h\":5,\"i\":[22],\"tx\":155,\"ty\":279},{\"x\":68,\"y\":266,\"w\":6,\"h\":4,\"i\":[36,22],\"tx\":71,\"ty\":268},{\"x\":14,\"y\":262,\"w\":6,\"h\":4,\"i\":[36,22],\"tx\":17,\"ty\":264}],\"staticChests\":[{\"x\":157,\"y\":141,\"i\":[61]},{\"x\":129,\"y\":137,\"i\":[61]},{\"x\":103,\"y\":53,\"i\":[25,62]},{\"x\":9,\"y\":20,\"i\":[25,62]},{\"x\":94,\"y\":54,\"i\":[25,62]},{\"x\":25,\"y\":286,\"i\":[65,23]},{\"x\":123,\"y\":257,\"i\":[24]},{\"x\":130,\"y\":257,\"i\":[35]},{\"x\":156,\"y\":293,\"i\":[64]},{\"x\":155,\"y\":307,\"i\":[22]},{\"x\":155,\"y\":17,\"i\":[64]},{\"x\":60,\"y\":79,\"i\":[66]},{\"x\":46,\"y\":82,\"i\":[24]}],\"staticEntities\":{\"1305\":\"spectre\",\"1585\":\"spectre\",\"1731\":\"spectre\",\"1769\":\"spectre\",\"1785\":\"spectre\",\"1797\":\"spectre\",\"2795\":\"eye\",\"2842\":\"spectre\",\"2986\":\"spectre\",\"2993\":\"deathknight\",\"2997\":\"deathknight\",\"3191\":\"eye\",\"3251\":\"skeleton\",\"3291\":\"eye\",\"3309\":\"spectre\",\"3457\":\"spectre\",\"3672\":\"eye\",\"3861\":\"spectre\",\"3961\":\"eye\",\"5004\":\"spectre\",\"5062\":\"eye\",\"5600\":\"eye\",\"5689\":\"eye\",\"5729\":\"spectre\",\"5842\":\"skeleton2\",\"5910\":\"eye\",\"6914\":\"eye\",\"6941\":\"spectre\",\"7475\":\"eye\",\"7501\":\"spectre\",\"7592\":\"eye\",\"7610\":\"eye\",\"7658\":\"eye\",\"7916\":\"eye\",\"8499\":\"eye\",\"8921\":\"firepotion\",\"8932\":\"firepotion\",\"9271\":\"boss\",\"9611\":\"deathknight\",\"9618\":\"deathknight\",\"9781\":\"flask\",\"9792\":\"flask\",\"9852\":\"desertnpc\",\"10678\":\"ogre\",\"10862\":\"ogre\",\"10879\":\"skeleton2\",\"10898\":\"skeleton2\",\"11027\":\"skeleton2\",\"11249\":\"snake\",\"11547\":\"skeleton2\",\"11732\":\"skeleton2\",\"11763\":\"skeleton2\",\"11918\":\"skeleton2\",\"11931\":\"ogre\",\"12117\":\"ogre\",\"12931\":\"bluesword\",\"12936\":\"snake\",\"13114\":\"snake\",\"13147\":\"skeleton2\",\"13250\":\"goblin\",\"13268\":\"ogre\",\"13308\":\"skeleton2\",\"13418\":\"goblin\",\"13495\":\"snake\",\"13595\":\"goblin\",\"13615\":\"ogre\",\"13625\":\"skeleton2\",\"13764\":\"goblin\",\"13777\":\"ogre\",\"13810\":\"skeleton2\",\"13955\":\"ogre\",\"14174\":\"ogre\",\"15009\":\"spectre\",\"15013\":\"spectre\",\"15038\":\"skeleton2\",\"15144\":\"snake\",\"15158\":\"snake\",\"15196\":\"ogre\",\"15289\":\"flask\",\"15293\":\"flask\",\"15323\":\"ogre\",\"15353\":\"spectre\",\"15357\":\"spectre\",\"15512\":\"ogre\",\"15633\":\"flask\",\"15637\":\"flask\",\"15721\":\"skeleton2\",\"15848\":\"ogre\",\"15977\":\"flask\",\"15981\":\"flask\",\"16179\":\"ogre\",\"17049\":\"ogre\",\"17208\":\"snake\",\"17420\":\"ogre\",\"17594\":\"ogre\",\"17746\":\"snake\",\"17763\":\"ogre\",\"17967\":\"snake\",\"18069\":\"snake\",\"18120\":\"snake\",\"18126\":\"ogre\",\"18252\":\"snake\",\"18655\":\"ogre\",\"18989\":\"snake\",\"19290\":\"skeleton\",\"19302\":\"snake\",\"19341\":\"snake\",\"19496\":\"snake\",\"19589\":\"rat\",\"19656\":\"snake\",\"19792\":\"skeleton\",\"19801\":\"skeleton\",\"19905\":\"goblin\",\"19909\":\"goblin\",\"19977\":\"skeleton\",\"20079\":\"goblin\",\"20154\":\"skeleton\",\"20193\":\"snake\",\"20280\":\"rat\",\"20309\":\"skeleton\",\"20487\":\"skeleton\",\"20490\":\"skeleton\",\"20839\":\"skeleton\",\"21002\":\"skeleton\",\"21169\":\"skeleton\",\"21208\":\"goblin\",\"21554\":\"goblin\",\"21682\":\"skeleton\",\"21690\":\"skeleton\",\"22374\":\"skeleton\",\"23639\":\"goblin\",\"23814\":\"goblin\",\"23862\":\"king\",\"23890\":\"coder\",\"23988\":\"goblin\",\"24153\":\"goblin\",\"24157\":\"goblin\",\"24821\":\"bat\",\"24979\":\"bat\",\"25130\":\"skeleton\",\"25138\":\"bat\",\"25293\":\"bat\",\"25341\":\"bat\",\"25485\":\"bat\",\"25530\":\"ogre\",\"25693\":\"bat\",\"25700\":\"ogre\",\"25704\":\"ogre\",\"26499\":\"bat\",\"26542\":\"bat\",\"26734\":\"bat\",\"26851\":\"bat\",\"27353\":\"bat\",\"27376\":\"bat\",\"27591\":\"bat\",\"27713\":\"goblin\",\"27878\":\"goblin\",\"27904\":\"goblin\",\"28049\":\"goblin\",\"28070\":\"bat\",\"28163\":\"crab\",\"28223\":\"goblin\",\"28227\":\"goblin\",\"28247\":\"goblin\",\"28283\":\"nyan\",\"28357\":\"eye\",\"28369\":\"eye\",\"28397\":\"goblin\",\"28606\":\"bat\",\"28788\":\"bat\",\"28903\":\"bat\",\"29644\":\"bat\",\"29662\":\"bat\",\"29772\":\"bat\",\"29788\":\"bat\",\"30317\":\"bat\",\"30625\":\"bat\",\"30825\":\"bat\",\"30863\":\"bat\",\"30985\":\"bat\",\"31016\":\"bat\",\"32119\":\"rick\",\"33544\":\"guard\",\"33547\":\"guard\",\"33581\":\"guard\",\"33587\":\"guard\",\"33954\":\"guard\",\"33957\":\"guard\",\"34080\":\"sword2\",\"34437\":\"villager\",\"34576\":\"sword2\",\"35492\":\"sword2\",\"35966\":\"priest\",\"36154\":\"sword2\",\"37907\":\"agent\",\"38144\":\"skeleton\",\"38199\":\"villagegirl\",\"38312\":\"skeleton\",\"38343\":\"skeleton\",\"38509\":\"skeleton\",\"38861\":\"skeleton\",\"39981\":\"cake\",\"40031\":\"skeleton\",\"40095\":\"sword2\",\"40231\":\"skeleton\",\"40430\":\"octocat\",\"40721\":\"skeleton\",\"40918\":\"skeleton\",\"42327\":\"sorcerer\",\"42394\":\"sword2\",\"42881\":\"sword2\",\"43581\":\"guard\",\"43588\":\"guard\",\"44236\":\"guard\",\"44242\":\"guard\",\"45250\":\"goblin\",\"45427\":\"goblin\",\"45596\":\"goblin\",\"45997\":\"goblin\",\"46164\":\"goblin\",\"46338\":\"goblin\",\"48139\":\"flask\",\"48147\":\"flask\",\"48485\":\"rat\",\"48489\":\"rat\",\"48829\":\"rat\",\"48833\":\"rat\",\"50472\":\"beachnpc\",\"50521\":\"flask\",\"50523\":\"scientist\",\"50525\":\"firepotion\",\"53130\":\"rat\",\"53133\":\"rat\"},\"tilesize\":16}"
  },
  {
    "path": "shared/js/gametypes.js",
    "content": "\nTypes = {\n    Messages: {\n        HELLO: 0,\n        WELCOME: 1,\n        SPAWN: 2,\n        DESPAWN: 3,\n        MOVE: 4,\n        LOOTMOVE: 5,\n        AGGRO: 6,\n        ATTACK: 7,\n        HIT: 8,\n        HURT: 9,\n        HEALTH: 10,\n        CHAT: 11,\n        LOOT: 12,\n        EQUIP: 13,\n        DROP: 14,\n        TELEPORT: 15,\n        DAMAGE: 16,\n        POPULATION: 17,\n        KILL: 18,\n        LIST: 19,\n        WHO: 20,\n        ZONE: 21,\n        DESTROY: 22,\n        HP: 23,\n        BLINK: 24,\n        OPEN: 25,\n        CHECK: 26\n    },\n    \n    Entities: {\n        WARRIOR: 1,\n        \n        // Mobs\n        RAT: 2,\n        SKELETON: 3,\n        GOBLIN: 4,\n        OGRE: 5,\n        SPECTRE: 6,\n        CRAB: 7,\n        BAT: 8,\n        WIZARD: 9,\n        EYE: 10,\n        SNAKE: 11,\n        SKELETON2: 12,\n        BOSS: 13,\n        DEATHKNIGHT: 14,\n        \n        // Armors\n        FIREFOX: 20,\n        CLOTHARMOR: 21,\n        LEATHERARMOR: 22,\n        MAILARMOR: 23,\n        PLATEARMOR: 24,\n        REDARMOR: 25,\n        GOLDENARMOR: 26,\n        \n        // Objects\n        FLASK: 35,\n        BURGER: 36,\n        CHEST: 37,\n        FIREPOTION: 38,\n        CAKE: 39,\n        \n        // NPCs\n        GUARD: 40,\n        KING: 41,\n        OCTOCAT: 42,\n        VILLAGEGIRL: 43,\n        VILLAGER: 44,\n        PRIEST: 45,\n        SCIENTIST: 46,\n        AGENT: 47,\n        RICK: 48,\n        NYAN: 49,\n        SORCERER: 50,\n        BEACHNPC: 51,\n        FORESTNPC: 52,\n        DESERTNPC: 53,\n        LAVANPC: 54,\n        CODER: 55,\n        \n        // Weapons\n        SWORD1: 60,\n        SWORD2: 61,\n        REDSWORD: 62,\n        GOLDENSWORD: 63,\n        MORNINGSTAR: 64,\n        AXE: 65,\n        BLUESWORD: 66\n    },\n    \n    Orientations: {\n        UP: 1,\n        DOWN: 2,\n        LEFT: 3,\n        RIGHT: 4\n    }\n};\n\nvar kinds = {\n    warrior: [Types.Entities.WARRIOR, \"player\"],\n    \n    rat: [Types.Entities.RAT, \"mob\"],\n    skeleton: [Types.Entities.SKELETON , \"mob\"],\n    goblin: [Types.Entities.GOBLIN, \"mob\"],\n    ogre: [Types.Entities.OGRE, \"mob\"],\n    spectre: [Types.Entities.SPECTRE, \"mob\"],\n    deathknight: [Types.Entities.DEATHKNIGHT, \"mob\"],\n    crab: [Types.Entities.CRAB, \"mob\"],\n    snake: [Types.Entities.SNAKE, \"mob\"],\n    bat: [Types.Entities.BAT, \"mob\"],\n    wizard: [Types.Entities.WIZARD, \"mob\"],\n    eye: [Types.Entities.EYE, \"mob\"],\n    skeleton2: [Types.Entities.SKELETON2, \"mob\"],\n    boss: [Types.Entities.BOSS, \"mob\"],\n\n    sword1: [Types.Entities.SWORD1, \"weapon\"],\n    sword2: [Types.Entities.SWORD2, \"weapon\"],\n    axe: [Types.Entities.AXE, \"weapon\"],\n    redsword: [Types.Entities.REDSWORD, \"weapon\"],\n    bluesword: [Types.Entities.BLUESWORD, \"weapon\"],\n    goldensword: [Types.Entities.GOLDENSWORD, \"weapon\"],\n    morningstar: [Types.Entities.MORNINGSTAR, \"weapon\"],\n    \n    firefox: [Types.Entities.FIREFOX, \"armor\"],\n    clotharmor: [Types.Entities.CLOTHARMOR, \"armor\"],\n    leatherarmor: [Types.Entities.LEATHERARMOR, \"armor\"],\n    mailarmor: [Types.Entities.MAILARMOR, \"armor\"],\n    platearmor: [Types.Entities.PLATEARMOR, \"armor\"],\n    redarmor: [Types.Entities.REDARMOR, \"armor\"],\n    goldenarmor: [Types.Entities.GOLDENARMOR, \"armor\"],\n\n    flask: [Types.Entities.FLASK, \"object\"],\n    cake: [Types.Entities.CAKE, \"object\"],\n    burger: [Types.Entities.BURGER, \"object\"],\n    chest: [Types.Entities.CHEST, \"object\"],\n    firepotion: [Types.Entities.FIREPOTION, \"object\"],\n\n    guard: [Types.Entities.GUARD, \"npc\"],\n    villagegirl: [Types.Entities.VILLAGEGIRL, \"npc\"],\n    villager: [Types.Entities.VILLAGER, \"npc\"],\n    coder: [Types.Entities.CODER, \"npc\"],\n    scientist: [Types.Entities.SCIENTIST, \"npc\"],\n    priest: [Types.Entities.PRIEST, \"npc\"],\n    king: [Types.Entities.KING, \"npc\"],\n    rick: [Types.Entities.RICK, \"npc\"],\n    nyan: [Types.Entities.NYAN, \"npc\"],\n    sorcerer: [Types.Entities.SORCERER, \"npc\"],\n    agent: [Types.Entities.AGENT, \"npc\"],\n    octocat: [Types.Entities.OCTOCAT, \"npc\"],\n    beachnpc: [Types.Entities.BEACHNPC, \"npc\"],\n    forestnpc: [Types.Entities.FORESTNPC, \"npc\"],\n    desertnpc: [Types.Entities.DESERTNPC, \"npc\"],\n    lavanpc: [Types.Entities.LAVANPC, \"npc\"],\n    \n    getType: function(kind) {\n        return kinds[Types.getKindAsString(kind)][1];\n    }\n};\n\nTypes.rankedWeapons = [\n    Types.Entities.SWORD1,\n    Types.Entities.SWORD2,\n    Types.Entities.AXE,\n    Types.Entities.MORNINGSTAR,\n    Types.Entities.BLUESWORD,\n    Types.Entities.REDSWORD,\n    Types.Entities.GOLDENSWORD\n];\n\nTypes.rankedArmors = [\n    Types.Entities.CLOTHARMOR,\n    Types.Entities.LEATHERARMOR,\n    Types.Entities.MAILARMOR,\n    Types.Entities.PLATEARMOR,\n    Types.Entities.REDARMOR,\n    Types.Entities.GOLDENARMOR\n];\n\nTypes.getWeaponRank = function(weaponKind) {\n    return _.indexOf(Types.rankedWeapons, weaponKind);\n};\n\nTypes.getArmorRank = function(armorKind) {\n    return _.indexOf(Types.rankedArmors, armorKind);\n};\n\nTypes.isPlayer = function(kind) {\n    return kinds.getType(kind) === \"player\";\n};\n\nTypes.isMob = function(kind) {\n    return kinds.getType(kind) === \"mob\";\n};\n\nTypes.isNpc = function(kind) {\n    return kinds.getType(kind) === \"npc\";\n};\n\nTypes.isCharacter = function(kind) {\n    return Types.isMob(kind) || Types.isNpc(kind) || Types.isPlayer(kind);\n};\n\nTypes.isArmor = function(kind) {\n    return kinds.getType(kind) === \"armor\";\n};\n\nTypes.isWeapon = function(kind) {\n    return kinds.getType(kind) === \"weapon\";\n};\n\nTypes.isObject = function(kind) {\n    return kinds.getType(kind) === \"object\";\n};\n\nTypes.isChest = function(kind) {\n    return kind === Types.Entities.CHEST;\n};\n\nTypes.isItem = function(kind) {\n    return Types.isWeapon(kind) \n        || Types.isArmor(kind) \n        || (Types.isObject(kind) && !Types.isChest(kind));\n};\n\nTypes.isHealingItem = function(kind) {\n    return kind === Types.Entities.FLASK \n        || kind === Types.Entities.BURGER;\n};\n\nTypes.isExpendableItem = function(kind) {\n    return Types.isHealingItem(kind)\n        || kind === Types.Entities.FIREPOTION\n        || kind === Types.Entities.CAKE;\n};\n\nTypes.getKindFromString = function(kind) {\n    if(kind in kinds) {\n        return kinds[kind][0];\n    }\n};\n\nTypes.getKindAsString = function(kind) {\n    for(var k in kinds) {\n        if(kinds[k][0] === kind) {\n            return k;\n        }\n    }\n};\n\nTypes.forEachKind = function(callback) {\n    for(var k in kinds) {\n        callback(kinds[k][0], k);\n    }\n};\n\nTypes.forEachArmor = function(callback) {\n    Types.forEachKind(function(kind, kindName) {\n        if(Types.isArmor(kind)) {\n            callback(kind, kindName);\n        }\n    });\n};\n\nTypes.forEachMobOrNpcKind = function(callback) {\n    Types.forEachKind(function(kind, kindName) {\n        if(Types.isMob(kind) || Types.isNpc(kind)) {\n            callback(kind, kindName);\n        }\n    });\n};\n\nTypes.forEachArmorKind = function(callback) {\n    Types.forEachKind(function(kind, kindName) {\n        if(Types.isArmor(kind)) {\n            callback(kind, kindName);\n        }\n    });\n};\n\nTypes.getOrientationAsString = function(orientation) {\n    switch(orientation) {\n        case Types.Orientations.LEFT: return \"left\"; break;\n        case Types.Orientations.RIGHT: return \"right\"; break;\n        case Types.Orientations.UP: return \"up\"; break;\n        case Types.Orientations.DOWN: return \"down\"; break;\n    }\n};\n\nTypes.getRandomItemKind = function(item) {\n    var all = _.union(this.rankedWeapons, this.rankedArmors),\n        forbidden = [Types.Entities.SWORD1, Types.Entities.CLOTHARMOR],\n        itemKinds = _.difference(all, forbidden),\n        i = Math.floor(Math.random() * _.size(itemKinds));\n    \n    return itemKinds[i];\n};\n\nTypes.getMessageTypeAsString = function(type) {\n    var typeName;\n    _.each(Types.Messages, function(value, name) {\n        if(value === type) {\n            typeName = name;\n        }\n    });\n    if(!typeName) {\n        typeName = \"UNKNOWN\";\n    }\n    return typeName;\n};\n\nif(!(typeof exports === 'undefined')) {\n    module.exports = Types;\n}"
  },
  {
    "path": "tools/maps/README.md",
    "content": "BrowserQuest map exporter\n=========================\n\n***Disclaimer: due to popular demand we are open sourcing this tool, but please be aware that it was never meant to be publicly released. Therefore the code is messy/non-optimized and the exporting process can be very slow with large map files.***\n\n\nEditing the map\n---------------\n\nInstall the Tiled editor: http://www.mapeditor.org/\n\nOpen the `tmx/map.tmx` file in Tiled and start editing.\n\n**Note:** there currently is no documentation on how to edit BrowserQuest-specific objects/layers in Tiled. Please refer to `tmx/map.tmx` as an example if you want to create your own map.\n\n\nUsing the exporter\n------------------\n\nThis tool is to be used from the command line after the TMX file has been saved from the Tiled editor.\n\nNote: This tool was written with OSX in mind. If you are using a different OS (eg. Windows), additional/different steps might be required.\n\n**Prerequisites:**\n\n- You need python and nodejs installed.\n- Install pip: http://www.pip-installer.org/en/latest/installing.html\n- Install lxml: `pip install lxml` (preferably within a virtualenv)\n- Optional: Install Growl + growlnotify if you are on OSX.\n\n**Usage:**\n\n1. `cd tools/maps/`\n\n2. `./export.py client` or `./export.py server`\n\nYou must run both commands in order to export the client and server map files. There is no one-step export command for both map types yet.\n\n**Warning:** depending on the `.tmx` filesize, the exporting process can take up to several minutes.\n\n\nThings to know\n--------------\n\nThe client map export will create two almost identical files: `world_client.js` and `world_client.json`\nThese are both required because, depending on the browser, the game will load the map either by using a web worker (loading `world_client.js`), or via Ajax (loading `world_client.json`).\n\nThe client map file contains data about terrain tile layers, collision cells, doors, music areas, etc.\nThe server map file contains data about static entity spawning points, spawning areas, collision cells, etc.\n\nDepending on what you want to change, it's therefore not always needed to export both maps. Also, each `world_server.json` file change requires a server restart.\n\n**How the exporting process works:**\n\n1. The Tiled map TMX file is converted to a temporary JSON file by `tmx2json.py`.\n2. This file is be processed by `processmap.js` and returned as an object. This object will have different properties depending on whether we are exporting the client or the server map.\n3. The processed map object is saved as the final world map JSON file(s) in the appropriate directories.\n4. The temporary file from step 1. is deleted.\n\n\n**Known bugs:**\n \n    * There currently needs to be an empty layer at the bottom of the Tiled layer stack or else the first terrain layer will be missing.\n      (ie. if you remove the \"don't remove this layer\" layer from the `map.tmx` file, the 'sand' tiles will be missing on the beach.)\n    \n\nContributing / Ideas for improvement\n------------------------------------\n\nHere are a few ideas for anyone who might want to help make this tool better:\n\n- Remove hard-coded filenames from export.py (eg. `map.tmx`, `world_client.json`) in order to allow easier switching to different map files.\n\n- Fix known bugs (see section above)\n\n- Write documentation on how to use the exporter on Windows.\n\n- Write documentation about map editing in the Tiled editor (ie. editing BrowserQuest-specific properties of doors, chests, spawning areas, etc.)\n\n- Write documentation about the BrowserQuest map JSON format, both for client and server map types.\n\n- Get rid of the `tmx2json.py` step which can currently take up to several minutes. Note: There is a JSON exporter built in Tiled since version 0.8.0 which could be useful. We didn't use it because our tool was written before the 0.8.0 release.\n\n- A complete rewrite of this tool using a custom Tiled plugin would surely be a better approach than the current one. Being able to export directly from Tiled would be much easier to use. Also, the export process is currently too slow.\n\n\n**Additional resources:**\n\n- Tiled editor wiki: https://github.com/bjorn/tiled/wiki\n- TMX map format documentation: https://github.com/bjorn/tiled/wiki/TMX-Map-Format\n\n"
  },
  {
    "path": "tools/maps/export.py",
    "content": "#!/usr/bin/env python\nimport commands\nimport sys\n\nSRC_FILE = 'tmx/map.tmx'\n\nTEMP_FILE = SRC_FILE+'.json'\n\nmode = sys.argv[1] if len(sys.argv) > 1 else 'client'\nif mode == 'client':\n    DEST_FILE = '../../client/maps/world_client' # This will save two files (See exportmap.js)\nelse:\n    DEST_FILE = '../../server/maps/world_server.json'\n\n# Convert the Tiled TMX file to a temporary JSON file\nprint commands.getoutput('./tmx2json.py '+SRC_FILE+' '+TEMP_FILE)\n\n# Map exporting\nprint commands.getoutput('./exportmap.js '+TEMP_FILE+' '+DEST_FILE+' '+mode)\n\n# Remove temporary JSON file\nprint commands.getoutput('rm '+TEMP_FILE)\n\n# Send a Growl notification when the export process is complete\nprint commands.getoutput('growlnotify --appIcon Tiled -name \"Map export complete\" -m \"'+DEST_FILE+' was saved\"')"
  },
  {
    "path": "tools/maps/exportmap.js",
    "content": "#!/usr/bin/env node\n\nvar util = require('util'),\n    Log = require('log'),\n    path = require(\"path\"),\n    fs = require(\"fs\"),\n    processMap = require('./processmap'),\n    log = new Log(Log.DEBUG);\n    \nvar source = process.argv[2],\n    destination = process.argv[3],\n    mode = process.argv[4];\n\nif(!source || !destination) {\n    util.puts(\"Usage : ./exportmap.js map_file json_file [mode]\");\n    util.puts(\"Optional parameter : mode. Values: \\\"server\\\" (default) or \\\"client\\\".\");\n    process.exit(0);\n}\n\nfunction main() {\n    getTiledJSONmap(source, function(json) {\n        var options = { mode: mode || \"server\" },\n            map = processMap(json, options);\n        \n        var jsonMap = JSON.stringify(map); // Save the processed map object as JSON data\n        \n        if(mode === \"client\") {\n            // map in a .json file for ajax loading\n            fs.writeFile(destination+\".json\", jsonMap, function(err, file) {\n                log.info(\"Finished processing map file: \"+ destination + \".json was saved.\");\n            });\n            \n            // map in a .js file for web worker loading\n            jsonMap = \"var mapData = \"+JSON.stringify(map);\n            fs.writeFile(destination+\".js\", jsonMap, function(err, file) {\n                log.info(\"Finished processing map file: \"+ destination + \".js was saved.\");\n            });\n        } else {\n            fs.writeFile(destination, jsonMap, function(err, file) {\n                log.info(\"Finished processing map file: \"+ destination + \" was saved.\");\n            });\n        }\n    });\n}\n\n// Loads the temporary JSON Tiled map converted by tmx2json.py\nfunction getTiledJSONmap(filename, callback) {\n    var self = this;\n    \n    path.exists(filename, function(exists) {\n        if(!exists) {  \n            log.error(filename + \" doesn't exist.\")\n            return;\n        }\n    \n        fs.readFile(source, function(err, file) {\n            callback(JSON.parse(file.toString()));\n        });\n    });\n}\n\nmain();"
  },
  {
    "path": "tools/maps/processmap.js",
    "content": "\nvar Log = require('log'),\n    _ = require('underscore'),\n    log = new Log(Log.DEBUG),\n    Types = require(\"../../shared/js/gametypes\");\n\nvar map,\n    mode,\n    collidingTiles = {},\n    staticEntities = {},\n    mobsFirstgid;\n\nmodule.exports = function processMap(json, options) {\n    var self = this,\n        Tiled = json.map,\n\t\tlayerIndex = 0,\n\t\ttileIndex = 0,\n\t\ttilesetFilepath = \"\";\n\t\n    map = {\n            width: 0,\n            height: 0,\n            collisions: [],\n            doors: [],\n            checkpoints: []\n        };\n    mode = options.mode;\n    \n    if(mode === \"client\") {\n        map.data = [];\n        map.high = [];\n        map.animated = {};\n        map.blocking = [];\n        map.plateau = [];\n        map.musicAreas = [];\n    }\n    if(mode === \"server\") {\n        map.roamingAreas = [];\n        map.chestAreas = [];\n        map.staticChests = [];\n        map.staticEntities = {};\n    }\n    \n    log.info(\"Processing map info...\");\n    map.width = Tiled.width;\n    map.height = Tiled.height;\n    map.tilesize = Tiled.tilewidth;\n\n    // Tile properties (collision, z-index, animation length...)\n    var tileProperties;\n    var handleProp = function(property, id) {\n        if(property.name === \"c\") {\n            collidingTiles[id] = true;\n        }\n        \n        if(mode === \"client\") {\n            if(property.name === \"v\") {\n                map.high.push(id);\n            }\n            if(property.name === \"length\") {\n                if(!map.animated[id]) {\n                    map.animated[id] = {};\n                }\n                map.animated[id].l = property.value;\n            }\n            if(property.name === \"delay\") {\n                if(!map.animated[id]) {\n                    map.animated[id] = {};\n                }\n                map.animated[id].d = property.value;\n            }\n        }\n    }\n    \n    if(Tiled.tileset instanceof Array) {\n        _.each(Tiled.tileset, function(tileset) {\n            if(tileset.name === \"tilesheet\") {\n                log.info(\"Processing terrain properties...\");\n                tileProperties = tileset.tile;\n                for(var i=0; i < tileProperties.length; i += 1) {\n                    var property = tileProperties[i].properties.property;\n                    var tilePropertyId = tileProperties[i].id + 1;\n                    if(property instanceof Array) {\n                        for(var pi=0; pi < property.length; pi += 1) {\n                            handleProp(property[pi], tilePropertyId);\n                        }\n                    } else {\n                        handleProp(property, tilePropertyId);\n                    }\n                }\n            }\n            else if(tileset.name === \"Mobs\" && mode === \"server\") {\n                log.info(\"Processing static entity properties...\");\n                mobsFirstgid = tileset.firstgid;\n                _.each(tileset.tile, function(p) {\n                    var property = p.properties.property,\n                        id = p.id + 1;\n\n                    if(property.name === \"type\") {\n                        staticEntities[id] = property.value;\n                    }\n                });\n            }\n        });\n    } else {\n        log.error(\"A tileset is missing\");\n    }\n    \n    \n    for(var i=0; i < Tiled.objectgroup.length; i += 1) {\n        var group = Tiled.objectgroup[i];\n        if(group.name === 'doors') {\n            var doors = group.object;\n            log.info(\"Processing doors...\");\n            for(var j=0; j < doors.length; j += 1) {\n                map.doors[j] = {\n                    x: doors[j].x / map.tilesize,\n                    y: doors[j].y / map.tilesize,\n                    p: (doors[j].type === 'portal') ? 1 : 0,\n                }\n                var doorprops = doors[j].properties.property;\n                for(var k=0; k < doorprops.length; k += 1) {\n                    map.doors[j]['t'+doorprops[k].name] = doorprops[k].value;\n                }\n            }\n        }\n    }\n\n    // Object layers\n    _.each(Tiled.objectgroup, function(objectlayer) {\n        if(objectlayer.name === \"roaming\" && mode === \"server\") {\n            log.info(\"Processing roaming areas...\");\n            var areas = objectlayer.object;\n    \n            for(var i=0; i < areas.length; i += 1) {\n                if(areas[i].properties) {\n                    var nb = areas[i].properties.property.value;\n                }\n        \n                map.roamingAreas[i] = {  id: i,\n                                         x: areas[i].x / 16,\n                                         y: areas[i].y / 16,\n                                         width: areas[i].width / 16,\n                                         height: areas[i].height / 16,\n                                         type: areas[i].type,\n                                         nb: nb\n                                       };\n            }\n        }\n        else if(objectlayer.name === \"chestareas\" && mode === \"server\") {\n            log.info(\"Processing chest areas...\");\n            _.each(objectlayer.object, function(area) {\n                var chestArea = {\n                    x: area.x / map.tilesize,\n                    y: area.y / map.tilesize,\n                    w: area.width / map.tilesize,\n                    h: area.height / map.tilesize\n                };\n                _.each(area.properties.property, function(prop) {\n                    if(prop.name === 'items') {\n                        chestArea['i'] = _.map(prop.value.split(','), function(name) { \n                            return Types.getKindFromString(name);\n                        });\n                    } else {\n                        chestArea['t'+prop.name] = prop.value;\n                    }\n                });\n                map.chestAreas.push(chestArea);\n            });\n        }\n        else if(objectlayer.name === \"chests\" && mode === \"server\") {\n            log.info(\"Processing static chests...\");\n            _.each(objectlayer.object, function(chest) {\n                var items = chest.properties.property.value;\n                var newChest = {\n                    x: chest.x / map.tilesize,\n                    y: chest.y / map.tilesize,\n                    i: _.map(items.split(','), function(name) {\n                        return Types.getKindFromString(name);\n                    })\n                };\n                map.staticChests.push(newChest);\n            });\n        }\n        else if(objectlayer.name === \"music\" && mode === \"client\") {\n            log.info(\"Processing music areas...\");\n            _.each(objectlayer.object, function(music) {\n                var musicArea = {\n                    x: music.x / map.tilesize,\n                    y: music.y / map.tilesize,\n                    w: music.width / map.tilesize,\n                    h: music.height / map.tilesize,\n                    id: music.properties.property.value\n                };\n                map.musicAreas.push(musicArea);\n            });\n        }\n        else if(objectlayer.name === \"checkpoints\") {\n            log.info(\"Processing check points...\");\n            var count = 0;\n            _.each(objectlayer.object, function(checkpoint) {\n                var cp = {\n                    id: ++count,\n                    x: checkpoint.x / map.tilesize,\n                    y: checkpoint.y / map.tilesize,\n                    w: checkpoint.width / map.tilesize,\n                    h: checkpoint.height / map.tilesize\n                };\n                if(mode === \"server\") {\n                    cp.s = checkpoint.type ? 1 : 0;\n                }\n                map.checkpoints.push(cp);\n            });\n        }\n    });\n\n    // Layers\n    if(Tiled.layer instanceof Array) {\n        for(var i=Tiled.layer.length - 1; i > 0; i -= 1) {\n            processLayer(Tiled.layer[i]);\n        }\n    } else {\n        processLayer(Tiled.layer);\n    }\n    \n    if(mode === \"client\") {\n        // Set all undefined tiles to 0\n        for(var i=0, max=map.data.length; i < max; i+=1) {\n            if(!map.data[i]) {\n                map.data[i] = 0;\n            }\n        }\n    }\n      \n    return map;\n};\n\nvar processLayer = function processLayer(layer) {\n    if(mode === \"server\") {\n        // Mobs\n        if(layer.name === \"entities\") {\n            log.info(\"Processing positions of static entities ...\");\n            var tiles = layer.data.tile;\n            \n            for(var j=0; j < tiles.length; j += 1) {\n                var gid = tiles[j].gid - mobsFirstgid + 1;\n                if(gid && gid > 0) {\n                    map.staticEntities[j] = staticEntities[gid];\n                }\n            }\n        }\n    }\n    \n    var tiles = layer.data.tile;\n    \n    if(mode === \"client\" && layer.name === \"blocking\") {\n        log.info(\"Processing blocking tiles...\");\n        for(var i=0; i < tiles.length; i += 1) {\n            var gid = tiles[i].gid;\n            \n            if(gid && gid > 0) {\n                map.blocking.push(i);\n            }\n        }\n    }\n    else if(mode === \"client\" && layer.name === \"plateau\") {\n        log.info(\"Processing plateau tiles...\");\n        for(var i=0; i < tiles.length; i += 1) {\n            var gid = tiles[i].gid;\n            \n            if(gid && gid > 0) {\n                map.plateau.push(i);\n            }\n        }\n    }\n    else if(layer.visible !== 0 && layer.name !== \"entities\") {\n        log.info(\"Processing layer: \"+ layer.name);\n        \n        for(var j=0; j < tiles.length; j += 1) {\n            var gid = tiles[j].gid;\n\n            if(mode === \"client\") {\n                // Set tile gid in the tilesheet\n                if(gid > 0) {\n                    if(map.data[j] === undefined) {\n                        map.data[j] = gid;\n                    }\n                    else if(map.data[j] instanceof Array) {\n                        map.data[j].unshift(gid);\n                    }\n                    else {\n                        map.data[j] = [gid, map.data[j]];\n                    }\n                }\n            }\n            \n            // Colliding tiles\n            if(gid in collidingTiles) {\n                map.collisions.push(j);\n            }\n        }\n    }\n}"
  },
  {
    "path": "tools/maps/tmx2json.py",
    "content": "#!/usr/bin/env python\nimport sys\nfrom lxml import etree\nimport json\n\ntmx = open(sys.argv[1])\ndest = open(sys.argv[2], 'w')\nres = {}\n\nroot = etree.parse(tmx).getroot()\nel = root\n\ndef process(el, tagname):\n    attrs = dict(el.attrib)\n    for a in attrs.keys():\n        if attrs[a].isdigit():\n            attrs[a] = int(attrs[a])\n    \n    children = el.getchildren()\n    \n    if len(children) > 1:\n        sibs = {}\n        for c in children:\n            if c.tag not in sibs:\n                sibs[c.tag] = []\n            sibs[c.tag].append(process(c, False))\n        for k in sibs.keys():\n            attrs.update({k: sibs[k]})\n    else:\n        for c in children:\n            attrs.update(process(c, True))\n    \n    if tagname:\n        return {el.tag: attrs}\n    else:\n        return attrs\n\nres = process(el, True)\n\ndest.write(json.dumps(res))\ntmx.close()\ndest.close()\n\nprint \"Finished converting TMX to JSON.\""
  }
]