// deno-lint-ignore-file

// The Module object: Our interface to the outside world. We import
// and export values on it. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(Module) { ..generated code.. }
// 3. pre-run appended it, var Module = {}; ..generated code..
// 4. External script tag defines var Module.
// We need to check if Module already exists (e.g. case 3 above).
// Substitution will be replaced with actual code on later stage of the build,
// this way Closure Compiler will not mangle it (e.g. case 4. above).
// Note that if you want to run closure, and also to use Module
// after the generated code, you will need to define   var Module = {};
// before the code. Then that object will be used in the code, and you
// can continue to use Module afterwards as well.

var Module = typeof Module !== "undefined" ? Module : {};

// --pre-jses are emitted after the Module integration code, so that they can
// refer to Module (if they choose; they can also define Module)
var TreeSitter = (function () {
  var initPromise;
  class Parser {
    constructor() {
      this.initialize();
    }

    initialize() {
      throw new Error("cannot construct a Parser before calling `init()`");
    }

    static init(moduleOptions) {
      if (initPromise) return initPromise;
      Module = Object.assign({}, Module, moduleOptions);
      return (initPromise = new Promise((resolveInitPromise) => {
        // Sometimes an existing Module object exists with properties
        // meant to overwrite the default module functionality. Here
        // we collect those properties and reapply _after_ we configure
        // the current environment's defaults to avoid having to be so
        // defensive during initialization.
        var moduleOverrides = {};
        var key;
        for (key in Module) {
          if (Module.hasOwnProperty(key)) {
            moduleOverrides[key] = Module[key];
          }
        }

        var arguments_ = [];
        var thisProgram = "./this.program";
        var quit_ = function (status, toThrow) {
          throw toThrow;
        };

        // Determine the runtime environment we are in. You can customize this by
        // setting the ENVIRONMENT setting at compile time (see settings.js).

        var ENVIRONMENT_IS_WEB = false;
        var ENVIRONMENT_IS_WORKER = false;
        var ENVIRONMENT_IS_NODE = false;
        var ENVIRONMENT_IS_SHELL = false;
        ENVIRONMENT_IS_WEB = typeof window === "object";
        ENVIRONMENT_IS_WORKER = typeof importScripts === "function";
        // N.b. Electron.js environment is simultaneously a NODE-environment, but
        // also a web environment.
        ENVIRONMENT_IS_NODE =
          typeof process === "object" &&
          typeof process.versions === "object" &&
          typeof process.versions.node === "string";
        ENVIRONMENT_IS_SHELL =
          !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;

        if (Module["ENVIRONMENT"]) {
          throw new Error(
            "Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)"
          );
        }

        // `/` should be present at the end if `scriptDirectory` is not empty
        var scriptDirectory = "";
        function locateFile(path) {
          if (Module["locateFile"]) {
            return Module["locateFile"](path, scriptDirectory);
          }
          return scriptDirectory + path;
        }

        // Hooks that are implemented differently in different runtime environments.
        var read_, readAsync, readBinary, setWindowTitle;

        var nodeFS;
        var nodePath;

        if (ENVIRONMENT_IS_NODE) {
          /*if (ENVIRONMENT_IS_WORKER) {
            scriptDirectory = require("path").dirname(scriptDirectory) + "/";
          } else {
            scriptDirectory = __dirname + "/";
          }*/

          // include: node_shell_read.js

          read_ = function shell_read(filename, binary) {
            var ret = tryParseAsDataURI(filename);
            if (ret) {
              return binary ? ret : ret.toString();
            }
            if (!nodeFS) nodeFS = require("fs");
            if (!nodePath) nodePath = require("path");
            filename = nodePath["normalize"](filename);
            return nodeFS["readFileSync"](filename, binary ? null : "utf8");
          };

          readBinary = function readBinary(filename) {
            var ret = read_(filename, true);
            if (!ret.buffer) {
              ret = new Uint8Array(ret);
            }
            assert(ret.buffer);
            return ret;
          };

          // end include: node_shell_read.js
          if (process["argv"].length > 1) {
            thisProgram = process["argv"][1].replace(/\\/g, "/");
          }

          arguments_ = process["argv"].slice(2);

          if (typeof module !== "undefined") {
            module["exports"] = Module;
          }

          quit_ = function (status) {
            process["exit"](status);
          };

          Module["inspect"] = function () {
            return "[Emscripten Module object]";
          };
        } else if (ENVIRONMENT_IS_SHELL) {
          if (typeof read != "undefined") {
            read_ = function shell_read(f) {
              var data = tryParseAsDataURI(f);
              if (data) {
                return intArrayToString(data);
              }
              return read(f);
            };
          }

          readBinary = function readBinary(f) {
            var data;
            data = tryParseAsDataURI(f);
            if (data) {
              return data;
            }
            if (typeof readbuffer === "function") {
              return new Uint8Array(readbuffer(f));
            }
            data = read(f, "binary");
            assert(typeof data === "object");
            return data;
          };

          if (typeof scriptArgs != "undefined") {
            arguments_ = scriptArgs;
          } else if (typeof arguments != "undefined") {
            arguments_ = arguments;
          }

          if (typeof quit === "function") {
            quit_ = function (status) {
              quit(status);
            };
          }

          if (typeof print !== "undefined") {
            // Prefer to use print/printErr where they exist, as they usually work better.
            if (typeof console === "undefined")
              console = /** @type{!Console} */ ({});
            console.log =
              /** @type{!function(this:Console, ...*): undefined} */ (print);
            console.warn = console.error =
              /** @type{!function(this:Console, ...*): undefined} */ (
                typeof printErr !== "undefined" ? printErr : print
              );
          }
        }

        // Note that this includes Node.js workers when relevant (pthreads is enabled).
        // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and
        // ENVIRONMENT_IS_NODE.
        else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
          if (ENVIRONMENT_IS_WORKER) {
            // Check worker, not web, since window could be polyfilled
            scriptDirectory = self.location.href;
          } else if (
            typeof document !== "undefined" &&
            document.currentScript
          ) {
            // web
            scriptDirectory = document.currentScript.src;
          }
          // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.
          // otherwise, slice off the final part of the url to find the script directory.
          // if scriptDirectory does not contain a slash, lastIndexOf will return -1,
          // and scriptDirectory will correctly be replaced with an empty string.
          if (scriptDirectory.indexOf("blob:") !== 0) {
            scriptDirectory = scriptDirectory.substr(
              0,
              scriptDirectory.lastIndexOf("/") + 1
            );
          } else {
            scriptDirectory = "";
          }

          // Differentiate the Web Worker from the Node Worker case, as reading must
          // be done differently.
          {
            // include: web_or_worker_shell_read.js

            read_ = function (url) {
              try {
                var xhr = new XMLHttpRequest();
                xhr.open("GET", url, false);
                xhr.send(null);
                return xhr.responseText;
              } catch (err) {
                var data = tryParseAsDataURI(url);
                if (data) {
                  return intArrayToString(data);
                }
                throw err;
              }
            };

            if (ENVIRONMENT_IS_WORKER) {
              readBinary = function (url) {
                try {
                  var xhr = new XMLHttpRequest();
                  xhr.open("GET", url, false);
                  xhr.responseType = "arraybuffer";
                  xhr.send(null);
                  return new Uint8Array(
                    /** @type{!ArrayBuffer} */ (xhr.response)
                  );
                } catch (err) {
                  var data = tryParseAsDataURI(url);
                  if (data) {
                    return data;
                  }
                  throw err;
                }
              };
            }

            readAsync = function (url, onload, onerror) {
              var xhr = new XMLHttpRequest();
              xhr.open("GET", url, true);
              xhr.responseType = "arraybuffer";
              xhr.onload = function () {
                if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {
                  // file URLs can return 0
                  onload(xhr.response);
                  return;
                }
                var data = tryParseAsDataURI(url);
                if (data) {
                  onload(data.buffer);
                  return;
                }
                onerror();
              };
              xhr.onerror = onerror;
              xhr.send(null);
            };

            // end include: web_or_worker_shell_read.js
          }

          setWindowTitle = function (title) {
            document.title = title;
          };
        } else {
          throw new Error("environment detection error");
        }

        // Set up the out() and err() hooks, which are how we can print to stdout or
        // stderr, respectively.
        var out = Module["print"] || console.log.bind(console);
        var err = Module["printErr"] || console.warn.bind(console);

        // Merge back in the overrides
        for (key in moduleOverrides) {
          if (moduleOverrides.hasOwnProperty(key)) {
            Module[key] = moduleOverrides[key];
          }
        }
        // Free the object hierarchy contained in the overrides, this lets the GC
        // reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.
        moduleOverrides = null;

        // Emit code to handle expected values on the Module object. This applies Module.x
        // to the proper local x. This has two benefits: first, we only emit it if it is
        // expected to arrive, and second, by using a local everywhere else that can be
        // minified.

        if (Module["arguments"]) arguments_ = Module["arguments"];
        if (!Object.getOwnPropertyDescriptor(Module, "arguments")) {
          Object.defineProperty(Module, "arguments", {
            configurable: true,
            get: function () {
              abort(
                "Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }

        if (Module["thisProgram"]) thisProgram = Module["thisProgram"];
        if (!Object.getOwnPropertyDescriptor(Module, "thisProgram")) {
          Object.defineProperty(Module, "thisProgram", {
            configurable: true,
            get: function () {
              abort(
                "Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }

        if (Module["quit"]) quit_ = Module["quit"];
        if (!Object.getOwnPropertyDescriptor(Module, "quit")) {
          Object.defineProperty(Module, "quit", {
            configurable: true,
            get: function () {
              abort(
                "Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }

        // perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message
        // Assertions on removed incoming Module JS APIs.
        assert(
          typeof Module["memoryInitializerPrefixURL"] === "undefined",
          "Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"
        );
        assert(
          typeof Module["pthreadMainPrefixURL"] === "undefined",
          "Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"
        );
        assert(
          typeof Module["cdInitializerPrefixURL"] === "undefined",
          "Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"
        );
        assert(
          typeof Module["filePackagePrefixURL"] === "undefined",
          "Module.filePackagePrefixURL option was removed, use Module.locateFile instead"
        );
        assert(
          typeof Module["read"] === "undefined",
          "Module.read option was removed (modify read_ in JS)"
        );
        assert(
          typeof Module["readAsync"] === "undefined",
          "Module.readAsync option was removed (modify readAsync in JS)"
        );
        assert(
          typeof Module["readBinary"] === "undefined",
          "Module.readBinary option was removed (modify readBinary in JS)"
        );
        assert(
          typeof Module["setWindowTitle"] === "undefined",
          "Module.setWindowTitle option was removed (modify setWindowTitle in JS)"
        );
        assert(
          typeof Module["TOTAL_MEMORY"] === "undefined",
          "Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"
        );

        if (!Object.getOwnPropertyDescriptor(Module, "read")) {
          Object.defineProperty(Module, "read", {
            configurable: true,
            get: function () {
              abort(
                "Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }

        if (!Object.getOwnPropertyDescriptor(Module, "readAsync")) {
          Object.defineProperty(Module, "readAsync", {
            configurable: true,
            get: function () {
              abort(
                "Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }

        if (!Object.getOwnPropertyDescriptor(Module, "readBinary")) {
          Object.defineProperty(Module, "readBinary", {
            configurable: true,
            get: function () {
              abort(
                "Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }

        if (!Object.getOwnPropertyDescriptor(Module, "setWindowTitle")) {
          Object.defineProperty(Module, "setWindowTitle", {
            configurable: true,
            get: function () {
              abort(
                "Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }
        var IDBFS =
          "IDBFS is no longer included by default; build with -lidbfs.js";
        var PROXYFS =
          "PROXYFS is no longer included by default; build with -lproxyfs.js";
        var WORKERFS =
          "WORKERFS is no longer included by default; build with -lworkerfs.js";
        var NODEFS =
          "NODEFS is no longer included by default; build with -lnodefs.js";

        var STACK_ALIGN = 16;

        function alignMemory(size, factor) {
          if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default
          return Math.ceil(size / factor) * factor;
        }

        function getNativeTypeSize(type) {
          switch (type) {
            case "i1":
            case "i8":
              return 1;
            case "i16":
              return 2;
            case "i32":
              return 4;
            case "i64":
              return 8;
            case "float":
              return 4;
            case "double":
              return 8;
            default: {
              if (type[type.length - 1] === "*") {
                return 4; // A pointer
              } else if (type[0] === "i") {
                var bits = Number(type.substr(1));
                assert(
                  bits % 8 === 0,
                  "getNativeTypeSize invalid bits " + bits + ", type " + type
                );
                return bits / 8;
              } else {
                return 0;
              }
            }
          }
        }

        function warnOnce(text) {
          if (!warnOnce.shown) warnOnce.shown = {};
          if (!warnOnce.shown[text]) {
            warnOnce.shown[text] = 1;
            err(text);
          }
        }

        // include: runtime_functions.js

        // Wraps a JS function as a wasm function with a given signature.
        function convertJsFunctionToWasm(func, sig) {
          // If the type reflection proposal is available, use the new
          // "WebAssembly.Function" constructor.
          // Otherwise, construct a minimal wasm module importing the JS function and
          // re-exporting it.
          if (typeof WebAssembly.Function === "function") {
            var typeNames = {
              i: "i32",
              j: "i64",
              f: "f32",
              d: "f64",
            };
            var type = {
              parameters: [],
              results: sig[0] == "v" ? [] : [typeNames[sig[0]]],
            };
            for (var i = 1; i < sig.length; ++i) {
              type.parameters.push(typeNames[sig[i]]);
            }
            return new WebAssembly.Function(type, func);
          }

          // The module is static, with the exception of the type section, which is
          // generated based on the signature passed in.
          var typeSection = [
            0x01, // id: section,
            0x00, // length: 0 (placeholder)
            0x01, // count: 1
            0x60, // form: func
          ];
          var sigRet = sig.slice(0, 1);
          var sigParam = sig.slice(1);
          var typeCodes = {
            i: 0x7f, // i32
            j: 0x7e, // i64
            f: 0x7d, // f32
            d: 0x7c, // f64
          };

          // Parameters, length + signatures
          typeSection.push(sigParam.length);
          for (var i = 0; i < sigParam.length; ++i) {
            typeSection.push(typeCodes[sigParam[i]]);
          }

          // Return values, length + signatures
          // With no multi-return in MVP, either 0 (void) or 1 (anything else)
          if (sigRet == "v") {
            typeSection.push(0x00);
          } else {
            typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);
          }

          // Write the overall length of the type section back into the section header
          // (excepting the 2 bytes for the section id and length)
          typeSection[1] = typeSection.length - 2;

          // Rest of the module is static
          var bytes = new Uint8Array(
            [
              0x00,
              0x61,
              0x73,
              0x6d, // magic ("\0asm")
              0x01,
              0x00,
              0x00,
              0x00, // version: 1
            ].concat(typeSection, [
              0x02,
              0x07, // import section
              // (import "e" "f" (func 0 (type 0)))
              0x01,
              0x01,
              0x65,
              0x01,
              0x66,
              0x00,
              0x00,
              0x07,
              0x05, // export section
              // (export "f" (func 0 (type 0)))
              0x01,
              0x01,
              0x66,
              0x00,
              0x00,
            ])
          );

          // We can compile this wasm module synchronously because it is very small.
          // This accepts an import (at "e.f"), that it reroutes to an export (at "f")
          var module = new WebAssembly.Module(bytes);
          var instance = new WebAssembly.Instance(module, {
            e: {
              f: func,
            },
          });
          var wrappedFunc = instance.exports["f"];
          return wrappedFunc;
        }

        var freeTableIndexes = [];

        // Weak map of functions in the table to their indexes, created on first use.
        var functionsInTableMap;

        function getEmptyTableSlot() {
          // Reuse a free index if there is one, otherwise grow.
          if (freeTableIndexes.length) {
            return freeTableIndexes.pop();
          }
          // Grow the table
          try {
            wasmTable.grow(1);
          } catch (err) {
            if (!(err instanceof RangeError)) {
              throw err;
            }
            throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.";
          }
          return wasmTable.length - 1;
        }

        // Add a wasm function to the table.
        function addFunctionWasm(func, sig) {
          // Check if the function is already in the table, to ensure each function
          // gets a unique index. First, create the map if this is the first use.
          if (!functionsInTableMap) {
            functionsInTableMap = new WeakMap();
            for (var i = 0; i < wasmTable.length; i++) {
              var item = wasmTable.get(i);
              // Ignore null values.
              if (item) {
                functionsInTableMap.set(item, i);
              }
            }
          }
          if (functionsInTableMap.has(func)) {
            return functionsInTableMap.get(func);
          }

          // It's not in the table, add it now.

          var ret = getEmptyTableSlot();

          // Set the new value.
          try {
            // Attempting to call this with JS function will cause of table.set() to fail
            wasmTable.set(ret, func);
          } catch (err) {
            if (!(err instanceof TypeError)) {
              throw err;
            }
            assert(
              typeof sig !== "undefined",
              "Missing signature argument to addFunction: " + func
            );
            var wrapped = convertJsFunctionToWasm(func, sig);
            wasmTable.set(ret, wrapped);
          }

          functionsInTableMap.set(func, ret);

          return ret;
        }

        function removeFunction(index) {
          functionsInTableMap.delete(wasmTable.get(index));
          freeTableIndexes.push(index);
        }

        // 'sig' parameter is required for the llvm backend but only when func is not
        // already a WebAssembly function.
        function addFunction(func, sig) {
          assert(typeof func !== "undefined");

          return addFunctionWasm(func, sig);
        }

        // end include: runtime_functions.js
        // include: runtime_debug.js

        // end include: runtime_debug.js
        var tempRet0 = 0;

        var setTempRet0 = function (value) {
          tempRet0 = value;
        };

        var getTempRet0 = function () {
          return tempRet0;
        };

        // === Preamble library stuff ===

        // Documentation for the public APIs defined in this file must be updated in:
        //    site/source/docs/api_reference/preamble.js.rst
        // A prebuilt local version of the documentation is available at:
        //    site/build/text/docs/api_reference/preamble.js.txt
        // You can also build docs locally as HTML or other formats in site/
        // An online HTML version (which may be of a different version of Emscripten)
        //    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html

        var dynamicLibraries = Module["dynamicLibraries"] || [];

        var wasmBinary;
        if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"];
        if (!Object.getOwnPropertyDescriptor(Module, "wasmBinary")) {
          Object.defineProperty(Module, "wasmBinary", {
            configurable: true,
            get: function () {
              abort(
                "Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }
        var noExitRuntime = Module["noExitRuntime"] || true;
        if (!Object.getOwnPropertyDescriptor(Module, "noExitRuntime")) {
          Object.defineProperty(Module, "noExitRuntime", {
            configurable: true,
            get: function () {
              abort(
                "Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }

        if (typeof WebAssembly !== "object") {
          abort("no native wasm support detected");
        }

        // include: runtime_safe_heap.js

        // In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.
        // In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)

        /** @param {number} ptr
    @param {number} value
    @param {string} type
    @param {number|boolean=} noSafe */
        function setValue(ptr, value, type, noSafe) {
          type = type || "i8";
          if (type.charAt(type.length - 1) === "*") type = "i32"; // pointers are 32-bit
          switch (type) {
            case "i1":
              HEAP8[ptr >> 0] = value;
              break;
            case "i8":
              HEAP8[ptr >> 0] = value;
              break;
            case "i16":
              HEAP16[ptr >> 1] = value;
              break;
            case "i32":
              HEAP32[ptr >> 2] = value;
              break;
            case "i64":
              (tempI64 = [
                value >>> 0,
                ((tempDouble = value),
                +Math.abs(tempDouble) >= 1.0
                  ? tempDouble > 0.0
                    ? (Math.min(
                        +Math.floor(tempDouble / 4294967296.0),
                        4294967295.0
                      ) |
                        0) >>>
                      0
                    : ~~+Math.ceil(
                        (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0
                      ) >>> 0
                  : 0),
              ]),
                (HEAP32[ptr >> 2] = tempI64[0]),
                (HEAP32[(ptr + 4) >> 2] = tempI64[1]);
              break;
            case "float":
              HEAPF32[ptr >> 2] = value;
              break;
            case "double":
              HEAPF64[ptr >> 3] = value;
              break;
            default:
              abort("invalid type for setValue: " + type);
          }
        }

        /** @param {number} ptr
    @param {string} type
    @param {number|boolean=} noSafe */
        function getValue(ptr, type, noSafe) {
          type = type || "i8";
          if (type.charAt(type.length - 1) === "*") type = "i32"; // pointers are 32-bit
          switch (type) {
            case "i1":
              return HEAP8[ptr >> 0];
            case "i8":
              return HEAP8[ptr >> 0];
            case "i16":
              return HEAP16[ptr >> 1];
            case "i32":
              return HEAP32[ptr >> 2];
            case "i64":
              return HEAP32[ptr >> 2];
            case "float":
              return HEAPF32[ptr >> 2];
            case "double":
              return HEAPF64[ptr >> 3];
            default:
              abort("invalid type for getValue: " + type);
          }
          return null;
        }

        // end include: runtime_safe_heap.js
        // Wasm globals

        var wasmMemory;

        //========================================
        // Runtime essentials
        //========================================

        // whether we are quitting the application. no code should run after this.
        // set in exit() and abort()
        var ABORT = false;

        // set by exit() and abort().  Passed to 'onExit' handler.
        // NOTE: This is also used as the process return code code in shell environments
        // but only when noExitRuntime is false.
        var EXITSTATUS;

        /** @type {function(*, string=)} */
        function assert(condition, text) {
          if (!condition) {
            abort("Assertion failed: " + text);
          }
        }

        // Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
        function getCFunc(ident) {
          var func = Module["_" + ident]; // closure exported function
          assert(
            func,
            "Cannot call unknown function " +
              ident +
              ", make sure it is exported"
          );
          return func;
        }

        // C calling interface.
        /** @param {string|null=} returnType
    @param {Array=} argTypes
    @param {Arguments|Array=} args
    @param {Object=} opts */
        function ccall(ident, returnType, argTypes, args, opts) {
          // For fast lookup of conversion functions
          var toC = {
            string: function (str) {
              var ret = 0;
              if (str !== null && str !== undefined && str !== 0) {
                // null string
                // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0'
                var len = (str.length << 2) + 1;
                ret = stackAlloc(len);
                stringToUTF8(str, ret, len);
              }
              return ret;
            },
            array: function (arr) {
              var ret = stackAlloc(arr.length);
              writeArrayToMemory(arr, ret);
              return ret;
            },
          };

          function convertReturnValue(ret) {
            if (returnType === "string") return UTF8ToString(ret);
            if (returnType === "boolean") return Boolean(ret);
            return ret;
          }

          var func = getCFunc(ident);
          var cArgs = [];
          var stack = 0;
          assert(returnType !== "array", 'Return type should not be "array".');
          if (args) {
            for (var i = 0; i < args.length; i++) {
              var converter = toC[argTypes[i]];
              if (converter) {
                if (stack === 0) stack = stackSave();
                cArgs[i] = converter(args[i]);
              } else {
                cArgs[i] = args[i];
              }
            }
          }
          var ret = func.apply(null, cArgs);

          ret = convertReturnValue(ret);
          if (stack !== 0) stackRestore(stack);
          return ret;
        }

        /** @param {string=} returnType
    @param {Array=} argTypes
    @param {Object=} opts */
        function cwrap(ident, returnType, argTypes, opts) {
          return function () {
            return ccall(ident, returnType, argTypes, arguments, opts);
          };
        }

        // We used to include malloc/free by default in the past. Show a helpful error in
        // builds with assertions.

        var ALLOC_NORMAL = 0; // Tries to use _malloc()
        var ALLOC_STACK = 1; // Lives for the duration of the current function call

        // allocate(): This is for internal use. You can use it yourself as well, but the interface
        //             is a little tricky (see docs right below). The reason is that it is optimized
        //             for multiple syntaxes to save space in generated code. So you should
        //             normally not use allocate(), and instead allocate memory using _malloc(),
        //             initialize it with setValue(), and so forth.
        // @slab: An array of data.
        // @allocator: How to allocate memory, see ALLOC_*
        /** @type {function((Uint8Array|Array<number>), number)} */
        function allocate(slab, allocator) {
          var ret;
          assert(
            typeof allocator === "number",
            "allocate no longer takes a type argument"
          );
          assert(
            typeof slab !== "number",
            "allocate no longer takes a number as arg0"
          );

          if (allocator == ALLOC_STACK) {
            ret = stackAlloc(slab.length);
          } else {
            ret = _malloc(slab.length);
          }

          if (slab.subarray || slab.slice) {
            HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);
          } else {
            HEAPU8.set(new Uint8Array(slab), ret);
          }
          return ret;
        }

        // include: runtime_strings.js

        // runtime_strings.js: Strings related runtime functions that are part of both MINIMAL_RUNTIME and regular runtime.

        // Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns
        // a copy of that string as a Javascript String object.

        var UTF8Decoder =
          typeof TextDecoder !== "undefined"
            ? new TextDecoder("utf8")
            : undefined;

        /**
         * @param {number} idx
         * @param {number=} maxBytesToRead
         * @return {string}
         */
        function UTF8ArrayToString(heap, idx, maxBytesToRead) {
          var endIdx = idx + maxBytesToRead;
          var endPtr = idx;
          // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
          // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
          // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)
          while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr;

          if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) {
            return UTF8Decoder.decode(heap.subarray(idx, endPtr));
          } else {
            var str = "";
            // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that
            while (idx < endPtr) {
              // For UTF8 byte structure, see:
              // http://en.wikipedia.org/wiki/UTF-8#Description
              // https://www.ietf.org/rfc/rfc2279.txt
              // https://tools.ietf.org/html/rfc3629
              var u0 = heap[idx++];
              if (!(u0 & 0x80)) {
                str += String.fromCharCode(u0);
                continue;
              }
              var u1 = heap[idx++] & 63;
              if ((u0 & 0xe0) == 0xc0) {
                str += String.fromCharCode(((u0 & 31) << 6) | u1);
                continue;
              }
              var u2 = heap[idx++] & 63;
              if ((u0 & 0xf0) == 0xe0) {
                u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
              } else {
                if ((u0 & 0xf8) != 0xf0)
                  warnOnce(
                    "Invalid UTF-8 leading byte 0x" +
                      u0.toString(16) +
                      " encountered when deserializing a UTF-8 string in wasm memory to a JS string!"
                  );
                u0 =
                  ((u0 & 7) << 18) |
                  (u1 << 12) |
                  (u2 << 6) |
                  (heap[idx++] & 63);
              }

              if (u0 < 0x10000) {
                str += String.fromCharCode(u0);
              } else {
                var ch = u0 - 0x10000;
                str += String.fromCharCode(
                  0xd800 | (ch >> 10),
                  0xdc00 | (ch & 0x3ff)
                );
              }
            }
          }
          return str;
        }

        // Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a
        // copy of that string as a Javascript String object.
        // maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit
        //                 this parameter to scan the string until the first \0 byte. If maxBytesToRead is
        //                 passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the
        //                 middle, then the string will cut short at that byte index (i.e. maxBytesToRead will
        //                 not produce a string of exact length [ptr, ptr+maxBytesToRead[)
        //                 N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may
        //                 throw JS JIT optimizations off, so it is worth to consider consistently using one
        //                 style or the other.
        /**
         * @param {number} ptr
         * @param {number=} maxBytesToRead
         * @return {string}
         */
        function UTF8ToString(ptr, maxBytesToRead) {
          return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
        }

        // Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',
        // encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.
        // Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.
        // Parameters:
        //   str: the Javascript string to copy.
        //   heap: the array to copy to. Each index in this array is assumed to be one 8-byte element.
        //   outIdx: The starting offset in the array to begin the copying.
        //   maxBytesToWrite: The maximum number of bytes this function can write to the array.
        //                    This count should include the null terminator,
        //                    i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.
        //                    maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.
        // Returns the number of bytes written, EXCLUDING the null terminator.

        function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
          if (!(maxBytesToWrite > 0))
            // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.
            return 0;

          var startIdx = outIdx;
          var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.
          for (var i = 0; i < str.length; ++i) {
            // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
            // See http://unicode.org/faq/utf_bom.html#utf16-3
            // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
            var u = str.charCodeAt(i); // possibly a lead surrogate
            if (u >= 0xd800 && u <= 0xdfff) {
              var u1 = str.charCodeAt(++i);
              u = (0x10000 + ((u & 0x3ff) << 10)) | (u1 & 0x3ff);
            }
            if (u <= 0x7f) {
              if (outIdx >= endIdx) break;
              heap[outIdx++] = u;
            } else if (u <= 0x7ff) {
              if (outIdx + 1 >= endIdx) break;
              heap[outIdx++] = 0xc0 | (u >> 6);
              heap[outIdx++] = 0x80 | (u & 63);
            } else if (u <= 0xffff) {
              if (outIdx + 2 >= endIdx) break;
              heap[outIdx++] = 0xe0 | (u >> 12);
              heap[outIdx++] = 0x80 | ((u >> 6) & 63);
              heap[outIdx++] = 0x80 | (u & 63);
            } else {
              if (outIdx + 3 >= endIdx) break;
              if (u >= 0x200000)
                warnOnce(
                  "Invalid Unicode code point 0x" +
                    u.toString(16) +
                    " encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x1FFFFF)."
                );
              heap[outIdx++] = 0xf0 | (u >> 18);
              heap[outIdx++] = 0x80 | ((u >> 12) & 63);
              heap[outIdx++] = 0x80 | ((u >> 6) & 63);
              heap[outIdx++] = 0x80 | (u & 63);
            }
          }
          // Null-terminate the pointer to the buffer.
          heap[outIdx] = 0;
          return outIdx - startIdx;
        }

        // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
        // null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.
        // Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.
        // Returns the number of bytes written, EXCLUDING the null terminator.

        function stringToUTF8(str, outPtr, maxBytesToWrite) {
          assert(
            typeof maxBytesToWrite == "number",
            "stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"
          );
          return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
        }

        // Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.
        function lengthBytesUTF8(str) {
          var len = 0;
          for (var i = 0; i < str.length; ++i) {
            // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
            // See http://unicode.org/faq/utf_bom.html#utf16-3
            var u = str.charCodeAt(i); // possibly a lead surrogate
            if (u >= 0xd800 && u <= 0xdfff)
              u =
                (0x10000 + ((u & 0x3ff) << 10)) | (str.charCodeAt(++i) & 0x3ff);
            if (u <= 0x7f) ++len;
            else if (u <= 0x7ff) len += 2;
            else if (u <= 0xffff) len += 3;
            else len += 4;
          }
          return len;
        }

        // end include: runtime_strings.js
        // include: runtime_strings_extra.js

        // runtime_strings_extra.js: Strings related runtime functions that are available only in regular runtime.

        // Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns
        // a copy of that string as a Javascript String object.

        function AsciiToString(ptr) {
          var str = "";
          while (1) {
            var ch = HEAPU8[ptr++ >> 0];
            if (!ch) return str;
            str += String.fromCharCode(ch);
          }
        }

        // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
        // null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.

        function stringToAscii(str, outPtr) {
          return writeAsciiToMemory(str, outPtr, false);
        }

        // Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
        // a copy of that string as a Javascript String object.

        var UTF16Decoder =
          typeof TextDecoder !== "undefined"
            ? new TextDecoder("utf-16le")
            : undefined;

        function UTF16ToString(ptr, maxBytesToRead) {
          assert(
            ptr % 2 == 0,
            "Pointer passed to UTF16ToString must be aligned to two bytes!"
          );
          var endPtr = ptr;
          // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
          // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
          var idx = endPtr >> 1;
          var maxIdx = idx + maxBytesToRead / 2;
          // If maxBytesToRead is not passed explicitly, it will be undefined, and this
          // will always evaluate to true. This saves on code size.
          while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx;
          endPtr = idx << 1;

          if (endPtr - ptr > 32 && UTF16Decoder) {
            return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));
          } else {
            var str = "";

            // If maxBytesToRead is not passed explicitly, it will be undefined, and the for-loop's condition
            // will always evaluate to true. The loop is then terminated on the first null char.
            for (var i = 0; !(i >= maxBytesToRead / 2); ++i) {
              var codeUnit = HEAP16[(ptr + i * 2) >> 1];
              if (codeUnit == 0) break;
              // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
              str += String.fromCharCode(codeUnit);
            }

            return str;
          }
        }

        // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
        // null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.
        // Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.
        // Parameters:
        //   str: the Javascript string to copy.
        //   outPtr: Byte address in Emscripten HEAP where to write the string to.
        //   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
        //                    terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.
        //                    maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.
        // Returns the number of bytes written, EXCLUDING the null terminator.

        function stringToUTF16(str, outPtr, maxBytesToWrite) {
          assert(
            outPtr % 2 == 0,
            "Pointer passed to stringToUTF16 must be aligned to two bytes!"
          );
          assert(
            typeof maxBytesToWrite == "number",
            "stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"
          );
          // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
          if (maxBytesToWrite === undefined) {
            maxBytesToWrite = 0x7fffffff;
          }
          if (maxBytesToWrite < 2) return 0;
          maxBytesToWrite -= 2; // Null terminator.
          var startPtr = outPtr;
          var numCharsToWrite =
            maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length;
          for (var i = 0; i < numCharsToWrite; ++i) {
            // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
            var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
            HEAP16[outPtr >> 1] = codeUnit;
            outPtr += 2;
          }
          // Null-terminate the pointer to the HEAP.
          HEAP16[outPtr >> 1] = 0;
          return outPtr - startPtr;
        }

        // Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.

        function lengthBytesUTF16(str) {
          return str.length * 2;
        }

        function UTF32ToString(ptr, maxBytesToRead) {
          assert(
            ptr % 4 == 0,
            "Pointer passed to UTF32ToString must be aligned to four bytes!"
          );
          var i = 0;

          var str = "";
          // If maxBytesToRead is not passed explicitly, it will be undefined, and this
          // will always evaluate to true. This saves on code size.
          while (!(i >= maxBytesToRead / 4)) {
            var utf32 = HEAP32[(ptr + i * 4) >> 2];
            if (utf32 == 0) break;
            ++i;
            // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.
            // See http://unicode.org/faq/utf_bom.html#utf16-3
            if (utf32 >= 0x10000) {
              var ch = utf32 - 0x10000;
              str += String.fromCharCode(
                0xd800 | (ch >> 10),
                0xdc00 | (ch & 0x3ff)
              );
            } else {
              str += String.fromCharCode(utf32);
            }
          }
          return str;
        }

        // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
        // null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.
        // Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.
        // Parameters:
        //   str: the Javascript string to copy.
        //   outPtr: Byte address in Emscripten HEAP where to write the string to.
        //   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
        //                    terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.
        //                    maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.
        // Returns the number of bytes written, EXCLUDING the null terminator.

        function stringToUTF32(str, outPtr, maxBytesToWrite) {
          assert(
            outPtr % 4 == 0,
            "Pointer passed to stringToUTF32 must be aligned to four bytes!"
          );
          assert(
            typeof maxBytesToWrite == "number",
            "stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"
          );
          // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
          if (maxBytesToWrite === undefined) {
            maxBytesToWrite = 0x7fffffff;
          }
          if (maxBytesToWrite < 4) return 0;
          var startPtr = outPtr;
          var endPtr = startPtr + maxBytesToWrite - 4;
          for (var i = 0; i < str.length; ++i) {
            // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
            // See http://unicode.org/faq/utf_bom.html#utf16-3
            var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
            if (codeUnit >= 0xd800 && codeUnit <= 0xdfff) {
              var trailSurrogate = str.charCodeAt(++i);
              codeUnit =
                (0x10000 + ((codeUnit & 0x3ff) << 10)) |
                (trailSurrogate & 0x3ff);
            }
            HEAP32[outPtr >> 2] = codeUnit;
            outPtr += 4;
            if (outPtr + 4 > endPtr) break;
          }
          // Null-terminate the pointer to the HEAP.
          HEAP32[outPtr >> 2] = 0;
          return outPtr - startPtr;
        }

        // Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.

        function lengthBytesUTF32(str) {
          var len = 0;
          for (var i = 0; i < str.length; ++i) {
            // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
            // See http://unicode.org/faq/utf_bom.html#utf16-3
            var codeUnit = str.charCodeAt(i);
            if (codeUnit >= 0xd800 && codeUnit <= 0xdfff) ++i; // possibly a lead surrogate, so skip over the tail surrogate.
            len += 4;
          }

          return len;
        }

        // Allocate heap space for a JS string, and write it there.
        // It is the responsibility of the caller to free() that memory.
        function allocateUTF8(str) {
          var size = lengthBytesUTF8(str) + 1;
          var ret = _malloc(size);
          if (ret) stringToUTF8Array(str, HEAP8, ret, size);
          return ret;
        }

        // Allocate stack space for a JS string, and write it there.
        function allocateUTF8OnStack(str) {
          var size = lengthBytesUTF8(str) + 1;
          var ret = stackAlloc(size);
          stringToUTF8Array(str, HEAP8, ret, size);
          return ret;
        }

        // Deprecated: This function should not be called because it is unsafe and does not provide
        // a maximum length limit of how many bytes it is allowed to write. Prefer calling the
        // function stringToUTF8Array() instead, which takes in a maximum length that can be used
        // to be secure from out of bounds writes.
        /** @deprecated
    @param {boolean=} dontAddNull */
        function writeStringToMemory(string, buffer, dontAddNull) {
          warnOnce(
            "writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"
          );

          var /** @type {number} */ lastChar, /** @type {number} */ end;
          if (dontAddNull) {
            // stringToUTF8Array always appends null. If we don't want to do that, remember the
            // character that existed at the location where the null will be placed, and restore
            // that after the write (below).
            end = buffer + lengthBytesUTF8(string);
            lastChar = HEAP8[end];
          }
          stringToUTF8(string, buffer, Infinity);
          if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.
        }

        function writeArrayToMemory(array, buffer) {
          assert(
            array.length >= 0,
            "writeArrayToMemory array must have a length (should be an array or typed array)"
          );
          HEAP8.set(array, buffer);
        }

        /** @param {boolean=} dontAddNull */
        function writeAsciiToMemory(str, buffer, dontAddNull) {
          for (var i = 0; i < str.length; ++i) {
            assert((str.charCodeAt(i) === str.charCodeAt(i)) & 0xff);
            HEAP8[buffer++ >> 0] = str.charCodeAt(i);
          }
          // Null-terminate the pointer to the HEAP.
          if (!dontAddNull) HEAP8[buffer >> 0] = 0;
        }

        // end include: runtime_strings_extra.js
        // Memory management

        function alignUp(x, multiple) {
          if (x % multiple > 0) {
            x += multiple - (x % multiple);
          }
          return x;
        }

        var HEAP,
          /** @type {ArrayBuffer} */
          buffer,
          /** @type {Int8Array} */
          HEAP8,
          /** @type {Uint8Array} */
          HEAPU8,
          /** @type {Int16Array} */
          HEAP16,
          /** @type {Uint16Array} */
          HEAPU16,
          /** @type {Int32Array} */
          HEAP32,
          /** @type {Uint32Array} */
          HEAPU32,
          /** @type {Float32Array} */
          HEAPF32,
          /** @type {Float64Array} */
          HEAPF64;

        function updateGlobalBufferAndViews(buf) {
          buffer = buf;
          Module["HEAP8"] = HEAP8 = new Int8Array(buf);
          Module["HEAP16"] = HEAP16 = new Int16Array(buf);
          Module["HEAP32"] = HEAP32 = new Int32Array(buf);
          Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf);
          Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf);
          Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf);
          Module["HEAPF32"] = HEAPF32 = new Float32Array(buf);
          Module["HEAPF64"] = HEAPF64 = new Float64Array(buf);
        }

        var TOTAL_STACK = 5242880;
        if (Module["TOTAL_STACK"])
          assert(
            TOTAL_STACK === Module["TOTAL_STACK"],
            "the stack size can no longer be determined at runtime"
          );

        var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 33554432;
        if (!Object.getOwnPropertyDescriptor(Module, "INITIAL_MEMORY")) {
          Object.defineProperty(Module, "INITIAL_MEMORY", {
            configurable: true,
            get: function () {
              abort(
                "Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)"
              );
            },
          });
        }

        assert(
          INITIAL_MEMORY >= TOTAL_STACK,
          "INITIAL_MEMORY should be larger than TOTAL_STACK, was " +
            INITIAL_MEMORY +
            "! (TOTAL_STACK=" +
            TOTAL_STACK +
            ")"
        );

        // check for full engine support (use string 'subarray' to avoid closure compiler confusion)
        assert(
          typeof Int32Array !== "undefined" &&
            typeof Float64Array !== "undefined" &&
            Int32Array.prototype.subarray !== undefined &&
            Int32Array.prototype.set !== undefined,
          "JS engine does not provide full typed array support"
        );

        // In non-standalone/normal mode, we create the memory here.
        // include: runtime_init_memory.js

        // Create the wasm memory. (Note: this only applies if IMPORTED_MEMORY is defined)

        if (Module["wasmMemory"]) {
          wasmMemory = Module["wasmMemory"];
        } else {
          wasmMemory = new WebAssembly.Memory({
            initial: INITIAL_MEMORY / 65536,
            // In theory we should not need to emit the maximum if we want "unlimited"
            // or 4GB of memory, but VMs error on that atm, see
            // https://github.com/emscripten-core/emscripten/issues/14130
            // And in the pthreads case we definitely need to emit a maximum. So
            // always emit one.
            maximum: 2147483648 / 65536,
          });
        }

        if (wasmMemory) {
          buffer = wasmMemory.buffer;
        }

        // If the user provides an incorrect length, just use that length instead rather than providing the user to
        // specifically provide the memory length with Module['INITIAL_MEMORY'].
        INITIAL_MEMORY = buffer.byteLength;
        assert(INITIAL_MEMORY % 65536 === 0);
        updateGlobalBufferAndViews(buffer);

        // end include: runtime_init_memory.js

        // include: runtime_init_table.js
        // In RELOCATABLE mode we create the table in JS.
        var wasmTable = new WebAssembly.Table({
          initial: 21,
          element: "anyfunc",
        });

        // end include: runtime_init_table.js
        // include: runtime_stack_check.js

        // Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
        function writeStackCookie() {
          var max = _emscripten_stack_get_end();
          assert((max & 3) == 0);
          // The stack grows downwards
          HEAPU32[(max >> 2) + 1] = 0x2135467;
          HEAPU32[(max >> 2) + 2] = 0x89bacdfe;
          // Also test the global address 0 for integrity.
          HEAP32[0] = 0x63736d65; /* 'emsc' */
        }

        function checkStackCookie() {
          if (ABORT) return;
          var max = _emscripten_stack_get_end();
          var cookie1 = HEAPU32[(max >> 2) + 1];
          var cookie2 = HEAPU32[(max >> 2) + 2];
          if (cookie1 != 0x2135467 || cookie2 != 0x89bacdfe) {
            abort(
              "Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x" +
                cookie2.toString(16) +
                " " +
                cookie1.toString(16)
            );
          }
          // Also test the global address 0 for integrity.
          if (HEAP32[0] !== 0x63736d65 /* 'emsc' */)
            abort(
              "Runtime error: The application has corrupted its heap memory area (address zero)!"
            );
        }

        // end include: runtime_stack_check.js
        // include: runtime_assertions.js

        // Endianness check
        (function () {
          var h16 = new Int16Array(1);
          var h8 = new Int8Array(h16.buffer);
          h16[0] = 0x6373;
          if (h8[0] !== 0x73 || h8[1] !== 0x63)
            throw "Runtime error: expected the system to be little-endian! (Run with -s SUPPORT_BIG_ENDIAN=1 to bypass)";
        })();

        // end include: runtime_assertions.js
        var __ATPRERUN__ = []; // functions called before the runtime is initialized
        var __ATINIT__ = []; // functions called during startup
        var __ATMAIN__ = []; // functions called when main() is to be run
        var __ATEXIT__ = []; // functions called during shutdown
        var __ATPOSTRUN__ = []; // functions called after the main() is called

        var runtimeInitialized = false;
        var runtimeExited = false;

        function preRun() {
          if (Module["preRun"]) {
            if (typeof Module["preRun"] == "function")
              Module["preRun"] = [Module["preRun"]];
            while (Module["preRun"].length) {
              addOnPreRun(Module["preRun"].shift());
            }
          }

          callRuntimeCallbacks(__ATPRERUN__);
        }

        function initRuntime() {
          checkStackCookie();
          assert(!runtimeInitialized);
          runtimeInitialized = true;

          callRuntimeCallbacks(__ATINIT__);
        }

        function preMain() {
          checkStackCookie();

          callRuntimeCallbacks(__ATMAIN__);
        }

        function exitRuntime() {
          checkStackCookie();
          runtimeExited = true;
        }

        function postRun() {
          checkStackCookie();

          if (Module["postRun"]) {
            if (typeof Module["postRun"] == "function")
              Module["postRun"] = [Module["postRun"]];
            while (Module["postRun"].length) {
              addOnPostRun(Module["postRun"].shift());
            }
          }

          callRuntimeCallbacks(__ATPOSTRUN__);
        }

        function addOnPreRun(cb) {
          __ATPRERUN__.unshift(cb);
        }

        function addOnInit(cb) {
          __ATINIT__.unshift(cb);
        }

        function addOnPreMain(cb) {
          __ATMAIN__.unshift(cb);
        }

        function addOnExit(cb) {}

        function addOnPostRun(cb) {
          __ATPOSTRUN__.unshift(cb);
        }

        // include: runtime_math.js

        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul

        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround

        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32

        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc

        assert(
          Math.imul,
          "This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"
        );
        assert(
          Math.fround,
          "This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"
        );
        assert(
          Math.clz32,
          "This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"
        );
        assert(
          Math.trunc,
          "This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"
        );

        // end include: runtime_math.js
        // A counter of dependencies for calling run(). If we need to
        // do asynchronous work before running, increment this and
        // decrement it. Incrementing must happen in a place like
        // Module.preRun (used by emcc to add file preloading).
        // Note that you can add dependencies in preRun, even though
        // it happens right before run - run will be postponed until
        // the dependencies are met.
        var runDependencies = 0;
        var runDependencyWatcher = null;
        var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
        var runDependencyTracking = {};

        function getUniqueRunDependency(id) {
          var orig = id;
          while (1) {
            if (!runDependencyTracking[id]) return id;
            id = orig + Math.random();
          }
        }

        function addRunDependency(id) {
          runDependencies++;

          if (Module["monitorRunDependencies"]) {
            Module["monitorRunDependencies"](runDependencies);
          }

          if (id) {
            assert(!runDependencyTracking[id]);
            runDependencyTracking[id] = 1;
            if (
              runDependencyWatcher === null &&
              typeof setInterval !== "undefined"
            ) {
              // Check for missing dependencies every few seconds
              runDependencyWatcher = setInterval(function () {
                if (ABORT) {
                  clearInterval(runDependencyWatcher);
                  runDependencyWatcher = null;
                  return;
                }
                var shown = false;
                for (var dep in runDependencyTracking) {
                  if (!shown) {
                    shown = true;
                    err("still waiting on run dependencies:");
                  }
                  err("dependency: " + dep);
                }
                if (shown) {
                  err("(end of list)");
                }
              }, 10000);
            }
          } else {
            err("warning: run dependency added without ID");
          }
        }

        function removeRunDependency(id) {
          runDependencies--;

          if (Module["monitorRunDependencies"]) {
            Module["monitorRunDependencies"](runDependencies);
          }

          if (id) {
            assert(runDependencyTracking[id]);
            delete runDependencyTracking[id];
          } else {
            err("warning: run dependency removed without ID");
          }
          if (runDependencies == 0) {
            if (runDependencyWatcher !== null) {
              clearInterval(runDependencyWatcher);
              runDependencyWatcher = null;
            }
            if (dependenciesFulfilled) {
              var callback = dependenciesFulfilled;
              dependenciesFulfilled = null;
              callback(); // can add another dependenciesFulfilled
            }
          }
        }

        Module["preloadedImages"] = {}; // maps url to image data
        Module["preloadedAudios"] = {}; // maps url to audio data
        Module["preloadedWasm"] = {}; // maps url to wasm instance exports

        /** @param {string|number=} what */
        function abort(what) {
          if (Module["onAbort"]) {
            Module["onAbort"](what);
          }

          what += "";
          err(what);

          ABORT = true;
          EXITSTATUS = 1;

          var output = "abort(" + what + ") at " + stackTrace();
          what = output;

          // Use a wasm runtime error, because a JS error might be seen as a foreign
          // exception, which means we'd run destructors on it. We need the error to
          // simply make the program stop.
          var e = new WebAssembly.RuntimeError(what);

          // Throw the error whether or not MODULARIZE is set because abort is used
          // in code paths apart from instantiation where an exception is expected
          // to be thrown when abort is called.
          throw e;
        }

        // {{MEM_INITIALIZER}}

        // include: memoryprofiler.js

        // end include: memoryprofiler.js
        // show errors on likely calls to FS when it was not included
        var FS = {
          error: function () {
            abort(
              "Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with  -s FORCE_FILESYSTEM=1"
            );
          },
          init: function () {
            FS.error();
          },
          createDataFile: function () {
            FS.error();
          },
          createPreloadedFile: function () {
            FS.error();
          },
          createLazyFile: function () {
            FS.error();
          },
          open: function () {
            FS.error();
          },
          mkdev: function () {
            FS.error();
          },
          registerDevice: function () {
            FS.error();
          },
          analyzePath: function () {
            FS.error();
          },
          loadFilesFromDB: function () {
            FS.error();
          },

          ErrnoError: function ErrnoError() {
            FS.error();
          },
        };
        Module["FS_createDataFile"] = FS.createDataFile;
        Module["FS_createPreloadedFile"] = FS.createPreloadedFile;

        // include: URIUtils.js

        // Prefix of data URIs emitted by SINGLE_FILE and related options.
        var dataURIPrefix = "data:application/octet-stream;base64,";

        // Indicates whether filename is a base64 data URI.
        function isDataURI(filename) {
          // Prefix of data URIs emitted by SINGLE_FILE and related options.
          return filename.startsWith(dataURIPrefix);
        }

        // Indicates whether filename is delivered via file protocol (as opposed to http/https)
        function isFileURI(filename) {
          return filename.startsWith("file://");
        }

        // end include: URIUtils.js
        function createExportWrapper(name, fixedasm) {
          return function () {
            var displayName = name;
            var asm = fixedasm;
            if (!fixedasm) {
              asm = Module["asm"];
            }
            assert(
              runtimeInitialized,
              "native function `" +
                displayName +
                "` called before runtime initialization"
            );
            assert(
              !runtimeExited,
              "native function `" +
                displayName +
                "` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)"
            );
            if (!asm[name]) {
              assert(
                asm[name],
                "exported native function `" + displayName + "` not found"
              );
            }
            return asm[name].apply(null, arguments);
          };
        }

        var wasmBinaryFile;
        wasmBinaryFile =
          "data:application/octet-stream;base64, ";
        if (!isDataURI(wasmBinaryFile)) {
          wasmBinaryFile = locateFile(wasmBinaryFile);
        }

        function getBinary(file) {
          try {
            if (file == wasmBinaryFile && wasmBinary) {
              return new Uint8Array(wasmBinary);
            }
            var binary = tryParseAsDataURI(file);
            if (binary) {
              return binary;
            }
            if (readBinary) {
              return readBinary(file);
            } else {
              throw "both async and sync fetching of the wasm failed";
            }
          } catch (err) {
            abort(err);
          }
        }

        function getBinaryPromise() {
          // If we don't have the binary yet, try to to load it asynchronously.
          // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url.
          // See https://github.com/github/fetch/pull/92#issuecomment-140665932
          // Cordova or Electron apps are typically loaded from a file:// url.
          // So use fetch if it is available and the url is not a file, otherwise fall back to XHR.
          if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {
            if (typeof fetch === "function" && !isFileURI(wasmBinaryFile)) {
              return fetch(wasmBinaryFile, { credentials: "same-origin" })
                .then(function (response) {
                  if (!response["ok"]) {
                    throw (
                      "failed to load wasm binary file at '" +
                      wasmBinaryFile +
                      "'"
                    );
                  }
                  return response["arrayBuffer"]();
                })
                .catch(function () {
                  return getBinary(wasmBinaryFile);
                });
            } else {
              if (readAsync) {
                // fetch is not available or url is file => try XHR (readAsync uses XHR internally)
                return new Promise(function (resolve, reject) {
                  readAsync(
                    wasmBinaryFile,
                    function (response) {
                      resolve(
                        new Uint8Array(/** @type{!ArrayBuffer} */ (response))
                      );
                    },
                    reject
                  );
                });
              }
            }
          }

          // Otherwise, getBinary should be able to get it synchronously
          return Promise.resolve().then(function () {
            return getBinary(wasmBinaryFile);
          });
        }

        // Create the wasm instance.
        // Receives the wasm imports, returns the exports.
        function createWasm() {
          // prepare imports
          var info = {
            env: asmLibraryArg,
            wasi_snapshot_preview1: asmLibraryArg,
            "GOT.mem": new Proxy(asmLibraryArg, GOTHandler),
            "GOT.func": new Proxy(asmLibraryArg, GOTHandler),
          };
          // Load the wasm module and create an instance of using native support in the JS engine.
          // handle a generated wasm instance, receiving its exports and
          // performing other necessary setup
          /** @param {WebAssembly.Module=} module*/
          function receiveInstance(instance, module) {
            var exports = instance.exports;

            exports = relocateExports(exports, 1024);

            Module["asm"] = exports;

            var metadata = getDylinkMetadata(module);
            if (metadata.neededDynlibs) {
              dynamicLibraries =
                metadata.neededDynlibs.concat(dynamicLibraries);
            }
            mergeLibSymbols(exports, "main");

            addOnInit(Module["asm"]["__wasm_call_ctors"]);

            removeRunDependency("wasm-instantiate");
          }
          // we can't run yet (except in a pthread, where we have a custom sync instantiator)
          addRunDependency("wasm-instantiate");

          // Prefer streaming instantiation if available.
          // Async compilation can be confusing when an error on the page overwrites Module
          // (for example, if the order of elements is wrong, and the one defining Module is
          // later), so we save Module and check it later.
          var trueModule = Module;
          function receiveInstantiationResult(result) {
            // 'result' is a ResultObject object which has both the module and instance.
            // receiveInstance() will swap in the exports (to Module.asm) so they can be called
            assert(
              Module === trueModule,
              "the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"
            );
            trueModule = null;
            receiveInstance(result["instance"], result["module"]);
          }

          function instantiateArrayBuffer(receiver) {
            return getBinaryPromise()
              .then(function (binary) {
                var result = WebAssembly.instantiate(binary, info);
                return result;
              })
              .then(receiver, function (reason) {
                err("failed to asynchronously prepare wasm: " + reason);

                // Warn on some common problems.
                if (isFileURI(wasmBinaryFile)) {
                  err(
                    "warning: Loading from a file URI (" +
                      wasmBinaryFile +
                      ") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing"
                  );
                }
                abort(reason);
              });
          }

          function instantiateAsync() {
            if (
              !wasmBinary &&
              typeof WebAssembly.instantiateStreaming === "function" &&
              !isDataURI(wasmBinaryFile) &&
              // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously.
              !isFileURI(wasmBinaryFile) &&
              typeof fetch === "function"
            ) {
              return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(
                function (response) {
                  var result = WebAssembly.instantiateStreaming(response, info);
                  return result.then(
                    receiveInstantiationResult,
                    function (reason) {
                      // We expect the most common failure cause to be a bad MIME type for the binary,
                      // in which case falling back to ArrayBuffer instantiation should work.
                      err("wasm streaming compile failed: " + reason);
                      err("falling back to ArrayBuffer instantiation");
                      return instantiateArrayBuffer(receiveInstantiationResult);
                    }
                  );
                }
              );
            } else {
              return instantiateArrayBuffer(receiveInstantiationResult);
            }
          }

          // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback
          // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel
          // to any other async startup actions they are performing.
          if (Module["instantiateWasm"]) {
            try {
              var exports = Module["instantiateWasm"](info, receiveInstance);
              return exports;
            } catch (e) {
              err("Module.instantiateWasm callback failed with error: " + e);
              return false;
            }
          }

          instantiateAsync();
          return {}; // no exports yet; we'll fill them in later
        }

        // Globals used by JS i64 conversions (see makeSetValue)
        var tempDouble;
        var tempI64;

        // === Body ===

        var ASM_CONSTS = {};

        var GOT = {};
        var GOTHandler = {
          get: function (obj, symName) {
            if (!GOT[symName]) {
              GOT[symName] = new WebAssembly.Global({
                value: "i32",
                mutable: true,
              });
            }
            return GOT[symName];
          },
        };

        function callRuntimeCallbacks(callbacks) {
          while (callbacks.length > 0) {
            var callback = callbacks.shift();
            if (typeof callback == "function") {
              callback(Module); // Pass the module as the first argument.
              continue;
            }
            var func = callback.func;
            if (typeof func === "number") {
              if (callback.arg === undefined) {
                wasmTable.get(func)();
              } else {
                wasmTable.get(func)(callback.arg);
              }
            } else {
              func(callback.arg === undefined ? null : callback.arg);
            }
          }
        }

        function demangle(func) {
          warnOnce(
            "warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling"
          );
          return func;
        }

        function demangleAll(text) {
          var regex = /\b_Z[\w\d_]+/g;
          return text.replace(regex, function (x) {
            var y = demangle(x);
            return x === y ? x : y + " [" + x + "]";
          });
        }

        function getDylinkMetadata(binary) {
          var next = 0;
          function getLEB() {
            var ret = 0;
            var mul = 1;
            while (1) {
              var byte = binary[next++];
              ret += (byte & 0x7f) * mul;
              mul *= 0x80;
              if (!(byte & 0x80)) break;
            }
            return ret;
          }

          if (binary instanceof WebAssembly.Module) {
            var dylinkSection = WebAssembly.Module.customSections(
              binary,
              "dylink"
            );
            assert(dylinkSection.length != 0, "need dylink section");
            binary = new Int8Array(dylinkSection[0]);
          } else {
            var int32View = new Uint32Array(
              new Uint8Array(binary.subarray(0, 24)).buffer
            );
            assert(int32View[0] == 0x6d736100, "need to see wasm magic number"); // \0asm
            // we should see the dylink section right after the magic number and wasm version
            assert(binary[8] === 0, "need the dylink section to be first");
            next = 9;
            getLEB(); //section size
            assert(binary[next] === 6);
            next++; // size of "dylink" string
            assert(binary[next] === "d".charCodeAt(0));
            next++;
            assert(binary[next] === "y".charCodeAt(0));
            next++;
            assert(binary[next] === "l".charCodeAt(0));
            next++;
            assert(binary[next] === "i".charCodeAt(0));
            next++;
            assert(binary[next] === "n".charCodeAt(0));
            next++;
            assert(binary[next] === "k".charCodeAt(0));
            next++;
          }

          var customSection = {};
          customSection.memorySize = getLEB();
          customSection.memoryAlign = getLEB();
          customSection.tableSize = getLEB();
          customSection.tableAlign = getLEB();
          var tableAlign = Math.pow(2, customSection.tableAlign);
          assert(tableAlign === 1, "invalid tableAlign " + tableAlign);
          // shared libraries this module needs. We need to load them first, so that
          // current module could resolve its imports. (see tools/shared.py
          // WebAssembly.make_shared_library() for "dylink" section extension format)
          var neededDynlibsCount = getLEB();
          customSection.neededDynlibs = [];
          for (var i = 0; i < neededDynlibsCount; ++i) {
            var nameLen = getLEB();
            var nameUTF8 = binary.subarray(next, next + nameLen);
            next += nameLen;
            var name = UTF8ArrayToString(nameUTF8, 0);
            customSection.neededDynlibs.push(name);
          }
          return customSection;
        }

        function jsStackTrace() {
          var error = new Error();
          if (!error.stack) {
            // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,
            // so try that as a special-case.
            try {
              throw new Error();
            } catch (e) {
              error = e;
            }
            if (!error.stack) {
              return "(no stack trace available)";
            }
          }
          return error.stack.toString();
        }

        var runtimeKeepaliveCounter = 0;
        function keepRuntimeAlive() {
          return noExitRuntime || runtimeKeepaliveCounter > 0;
        }

        function asmjsMangle(x) {
          var unmangledSymbols = ["stackAlloc", "stackSave", "stackRestore"];
          return x.indexOf("dynCall_") == 0 || unmangledSymbols.includes(x)
            ? x
            : "_" + x;
        }
        function mergeLibSymbols(exports, libName) {
          // add symbols into global namespace TODO: weak linking etc.
          for (var sym in exports) {
            if (!exports.hasOwnProperty(sym)) {
              continue;
            }

            // When RTLD_GLOBAL is enable, the symbols defined by this shared object will be made
            // available for symbol resolution of subsequently loaded shared objects.
            //
            // We should copy the symbols (which include methods and variables) from SIDE_MODULE to MAIN_MODULE.

            if (!asmLibraryArg.hasOwnProperty(sym)) {
              asmLibraryArg[sym] = exports[sym];
            }

            // Export native export on the Module object.
            // TODO(sbc): Do all users want this?  Should we skip this by default?
            var module_sym = asmjsMangle(sym);
            if (!Module.hasOwnProperty(module_sym)) {
              Module[module_sym] = exports[sym];
            }
          }
        }

        var LDSO = { nextHandle: 1, loadedLibs: {}, loadedLibNames: {} };

        function dynCallLegacy(sig, ptr, args) {
          assert(
            "dynCall_" + sig in Module,
            "bad function pointer type - no table for sig '" + sig + "'"
          );
          if (args && args.length) {
            // j (64-bit integer) must be passed in as two numbers [low 32, high 32].
            assert(args.length === sig.substring(1).replace(/j/g, "--").length);
          } else {
            assert(sig.length == 1);
          }
          var f = Module["dynCall_" + sig];
          return args && args.length
            ? f.apply(null, [ptr].concat(args))
            : f.call(null, ptr);
        }
        function dynCall(sig, ptr, args) {
          // Without WASM_BIGINT support we cannot directly call function with i64 as
          // part of thier signature, so we rely the dynCall functions generated by
          // wasm-emscripten-finalize
          if (sig.includes("j")) {
            return dynCallLegacy(sig, ptr, args);
          }
          assert(wasmTable.get(ptr), "missing table entry in dynCall: " + ptr);
          return wasmTable.get(ptr).apply(null, args);
        }
        function createInvokeFunction(sig) {
          return function () {
            var sp = stackSave();
            try {
              return dynCall(
                sig,
                arguments[0],
                Array.prototype.slice.call(arguments, 1)
              );
            } catch (e) {
              stackRestore(sp);
              if (e !== e + 0 && e !== "longjmp") throw e;
              _setThrew(1, 0);
            }
          };
        }

        var ___heap_base = 5251008;
        Module["___heap_base"] = ___heap_base;
        function getMemory(size) {
          // After the runtime is initialized, we must only use sbrk() normally.
          if (runtimeInitialized) return _malloc(size);
          var ret = ___heap_base;
          var end = (ret + size + 15) & -16;
          assert(
            end <= HEAP8.length,
            "failure to getMemory - memory growth etc. is not supported there, call malloc/sbrk directly or increase INITIAL_MEMORY"
          );
          ___heap_base = end;
          GOT["__heap_base"].value = end;
          return ret;
        }

        function isInternalSym(symName) {
          // TODO: find a way to mark these in the binary or avoid exporting them.
          return [
            "__cpp_exception",
            "__wasm_apply_data_relocs",
            "__dso_handle",
            "__set_stack_limits",
          ].includes(symName);
        }
        function updateGOT(exports) {
          for (var symName in exports) {
            if (isInternalSym(symName)) {
              continue;
            }

            var replace = false;
            var value = exports[symName];
            if (symName.startsWith("orig$")) {
              symName = symName.split("$")[1];
              replace = true;
            }

            if (!GOT[symName]) {
              GOT[symName] = new WebAssembly.Global({
                value: "i32",
                mutable: true,
              });
            }
            if (replace || GOT[symName].value == 0) {
              if (typeof value === "function") {
                GOT[symName].value = addFunctionWasm(value);
              } else if (typeof value === "number") {
                GOT[symName].value = value;
              } else {
                err(
                  "unhandled export type for `" + symName + "`: " + typeof value
                );
              }
            }
          }
        }
        function relocateExports(exports, memoryBase) {
          var relocated = {};

          for (var e in exports) {
            var value = exports[e];
            if (typeof value === "object") {
              // a breaking change in the wasm spec, globals are now objects
              // https://github.com/WebAssembly/mutable-global/issues/1
              value = value.value;
            }
            if (typeof value === "number") {
              value += memoryBase;
            }
            relocated[e] = value;
          }
          updateGOT(relocated);
          return relocated;
        }

        function resolveGlobalSymbol(symName, direct) {
          var sym;
          if (direct) {
            // First look for the orig$ symbol which is the symbols without
            // any legalization performed.
            sym = asmLibraryArg["orig$" + symName];
          }
          if (!sym) {
            sym = asmLibraryArg[symName];
          }

          // Check for the symbol on the Module object.  This is the only
          // way to dynamically access JS library symbols that were not
          // referenced by the main module (and therefore not part of the
          // initial set of symbols included in asmLibraryArg when it
          // was declared.
          if (!sym) {
            sym = Module[asmjsMangle(symName)];
          }

          if (!sym && symName.startsWith("invoke_")) {
            sym = createInvokeFunction(symName.split("_")[1]);
          }

          return sym;
        }
        function loadWebAssemblyModule(binary, flags) {
          var metadata = getDylinkMetadata(binary);
          var originalTable = wasmTable;

          // loadModule loads the wasm module after all its dependencies have been loaded.
          // can be called both sync/async.
          function loadModule() {
            // alignments are powers of 2
            var memAlign = Math.pow(2, metadata.memoryAlign);
            // finalize alignments and verify them
            memAlign = Math.max(memAlign, STACK_ALIGN); // we at least need stack alignment
            // prepare memory
            var memoryBase = alignMemory(
              getMemory(metadata.memorySize + memAlign),
              memAlign
            ); // TODO: add to cleanups
            // TODO: use only __memory_base and __table_base, need to update asm.js backend
            var tableBase = wasmTable.length;
            wasmTable.grow(metadata.tableSize);
            // zero-initialize memory and table
            // The static area consists of explicitly initialized data, followed by zero-initialized data.
            // The latter may need zeroing out if the MAIN_MODULE has already used this memory area before
            // dlopen'ing the SIDE_MODULE.  Since we don't know the size of the explicitly initialized data
            // here, we just zero the whole thing, which is suboptimal, but should at least resolve bugs
            // from uninitialized memory.
            for (
              var i = memoryBase;
              i < memoryBase + metadata.memorySize;
              i++
            ) {
              HEAP8[i] = 0;
            }
            for (var i = tableBase; i < tableBase + metadata.tableSize; i++) {
              wasmTable.set(i, null);
            }

            // This is the export map that we ultimately return.  We declare it here
            // so it can be used within resolveSymbol.  We resolve symbols against
            // this local symbol map in the case there they are not present on the
            // global Module object.  We need this fallback because:
            // a) Modules sometime need to import their own symbols
            // b) Symbols from side modules are not always added to the global namespace.
            var moduleExports;

            function resolveSymbol(sym) {
              var resolved = resolveGlobalSymbol(sym, false);
              if (!resolved) {
                resolved = moduleExports[sym];
              }
              assert(
                resolved,
                "undefined symbol `" +
                  sym +
                  "`. perhaps a side module was not linked in? if this global was expected to arrive from a system library, try to build the MAIN_MODULE with EMCC_FORCE_STDLIBS=1 in the environment"
              );
              return resolved;
            }

            // TODO kill ↓↓↓ (except "symbols local to this module", it will likely be
            // not needed if we require that if A wants symbols from B it has to link
            // to B explicitly: similarly to -Wl,--no-undefined)
            //
            // wasm dynamic libraries are pure wasm, so they cannot assist in
            // their own loading. When side module A wants to import something
            // provided by a side module B that is loaded later, we need to
            // add a layer of indirection, but worse, we can't even tell what
            // to add the indirection for, without inspecting what A's imports
            // are. To do that here, we use a JS proxy (another option would
            // be to inspect the binary directly).
            var proxyHandler = {
              get: function (stubs, prop) {
                // symbols that should be local to this module
                switch (prop) {
                  case "__memory_base":
                    return memoryBase;
                  case "__table_base":
                    return tableBase;
                }
                if (prop in asmLibraryArg) {
                  // No stub needed, symbol already exists in symbol table
                  return asmLibraryArg[prop];
                }
                // Return a stub function that will resolve the symbol
                // when first called.
                if (!(prop in stubs)) {
                  var resolved;
                  stubs[prop] = function () {
                    if (!resolved) resolved = resolveSymbol(prop, true);
                    return resolved.apply(null, arguments);
                  };
                }
                return stubs[prop];
              },
            };
            var proxy = new Proxy({}, proxyHandler);
            var info = {
              "GOT.mem": new Proxy({}, GOTHandler),
              "GOT.func": new Proxy({}, GOTHandler),
              env: proxy,
              wasi_snapshot_preview1: proxy,
            };

            function postInstantiation(instance) {
              // the table should be unchanged
              assert(wasmTable === originalTable);
              // add new entries to functionsInTableMap
              for (var i = 0; i < metadata.tableSize; i++) {
                var item = wasmTable.get(tableBase + i);
                // verify that the new table region was filled in
                assert(item !== undefined, "table entry was not filled in");
                // Ignore null values.
                if (item) {
                  functionsInTableMap.set(item, tableBase + i);
                }
              }
              moduleExports = relocateExports(instance.exports, memoryBase);
              if (!flags.allowUndefined) {
                reportUndefinedSymbols();
              }

              // initialize the module
              var init = moduleExports["__wasm_call_ctors"];
              // TODO(sbc): Remove this once extra check once the binaryen
              // change propogates: https://github.com/WebAssembly/binaryen/pull/3811
              if (!init) {
                init = moduleExports["__post_instantiate"];
              }
              if (init) {
                if (runtimeInitialized) {
                  init();
                } else {
                  // we aren't ready to run compiled code yet
                  __ATINIT__.push(init);
                }
              }
              return moduleExports;
            }

            if (flags.loadAsync) {
              if (binary instanceof WebAssembly.Module) {
                var instance = new WebAssembly.Instance(binary, info);
                return Promise.resolve(postInstantiation(instance));
              }
              return WebAssembly.instantiate(binary, info).then(function (
                result
              ) {
                return postInstantiation(result.instance);
              });
            }

            var module =
              binary instanceof WebAssembly.Module
                ? binary
                : new WebAssembly.Module(binary);
            var instance = new WebAssembly.Instance(module, info);
            return postInstantiation(instance);
          }

          // now load needed libraries and the module itself.
          if (flags.loadAsync) {
            return metadata.neededDynlibs
              .reduce(function (chain, dynNeeded) {
                return chain.then(function () {
                  return loadDynamicLibrary(dynNeeded, flags);
                });
              }, Promise.resolve())
              .then(function () {
                return loadModule();
              });
          }

          metadata.neededDynlibs.forEach(function (dynNeeded) {
            loadDynamicLibrary(dynNeeded, flags);
          });
          return loadModule();
        }

        function fetchBinary(url) {
          return fetch(url, { credentials: "same-origin" })
            .then(function (response) {
              if (!response["ok"]) {
                throw "failed to load binary file at '" + url + "'";
              }
              return response["arrayBuffer"]();
            })
            .then(function (buffer) {
              return new Uint8Array(buffer);
            });
        }
        function loadDynamicLibrary(lib, flags) {
          if (lib == "__main__" && !LDSO.loadedLibNames[lib]) {
            LDSO.loadedLibs[-1] = {
              refcount: Infinity, // = nodelete
              name: "__main__",
              module: Module["asm"],
              global: true,
            };
            LDSO.loadedLibNames["__main__"] = -1;
          }

          // when loadDynamicLibrary did not have flags, libraries were loaded globally & permanently
          flags = flags || { global: true, nodelete: true };

          var handle = LDSO.loadedLibNames[lib];
          var dso;
          if (handle) {
            // the library is being loaded or has been loaded already.
            //
            // however it could be previously loaded only locally and if we get
            // load request with global=true we have to make it globally visible now.
            dso = LDSO.loadedLibs[handle];
            if (flags.global && !dso.global) {
              dso.global = true;
              if (dso.module !== "loading") {
                // ^^^ if module is 'loading' - symbols merging will be eventually done by the loader.
                mergeLibSymbols(dso.module, lib);
              }
            }
            // same for "nodelete"
            if (flags.nodelete && dso.refcount !== Infinity) {
              dso.refcount = Infinity;
            }
            dso.refcount++;
            return flags.loadAsync ? Promise.resolve(handle) : handle;
          }

          // allocate new DSO & handle
          handle = LDSO.nextHandle++;
          dso = {
            refcount: flags.nodelete ? Infinity : 1,
            name: lib,
            module: "loading",
            global: flags.global,
          };
          LDSO.loadedLibNames[lib] = handle;
          LDSO.loadedLibs[handle] = dso;

          // libData <- libFile
          function loadLibData(libFile) {
            // for wasm, we can use fetch for async, but for fs mode we can only imitate it
            if (flags.fs) {
              var libData = flags.fs.readFile(libFile, { encoding: "binary" });
              if (!(libData instanceof Uint8Array)) {
                libData = new Uint8Array(libData);
              }
              return flags.loadAsync ? Promise.resolve(libData) : libData;
            }

            if (flags.loadAsync) {
              return fetchBinary(libFile);
            }
            // load the binary synchronously
            return readBinary(libFile);
          }

          // libModule <- lib
          function getLibModule() {
            // lookup preloaded cache first
            if (
              Module["preloadedWasm"] !== undefined &&
              Module["preloadedWasm"][lib] !== undefined
            ) {
              var libModule = Module["preloadedWasm"][lib];
              return flags.loadAsync ? Promise.resolve(libModule) : libModule;
            }

            // module not preloaded - load lib data and create new module from it
            if (flags.loadAsync) {
              return loadLibData(lib).then(function (libData) {
                return loadWebAssemblyModule(libData, flags);
              });
            }

            return loadWebAssemblyModule(loadLibData(lib), flags);
          }

          // module for lib is loaded - update the dso & global namespace
          function moduleLoaded(libModule) {
            if (dso.global) {
              mergeLibSymbols(libModule, lib);
            }
            dso.module = libModule;
          }

          if (flags.loadAsync) {
            return getLibModule().then(function (libModule) {
              moduleLoaded(libModule);
              return handle;
            });
          }

          moduleLoaded(getLibModule());
          return handle;
        }

        function reportUndefinedSymbols() {
          for (var symName in GOT) {
            if (GOT[symName].value == 0) {
              var value = resolveGlobalSymbol(symName, true);
              assert(
                value,
                "undefined symbol `" +
                  symName +
                  "`. perhaps a side module was not linked in? if this global was expected to arrive from a system library, try to build the MAIN_MODULE with EMCC_FORCE_STDLIBS=1 in the environment"
              );
              if (typeof value === "function") {
                GOT[symName].value = addFunctionWasm(value, value.sig);
              } else if (typeof value === "number") {
                GOT[symName].value = value;
              } else {
                assert(
                  false,
                  "bad export type for `" + symName + "`: " + typeof value
                );
              }
            }
          }
        }
        function preloadDylibs() {
          if (!dynamicLibraries.length) {
            reportUndefinedSymbols();
            return;
          }

          // if we can load dynamic libraries synchronously, do so, otherwise, preload
          if (!readBinary) {
            // we can't read binary data synchronously, so preload
            addRunDependency("preloadDylibs");
            dynamicLibraries
              .reduce(function (chain, lib) {
                return chain.then(function () {
                  return loadDynamicLibrary(lib, {
                    loadAsync: true,
                    global: true,
                    nodelete: true,
                    allowUndefined: true,
                  });
                });
              }, Promise.resolve())
              .then(function () {
                // we got them all, wonderful
                removeRunDependency("preloadDylibs");
                reportUndefinedSymbols();
              });
            return;
          }

          dynamicLibraries.forEach(function (lib) {
            // libraries linked to main never go away
            loadDynamicLibrary(lib, {
              global: true,
              nodelete: true,
              allowUndefined: true,
            });
          });
          reportUndefinedSymbols();
        }

        function stackTrace() {
          var js = jsStackTrace();
          if (Module["extraStackTrace"])
            js += "\n" + Module["extraStackTrace"]();
          return demangleAll(js);
        }

        var ___stack_pointer = new WebAssembly.Global(
          { value: "i32", mutable: true },
          5251008
        );

        function _abort() {
          abort();
        }
        Module["_abort"] = _abort;
        _abort.sig = "v";

        var _emscripten_get_now;
        if (ENVIRONMENT_IS_NODE) {
          _emscripten_get_now = function () {
            var t = process["hrtime"]();
            return t[0] * 1e3 + t[1] / 1e6;
          };
        } else if (typeof dateNow !== "undefined") {
          _emscripten_get_now = dateNow;
        } else
          _emscripten_get_now = function () {
            return performance.now();
          };

        var _emscripten_get_now_is_monotonic = true;

        function setErrNo(value) {
          HEAP32[___errno_location() >> 2] = value;
          return value;
        }
        function _clock_gettime(clk_id, tp) {
          // int clock_gettime(clockid_t clk_id, struct timespec *tp);
          var now;
          if (clk_id === 0) {
            now = Date.now();
          } else if (
            (clk_id === 1 || clk_id === 4) &&
            _emscripten_get_now_is_monotonic
          ) {
            now = _emscripten_get_now();
          } else {
            setErrNo(28);
            return -1;
          }
          HEAP32[tp >> 2] = (now / 1000) | 0; // seconds
          HEAP32[(tp + 4) >> 2] = ((now % 1000) * 1000 * 1000) | 0; // nanoseconds
          return 0;
        }
        _clock_gettime.sig = "iii";

        function _emscripten_memcpy_big(dest, src, num) {
          HEAPU8.copyWithin(dest, src, src + num);
        }

        function emscripten_realloc_buffer(size) {
          try {
            // round size grow request up to wasm page size (fixed 64KB per spec)
            wasmMemory.grow((size - buffer.byteLength + 65535) >>> 16); // .grow() takes a delta compared to the previous size
            updateGlobalBufferAndViews(wasmMemory.buffer);
            return 1 /*success*/;
          } catch (e) {
            console.error(
              "emscripten_realloc_buffer: Attempted to grow heap from " +
                buffer.byteLength +
                " bytes to " +
                size +
                " bytes, but got error: " +
                e
            );
          }
          // implicit 0 return to save code size (caller will cast "undefined" into 0
          // anyhow)
        }
        function _emscripten_resize_heap(requestedSize) {
          var oldSize = HEAPU8.length;
          requestedSize = requestedSize >>> 0;
          // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.
          assert(requestedSize > oldSize);

          // Memory resize rules:
          // 1. Always increase heap size to at least the requested size, rounded up to next page multiple.
          // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap geometrically: increase the heap size according to
          //                                         MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%),
          //                                         At most overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).
          // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap linearly: increase the heap size by at least MEMORY_GROWTH_LINEAR_STEP bytes.
          // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest
          // 4. If we were unable to allocate as much memory, it may be due to over-eager decision to excessively reserve due to (3) above.
          //    Hence if an allocation fails, cut down on the amount of excess growth, in an attempt to succeed to perform a smaller allocation.

          // A limit is set for how much we can grow. We should not exceed that
          // (the wasm binary specifies it, so if we tried, we'd fail anyhow).
          // In CAN_ADDRESS_2GB mode, stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate full 4GB Wasm memories, the size will wrap
          // back to 0 bytes in Wasm side for any code that deals with heap sizes, which would require special casing all heap size related code to treat
          // 0 specially.
          var maxHeapSize = 2147483648;
          if (requestedSize > maxHeapSize) {
            err(
              "Cannot enlarge memory, asked to go up to " +
                requestedSize +
                " bytes, but the limit is " +
                maxHeapSize +
                " bytes!"
            );
            return false;
          }

          // Loop through potential heap size increases. If we attempt a too eager reservation that fails, cut down on the
          // attempted size and reserve a smaller bump instead. (max 3 times, chosen somewhat arbitrarily)
          for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
            var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth
            // but limit overreserving (default to capping at +96MB overgrowth at most)
            overGrownHeapSize = Math.min(
              overGrownHeapSize,
              requestedSize + 100663296
            );

            var newSize = Math.min(
              maxHeapSize,
              alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)
            );

            var replacement = emscripten_realloc_buffer(newSize);
            if (replacement) {
              return true;
            }
          }
          err(
            "Failed to grow the heap from " +
              oldSize +
              " bytes to " +
              newSize +
              " bytes, not enough memory!"
          );
          return false;
        }

        function _exit(status) {
          // void _exit(int status);
          // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
          exit(status);
        }
        _exit.sig = "vi";

        var SYSCALLS = {
          mappings: {},
          DEFAULT_POLLMASK: 5,
          umask: 511,
          calculateAt: function (dirfd, path, allowEmpty) {
            if (path[0] === "/") {
              return path;
            }
            // relative path
            var dir;
            if (dirfd === -100) {
              dir = FS.cwd();
            } else {
              var dirstream = FS.getStream(dirfd);
              if (!dirstream) throw new FS.ErrnoError(8);
              dir = dirstream.path;
            }
            if (path.length == 0) {
              if (!allowEmpty) {
                throw new FS.ErrnoError(44);
              }
              return dir;
            }
            return PATH.join2(dir, path);
          },
          doStat: function (func, path, buf) {
            try {
              var stat = func(path);
            } catch (e) {
              if (
                e &&
                e.node &&
                PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))
              ) {
                // an error occurred while trying to look up the path; we should just report ENOTDIR
                return -54;
              }
              throw e;
            }
            HEAP32[buf >> 2] = stat.dev;
            HEAP32[(buf + 4) >> 2] = 0;
            HEAP32[(buf + 8) >> 2] = stat.ino;
            HEAP32[(buf + 12) >> 2] = stat.mode;
            HEAP32[(buf + 16) >> 2] = stat.nlink;
            HEAP32[(buf + 20) >> 2] = stat.uid;
            HEAP32[(buf + 24) >> 2] = stat.gid;
            HEAP32[(buf + 28) >> 2] = stat.rdev;
            HEAP32[(buf + 32) >> 2] = 0;
            (tempI64 = [
              stat.size >>> 0,
              ((tempDouble = stat.size),
              +Math.abs(tempDouble) >= 1.0
                ? tempDouble > 0.0
                  ? (Math.min(
                      +Math.floor(tempDouble / 4294967296.0),
                      4294967295.0
                    ) |
                      0) >>>
                    0
                  : ~~+Math.ceil(
                      (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0
                    ) >>> 0
                : 0),
            ]),
              (HEAP32[(buf + 40) >> 2] = tempI64[0]),
              (HEAP32[(buf + 44) >> 2] = tempI64[1]);
            HEAP32[(buf + 48) >> 2] = 4096;
            HEAP32[(buf + 52) >> 2] = stat.blocks;
            HEAP32[(buf + 56) >> 2] = (stat.atime.getTime() / 1000) | 0;
            HEAP32[(buf + 60) >> 2] = 0;
            HEAP32[(buf + 64) >> 2] = (stat.mtime.getTime() / 1000) | 0;
            HEAP32[(buf + 68) >> 2] = 0;
            HEAP32[(buf + 72) >> 2] = (stat.ctime.getTime() / 1000) | 0;
            HEAP32[(buf + 76) >> 2] = 0;
            (tempI64 = [
              stat.ino >>> 0,
              ((tempDouble = stat.ino),
              +Math.abs(tempDouble) >= 1.0
                ? tempDouble > 0.0
                  ? (Math.min(
                      +Math.floor(tempDouble / 4294967296.0),
                      4294967295.0
                    ) |
                      0) >>>
                    0
                  : ~~+Math.ceil(
                      (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0
                    ) >>> 0
                : 0),
            ]),
              (HEAP32[(buf + 80) >> 2] = tempI64[0]),
              (HEAP32[(buf + 84) >> 2] = tempI64[1]);
            return 0;
          },
          doMsync: function (addr, stream, len, flags, offset) {
            var buffer = HEAPU8.slice(addr, addr + len);
            FS.msync(stream, buffer, offset, len, flags);
          },
          doMkdir: function (path, mode) {
            // remove a trailing slash, if one - /a/b/ has basename of '', but
            // we want to create b in the context of this function
            path = PATH.normalize(path);
            if (path[path.length - 1] === "/")
              path = path.substr(0, path.length - 1);
            FS.mkdir(path, mode, 0);
            return 0;
          },
          doMknod: function (path, mode, dev) {
            // we don't want this in the JS API as it uses mknod to create all nodes.
            switch (mode & 61440) {
              case 32768:
              case 8192:
              case 24576:
              case 4096:
              case 49152:
                break;
              default:
                return -28;
            }
            FS.mknod(path, mode, dev);
            return 0;
          },
          doReadlink: function (path, buf, bufsize) {
            if (bufsize <= 0) return -28;
            var ret = FS.readlink(path);

            var len = Math.min(bufsize, lengthBytesUTF8(ret));
            var endChar = HEAP8[buf + len];
            stringToUTF8(ret, buf, bufsize + 1);
            // readlink is one of the rare functions that write out a C string, but does never append a null to the output buffer(!)
            // stringToUTF8() always appends a null byte, so restore the character under the null byte after the write.
            HEAP8[buf + len] = endChar;

            return len;
          },
          doAccess: function (path, amode) {
            if (amode & ~7) {
              // need a valid mode
              return -28;
            }
            var node;
            var lookup = FS.lookupPath(path, { follow: true });
            node = lookup.node;
            if (!node) {
              return -44;
            }
            var perms = "";
            if (amode & 4) perms += "r";
            if (amode & 2) perms += "w";
            if (amode & 1) perms += "x";
            if (
              perms /* otherwise, they've just passed F_OK */ &&
              FS.nodePermissions(node, perms)
            ) {
              return -2;
            }
            return 0;
          },
          doDup: function (path, flags, suggestFD) {
            var suggest = FS.getStream(suggestFD);
            if (suggest) FS.close(suggest);
            return FS.open(path, flags, 0, suggestFD, suggestFD).fd;
          },
          doReadv: function (stream, iov, iovcnt, offset) {
            var ret = 0;
            for (var i = 0; i < iovcnt; i++) {
              var ptr = HEAP32[(iov + i * 8) >> 2];
              var len = HEAP32[(iov + (i * 8 + 4)) >> 2];
              var curr = FS.read(stream, HEAP8, ptr, len, offset);
              if (curr < 0) return -1;
              ret += curr;
              if (curr < len) break; // nothing more to read
            }
            return ret;
          },
          doWritev: function (stream, iov, iovcnt, offset) {
            var ret = 0;
            for (var i = 0; i < iovcnt; i++) {
              var ptr = HEAP32[(iov + i * 8) >> 2];
              var len = HEAP32[(iov + (i * 8 + 4)) >> 2];
              var curr = FS.write(stream, HEAP8, ptr, len, offset);
              if (curr < 0) return -1;
              ret += curr;
            }
            return ret;
          },
          varargs: undefined,
          get: function () {
            assert(SYSCALLS.varargs != undefined);
            SYSCALLS.varargs += 4;
            var ret = HEAP32[(SYSCALLS.varargs - 4) >> 2];
            return ret;
          },
          getStr: function (ptr) {
            var ret = UTF8ToString(ptr);
            return ret;
          },
          getStreamFromFD: function (fd) {
            var stream = FS.getStream(fd);
            if (!stream) throw new FS.ErrnoError(8);
            return stream;
          },
          get64: function (low, high) {
            if (low >= 0) assert(high === 0);
            else assert(high === -1);
            return low;
          },
        };
        function _fd_close(fd) {
          try {
            var stream = SYSCALLS.getStreamFromFD(fd);
            FS.close(stream);
            return 0;
          } catch (e) {
            if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
              abort(e);
            return e.errno;
          }
        }
        _fd_close.sig = "ii";

        function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
          try {
            var stream = SYSCALLS.getStreamFromFD(fd);
            var HIGH_OFFSET = 0x100000000; // 2^32
            // use an unsigned operator on low and shift high by 32-bits
            var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0);

            var DOUBLE_LIMIT = 0x20000000000000; // 2^53
            // we also check for equality since DOUBLE_LIMIT + 1 == DOUBLE_LIMIT
            if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) {
              return -61;
            }

            FS.llseek(stream, offset, whence);
            (tempI64 = [
              stream.position >>> 0,
              ((tempDouble = stream.position),
              +Math.abs(tempDouble) >= 1.0
                ? tempDouble > 0.0
                  ? (Math.min(
                      +Math.floor(tempDouble / 4294967296.0),
                      4294967295.0
                    ) |
                      0) >>>
                    0
                  : ~~+Math.ceil(
                      (tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0
                    ) >>> 0
                : 0),
            ]),
              (HEAP32[newOffset >> 2] = tempI64[0]),
              (HEAP32[(newOffset + 4) >> 2] = tempI64[1]);
            if (stream.getdents && offset === 0 && whence === 0)
              stream.getdents = null; // reset readdir state
            return 0;
          } catch (e) {
            if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
              abort(e);
            return e.errno;
          }
        }

        function _fd_write(fd, iov, iovcnt, pnum) {
          try {
            var stream = SYSCALLS.getStreamFromFD(fd);
            var num = SYSCALLS.doWritev(stream, iov, iovcnt);
            HEAP32[pnum >> 2] = num;
            return 0;
          } catch (e) {
            if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
              abort(e);
            return e.errno;
          }
        }
        _fd_write.sig = "iiiii";

        function _setTempRet0(val) {
          setTempRet0(val);
        }
        _setTempRet0.sig = "vi";

        function _tree_sitter_log_callback(isLexMessage, messageAddress) {
          if (currentLogCallback) {
            const message = UTF8ToString(messageAddress);
            currentLogCallback(message, isLexMessage !== 0);
          }
        }

        function _tree_sitter_parse_callback(
          inputBufferAddress,
          index,
          row,
          column,
          lengthAddress
        ) {
          var INPUT_BUFFER_SIZE = 10 * 1024;
          var string = currentParseCallback(index, {
            row: row,
            column: column,
          });
          if (typeof string === "string") {
            setValue(lengthAddress, string.length, "i32");
            stringToUTF16(string, inputBufferAddress, INPUT_BUFFER_SIZE);
          } else {
            setValue(lengthAddress, 0, "i32");
          }
        }

        var ___memory_base = 1024;

        var ___table_base = 1;

        var ASSERTIONS = true;

        /** @type {function(string, boolean=, number=)} */
        function intArrayFromString(stringy, dontAddNull, length) {
          var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;
          var u8array = new Array(len);
          var numBytesWritten = stringToUTF8Array(
            stringy,
            u8array,
            0,
            u8array.length
          );
          if (dontAddNull) u8array.length = numBytesWritten;
          return u8array;
        }

        function intArrayToString(array) {
          var ret = [];
          for (var i = 0; i < array.length; i++) {
            var chr = array[i];
            if (chr > 0xff) {
              if (ASSERTIONS) {
                assert(
                  false,
                  "Character code " +
                    chr +
                    " (" +
                    String.fromCharCode(chr) +
                    ")  at offset " +
                    i +
                    " not in 0x00-0xFF."
                );
              }
              chr &= 0xff;
            }
            ret.push(String.fromCharCode(chr));
          }
          return ret.join("");
        }

        // Copied from https://github.com/strophe/strophejs/blob/e06d027/src/polyfills.js#L149

        // This code was written by Tyler Akins and has been placed in the
        // public domain.  It would be nice if you left this header intact.
        // Base64 code from Tyler Akins -- http://rumkin.com

        /**
         * Decodes a base64 string.
         * @param {string} input The string to decode.
         */
        var decodeBase64 =
          typeof atob === "function"
            ? atob
            : function (input) {
                var keyStr =
                  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

                var output = "";
                var chr1, chr2, chr3;
                var enc1, enc2, enc3, enc4;
                var i = 0;
                // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
                input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
                do {
                  enc1 = keyStr.indexOf(input.charAt(i++));
                  enc2 = keyStr.indexOf(input.charAt(i++));
                  enc3 = keyStr.indexOf(input.charAt(i++));
                  enc4 = keyStr.indexOf(input.charAt(i++));

                  chr1 = (enc1 << 2) | (enc2 >> 4);
                  chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                  chr3 = ((enc3 & 3) << 6) | enc4;

                  output = output + String.fromCharCode(chr1);

                  if (enc3 !== 64) {
                    output = output + String.fromCharCode(chr2);
                  }
                  if (enc4 !== 64) {
                    output = output + String.fromCharCode(chr3);
                  }
                } while (i < input.length);
                return output;
              };

        // Converts a string of base64 into a byte array.
        // Throws error on invalid input.
        function intArrayFromBase64(s) {
          if (typeof ENVIRONMENT_IS_NODE === "boolean" && ENVIRONMENT_IS_NODE) {
            var buf;
            try {
              // TODO: Update Node.js externs, Closure does not recognize the following Buffer.from()
              /**@suppress{checkTypes}*/
              buf = Buffer.from(s, "base64");
            } catch (_) {
              buf = new Buffer(s, "base64");
            }
            return new Uint8Array(
              buf["buffer"],
              buf["byteOffset"],
              buf["byteLength"]
            );
          }

          try {
            var decoded = decodeBase64(s);
            var bytes = new Uint8Array(decoded.length);
            for (var i = 0; i < decoded.length; ++i) {
              bytes[i] = decoded.charCodeAt(i);
            }
            return bytes;
          } catch (_) {
            throw new Error("Converting base64 string to bytes failed.");
          }
        }

        // If filename is a base64 data URI, parses and returns data (Buffer on node,
        // Uint8Array otherwise). If filename is not a base64 data URI, returns undefined.
        function tryParseAsDataURI(filename) {
          if (!isDataURI(filename)) {
            return;
          }

          return intArrayFromBase64(filename.slice(dataURIPrefix.length));
        }

        var asmLibraryArg = {
          __heap_base: ___heap_base,
          __indirect_function_table: wasmTable,
          __memory_base: ___memory_base,
          __stack_pointer: ___stack_pointer,
          __table_base: ___table_base,
          abort: _abort,
          clock_gettime: _clock_gettime,
          emscripten_memcpy_big: _emscripten_memcpy_big,
          emscripten_resize_heap: _emscripten_resize_heap,
          exit: _exit,
          fd_close: _fd_close,
          fd_seek: _fd_seek,
          fd_write: _fd_write,
          memory: wasmMemory,
          setTempRet0: _setTempRet0,
          tree_sitter_log_callback: _tree_sitter_log_callback,
          tree_sitter_parse_callback: _tree_sitter_parse_callback,
        };
        var asm = createWasm();
        /** @type {function(...*):?} */
        var ___wasm_call_ctors = (Module["___wasm_call_ctors"] =
          createExportWrapper("__wasm_call_ctors"));

        /** @type {function(...*):?} */
        var _ts_language_symbol_count = (Module["_ts_language_symbol_count"] =
          createExportWrapper("ts_language_symbol_count"));

        /** @type {function(...*):?} */
        var _ts_language_version = (Module["_ts_language_version"] =
          createExportWrapper("ts_language_version"));

        /** @type {function(...*):?} */
        var _ts_language_field_count = (Module["_ts_language_field_count"] =
          createExportWrapper("ts_language_field_count"));

        /** @type {function(...*):?} */
        var _ts_language_symbol_name = (Module["_ts_language_symbol_name"] =
          createExportWrapper("ts_language_symbol_name"));

        /** @type {function(...*):?} */
        var _ts_language_symbol_for_name = (Module[
          "_ts_language_symbol_for_name"
        ] = createExportWrapper("ts_language_symbol_for_name"));

        /** @type {function(...*):?} */
        var _ts_language_symbol_type = (Module["_ts_language_symbol_type"] =
          createExportWrapper("ts_language_symbol_type"));

        /** @type {function(...*):?} */
        var _ts_language_field_name_for_id = (Module[
          "_ts_language_field_name_for_id"
        ] = createExportWrapper("ts_language_field_name_for_id"));

        /** @type {function(...*):?} */
        var _memcpy = (Module["_memcpy"] = createExportWrapper("memcpy"));

        /** @type {function(...*):?} */
        var _free = (Module["_free"] = createExportWrapper("free"));

        /** @type {function(...*):?} */
        var _calloc = (Module["_calloc"] = createExportWrapper("calloc"));

        /** @type {function(...*):?} */
        var _ts_parser_delete = (Module["_ts_parser_delete"] =
          createExportWrapper("ts_parser_delete"));

        /** @type {function(...*):?} */
        var _ts_parser_set_language = (Module["_ts_parser_set_language"] =
          createExportWrapper("ts_parser_set_language"));

        /** @type {function(...*):?} */
        var _ts_parser_reset = (Module["_ts_parser_reset"] =
          createExportWrapper("ts_parser_reset"));

        /** @type {function(...*):?} */
        var _ts_parser_timeout_micros = (Module["_ts_parser_timeout_micros"] =
          createExportWrapper("ts_parser_timeout_micros"));

        /** @type {function(...*):?} */
        var _ts_parser_set_timeout_micros = (Module[
          "_ts_parser_set_timeout_micros"
        ] = createExportWrapper("ts_parser_set_timeout_micros"));

        /** @type {function(...*):?} */
        var _ts_query_new = (Module["_ts_query_new"] =
          createExportWrapper("ts_query_new"));

        /** @type {function(...*):?} */
        var _ts_query_delete = (Module["_ts_query_delete"] =
          createExportWrapper("ts_query_delete"));

        /** @type {function(...*):?} */
        var _malloc = (Module["_malloc"] = createExportWrapper("malloc"));

        /** @type {function(...*):?} */
        var _iswspace = (Module["_iswspace"] = createExportWrapper("iswspace"));

        /** @type {function(...*):?} */
        var _ts_query_pattern_count = (Module["_ts_query_pattern_count"] =
          createExportWrapper("ts_query_pattern_count"));

        /** @type {function(...*):?} */
        var _ts_query_capture_count = (Module["_ts_query_capture_count"] =
          createExportWrapper("ts_query_capture_count"));

        /** @type {function(...*):?} */
        var _ts_query_string_count = (Module["_ts_query_string_count"] =
          createExportWrapper("ts_query_string_count"));

        /** @type {function(...*):?} */
        var _ts_query_capture_name_for_id = (Module[
          "_ts_query_capture_name_for_id"
        ] = createExportWrapper("ts_query_capture_name_for_id"));

        /** @type {function(...*):?} */
        var _ts_query_string_value_for_id = (Module[
          "_ts_query_string_value_for_id"
        ] = createExportWrapper("ts_query_string_value_for_id"));

        /** @type {function(...*):?} */
        var _ts_query_predicates_for_pattern = (Module[
          "_ts_query_predicates_for_pattern"
        ] = createExportWrapper("ts_query_predicates_for_pattern"));

        /** @type {function(...*):?} */
        var _memmove = (Module["_memmove"] = createExportWrapper("memmove"));

        /** @type {function(...*):?} */
        var _memcmp = (Module["_memcmp"] = createExportWrapper("memcmp"));

        /** @type {function(...*):?} */
        var _ts_tree_copy = (Module["_ts_tree_copy"] =
          createExportWrapper("ts_tree_copy"));

        /** @type {function(...*):?} */
        var _ts_tree_delete = (Module["_ts_tree_delete"] =
          createExportWrapper("ts_tree_delete"));

        /** @type {function(...*):?} */
        var _iswalnum = (Module["_iswalnum"] = createExportWrapper("iswalnum"));

        /** @type {function(...*):?} */
        var _ts_init = (Module["_ts_init"] = createExportWrapper("ts_init"));

        /** @type {function(...*):?} */
        var _ts_parser_new_wasm = (Module["_ts_parser_new_wasm"] =
          createExportWrapper("ts_parser_new_wasm"));

        /** @type {function(...*):?} */
        var _ts_parser_enable_logger_wasm = (Module[
          "_ts_parser_enable_logger_wasm"
        ] = createExportWrapper("ts_parser_enable_logger_wasm"));

        /** @type {function(...*):?} */
        var _ts_parser_parse_wasm = (Module["_ts_parser_parse_wasm"] =
          createExportWrapper("ts_parser_parse_wasm"));

        /** @type {function(...*):?} */
        var _ts_language_type_is_named_wasm = (Module[
          "_ts_language_type_is_named_wasm"
        ] = createExportWrapper("ts_language_type_is_named_wasm"));

        /** @type {function(...*):?} */
        var _ts_language_type_is_visible_wasm = (Module[
          "_ts_language_type_is_visible_wasm"
        ] = createExportWrapper("ts_language_type_is_visible_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_root_node_wasm = (Module["_ts_tree_root_node_wasm"] =
          createExportWrapper("ts_tree_root_node_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_edit_wasm = (Module["_ts_tree_edit_wasm"] =
          createExportWrapper("ts_tree_edit_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_get_changed_ranges_wasm = (Module[
          "_ts_tree_get_changed_ranges_wasm"
        ] = createExportWrapper("ts_tree_get_changed_ranges_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_new_wasm = (Module["_ts_tree_cursor_new_wasm"] =
          createExportWrapper("ts_tree_cursor_new_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_delete_wasm = (Module[
          "_ts_tree_cursor_delete_wasm"
        ] = createExportWrapper("ts_tree_cursor_delete_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_reset_wasm = (Module["_ts_tree_cursor_reset_wasm"] =
          createExportWrapper("ts_tree_cursor_reset_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_goto_first_child_wasm = (Module[
          "_ts_tree_cursor_goto_first_child_wasm"
        ] = createExportWrapper("ts_tree_cursor_goto_first_child_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_goto_next_sibling_wasm = (Module[
          "_ts_tree_cursor_goto_next_sibling_wasm"
        ] = createExportWrapper("ts_tree_cursor_goto_next_sibling_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_goto_parent_wasm = (Module[
          "_ts_tree_cursor_goto_parent_wasm"
        ] = createExportWrapper("ts_tree_cursor_goto_parent_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_current_node_type_id_wasm = (Module[
          "_ts_tree_cursor_current_node_type_id_wasm"
        ] = createExportWrapper("ts_tree_cursor_current_node_type_id_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_current_node_is_named_wasm = (Module[
          "_ts_tree_cursor_current_node_is_named_wasm"
        ] = createExportWrapper("ts_tree_cursor_current_node_is_named_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_current_node_is_missing_wasm = (Module[
          "_ts_tree_cursor_current_node_is_missing_wasm"
        ] = createExportWrapper("ts_tree_cursor_current_node_is_missing_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_current_node_id_wasm = (Module[
          "_ts_tree_cursor_current_node_id_wasm"
        ] = createExportWrapper("ts_tree_cursor_current_node_id_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_start_position_wasm = (Module[
          "_ts_tree_cursor_start_position_wasm"
        ] = createExportWrapper("ts_tree_cursor_start_position_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_end_position_wasm = (Module[
          "_ts_tree_cursor_end_position_wasm"
        ] = createExportWrapper("ts_tree_cursor_end_position_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_start_index_wasm = (Module[
          "_ts_tree_cursor_start_index_wasm"
        ] = createExportWrapper("ts_tree_cursor_start_index_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_end_index_wasm = (Module[
          "_ts_tree_cursor_end_index_wasm"
        ] = createExportWrapper("ts_tree_cursor_end_index_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_current_field_id_wasm = (Module[
          "_ts_tree_cursor_current_field_id_wasm"
        ] = createExportWrapper("ts_tree_cursor_current_field_id_wasm"));

        /** @type {function(...*):?} */
        var _ts_tree_cursor_current_node_wasm = (Module[
          "_ts_tree_cursor_current_node_wasm"
        ] = createExportWrapper("ts_tree_cursor_current_node_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_symbol_wasm = (Module["_ts_node_symbol_wasm"] =
          createExportWrapper("ts_node_symbol_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_child_count_wasm = (Module["_ts_node_child_count_wasm"] =
          createExportWrapper("ts_node_child_count_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_named_child_count_wasm = (Module[
          "_ts_node_named_child_count_wasm"
        ] = createExportWrapper("ts_node_named_child_count_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_child_wasm = (Module["_ts_node_child_wasm"] =
          createExportWrapper("ts_node_child_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_named_child_wasm = (Module["_ts_node_named_child_wasm"] =
          createExportWrapper("ts_node_named_child_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_child_by_field_id_wasm = (Module[
          "_ts_node_child_by_field_id_wasm"
        ] = createExportWrapper("ts_node_child_by_field_id_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_next_sibling_wasm = (Module["_ts_node_next_sibling_wasm"] =
          createExportWrapper("ts_node_next_sibling_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_prev_sibling_wasm = (Module["_ts_node_prev_sibling_wasm"] =
          createExportWrapper("ts_node_prev_sibling_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_next_named_sibling_wasm = (Module[
          "_ts_node_next_named_sibling_wasm"
        ] = createExportWrapper("ts_node_next_named_sibling_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_prev_named_sibling_wasm = (Module[
          "_ts_node_prev_named_sibling_wasm"
        ] = createExportWrapper("ts_node_prev_named_sibling_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_parent_wasm = (Module["_ts_node_parent_wasm"] =
          createExportWrapper("ts_node_parent_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_descendant_for_index_wasm = (Module[
          "_ts_node_descendant_for_index_wasm"
        ] = createExportWrapper("ts_node_descendant_for_index_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_named_descendant_for_index_wasm = (Module[
          "_ts_node_named_descendant_for_index_wasm"
        ] = createExportWrapper("ts_node_named_descendant_for_index_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_descendant_for_position_wasm = (Module[
          "_ts_node_descendant_for_position_wasm"
        ] = createExportWrapper("ts_node_descendant_for_position_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_named_descendant_for_position_wasm = (Module[
          "_ts_node_named_descendant_for_position_wasm"
        ] = createExportWrapper("ts_node_named_descendant_for_position_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_start_point_wasm = (Module["_ts_node_start_point_wasm"] =
          createExportWrapper("ts_node_start_point_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_end_point_wasm = (Module["_ts_node_end_point_wasm"] =
          createExportWrapper("ts_node_end_point_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_start_index_wasm = (Module["_ts_node_start_index_wasm"] =
          createExportWrapper("ts_node_start_index_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_end_index_wasm = (Module["_ts_node_end_index_wasm"] =
          createExportWrapper("ts_node_end_index_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_to_string_wasm = (Module["_ts_node_to_string_wasm"] =
          createExportWrapper("ts_node_to_string_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_children_wasm = (Module["_ts_node_children_wasm"] =
          createExportWrapper("ts_node_children_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_named_children_wasm = (Module[
          "_ts_node_named_children_wasm"
        ] = createExportWrapper("ts_node_named_children_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_descendants_of_type_wasm = (Module[
          "_ts_node_descendants_of_type_wasm"
        ] = createExportWrapper("ts_node_descendants_of_type_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_is_named_wasm = (Module["_ts_node_is_named_wasm"] =
          createExportWrapper("ts_node_is_named_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_has_changes_wasm = (Module["_ts_node_has_changes_wasm"] =
          createExportWrapper("ts_node_has_changes_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_has_error_wasm = (Module["_ts_node_has_error_wasm"] =
          createExportWrapper("ts_node_has_error_wasm"));

        /** @type {function(...*):?} */
        var _ts_node_is_missing_wasm = (Module["_ts_node_is_missing_wasm"] =
          createExportWrapper("ts_node_is_missing_wasm"));

        /** @type {function(...*):?} */
        var _ts_query_matches_wasm = (Module["_ts_query_matches_wasm"] =
          createExportWrapper("ts_query_matches_wasm"));

        /** @type {function(...*):?} */
        var _ts_query_captures_wasm = (Module["_ts_query_captures_wasm"] =
          createExportWrapper("ts_query_captures_wasm"));

        /** @type {function(...*):?} */
        var ___errno_location = (Module["___errno_location"] =
          createExportWrapper("__errno_location"));

        /** @type {function(...*):?} */
        var _iswalpha = (Module["_iswalpha"] = createExportWrapper("iswalpha"));

        /** @type {function(...*):?} */
        var _towupper = (Module["_towupper"] = createExportWrapper("towupper"));

        /** @type {function(...*):?} */
        var _iswlower = (Module["_iswlower"] = createExportWrapper("iswlower"));

        /** @type {function(...*):?} */
        var _iswdigit = (Module["_iswdigit"] = createExportWrapper("iswdigit"));

        /** @type {function(...*):?} */
        var _memchr = (Module["_memchr"] = createExportWrapper("memchr"));

        /** @type {function(...*):?} */
        var _strlen = (Module["_strlen"] = createExportWrapper("strlen"));

        /** @type {function(...*):?} */
        var stackSave = (Module["stackSave"] =
          createExportWrapper("stackSave"));

        /** @type {function(...*):?} */
        var stackRestore = (Module["stackRestore"] =
          createExportWrapper("stackRestore"));

        /** @type {function(...*):?} */
        var stackAlloc = (Module["stackAlloc"] =
          createExportWrapper("stackAlloc"));

        /** @type {function(...*):?} */
        var _emscripten_stack_set_limits = (Module[
          "_emscripten_stack_set_limits"
        ] = function () {
          return (_emscripten_stack_set_limits = Module[
            "_emscripten_stack_set_limits"
          ] =
            Module["asm"]["emscripten_stack_set_limits"]).apply(
            null,
            arguments
          );
        });

        /** @type {function(...*):?} */
        var _emscripten_stack_get_free = (Module["_emscripten_stack_get_free"] =
          function () {
            return (_emscripten_stack_get_free = Module[
              "_emscripten_stack_get_free"
            ] =
              Module["asm"]["emscripten_stack_get_free"]).apply(
              null,
              arguments
            );
          });

        /** @type {function(...*):?} */
        var _emscripten_stack_get_end = (Module["_emscripten_stack_get_end"] =
          function () {
            return (_emscripten_stack_get_end = Module[
              "_emscripten_stack_get_end"
            ] =
              Module["asm"]["emscripten_stack_get_end"]).apply(null, arguments);
          });

        /** @type {function(...*):?} */
        var _setThrew = (Module["_setThrew"] = createExportWrapper("setThrew"));

        /** @type {function(...*):?} */
        var __Znwm = (Module["__Znwm"] = createExportWrapper("_Znwm"));

        /** @type {function(...*):?} */
        var __ZdlPv = (Module["__ZdlPv"] = createExportWrapper("_ZdlPv"));

        /** @type {function(...*):?} */
        var __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv =
          (Module[
            "__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv"
          ] = createExportWrapper(
            "_ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv"
          ));

        /** @type {function(...*):?} */
        var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev =
          (Module[
            "__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev"
          ] = createExportWrapper(
            "_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev"
          ));

        /** @type {function(...*):?} */
        var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm =
          (Module[
            "__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm"
          ] = createExportWrapper(
            "_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm"
          ));

        /** @type {function(...*):?} */
        var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm =
          (Module[
            "__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm"
          ] = createExportWrapper(
            "_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm"
          ));

        /** @type {function(...*):?} */
        var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm =
          (Module[
            "__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm"
          ] = createExportWrapper(
            "_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm"
          ));

        /** @type {function(...*):?} */
        var __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm =
          (Module[
            "__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm"
          ] = createExportWrapper(
            "_ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm"
          ));

        /** @type {function(...*):?} */
        var __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc =
          (Module[
            "__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc"
          ] = createExportWrapper(
            "_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc"
          ));

        /** @type {function(...*):?} */
        var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev =
          (Module[
            "__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev"
          ] = createExportWrapper(
            "_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev"
          ));

        /** @type {function(...*):?} */
        var __ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw =
          (Module[
            "__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw"
          ] = createExportWrapper(
            "_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw"
          ));

        /** @type {function(...*):?} */
        var dynCall_jiji = (Module["dynCall_jiji"] =
          createExportWrapper("dynCall_jiji"));

        /** @type {function(...*):?} */
        var _orig$ts_parser_timeout_micros = (Module[
          "_orig$ts_parser_timeout_micros"
        ] = createExportWrapper("orig$ts_parser_timeout_micros"));

        /** @type {function(...*):?} */
        var _orig$ts_parser_set_timeout_micros = (Module[
          "_orig$ts_parser_set_timeout_micros"
        ] = createExportWrapper("orig$ts_parser_set_timeout_micros"));

        var _stderr = (Module["_stderr"] = 7088);
        var _TRANSFER_BUFFER = (Module["_TRANSFER_BUFFER"] = 7472);
        var ___THREW__ = (Module["___THREW__"] = 8116);
        var ___threwValue = (Module["___threwValue"] = 8120);
        var ___cxa_new_handler = (Module["___cxa_new_handler"] = 8112);
        var ___data_end = (Module["___data_end"] = 8124);

        // === Auto-generated postamble setup entry stuff ===

        if (!Object.getOwnPropertyDescriptor(Module, "intArrayFromString"))
          Module["intArrayFromString"] = function () {
            abort(
              "'intArrayFromString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "intArrayToString"))
          Module["intArrayToString"] = function () {
            abort(
              "'intArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "ccall"))
          Module["ccall"] = function () {
            abort(
              "'ccall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "cwrap"))
          Module["cwrap"] = function () {
            abort(
              "'cwrap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "setValue"))
          Module["setValue"] = function () {
            abort(
              "'setValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getValue"))
          Module["getValue"] = function () {
            abort(
              "'getValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        Module["allocate"] = allocate;
        if (!Object.getOwnPropertyDescriptor(Module, "UTF8ArrayToString"))
          Module["UTF8ArrayToString"] = function () {
            abort(
              "'UTF8ArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "UTF8ToString"))
          Module["UTF8ToString"] = function () {
            abort(
              "'UTF8ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8Array"))
          Module["stringToUTF8Array"] = function () {
            abort(
              "'stringToUTF8Array' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8"))
          Module["stringToUTF8"] = function () {
            abort(
              "'stringToUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF8"))
          Module["lengthBytesUTF8"] = function () {
            abort(
              "'lengthBytesUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stackTrace"))
          Module["stackTrace"] = function () {
            abort(
              "'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "addOnPreRun"))
          Module["addOnPreRun"] = function () {
            abort(
              "'addOnPreRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "addOnInit"))
          Module["addOnInit"] = function () {
            abort(
              "'addOnInit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "addOnPreMain"))
          Module["addOnPreMain"] = function () {
            abort(
              "'addOnPreMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "addOnExit"))
          Module["addOnExit"] = function () {
            abort(
              "'addOnExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "addOnPostRun"))
          Module["addOnPostRun"] = function () {
            abort(
              "'addOnPostRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeStringToMemory"))
          Module["writeStringToMemory"] = function () {
            abort(
              "'writeStringToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeArrayToMemory"))
          Module["writeArrayToMemory"] = function () {
            abort(
              "'writeArrayToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeAsciiToMemory"))
          Module["writeAsciiToMemory"] = function () {
            abort(
              "'writeAsciiToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "addRunDependency"))
          Module["addRunDependency"] = function () {
            abort(
              "'addRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "removeRunDependency"))
          Module["removeRunDependency"] = function () {
            abort(
              "'removeRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "FS_createFolder"))
          Module["FS_createFolder"] = function () {
            abort(
              "'FS_createFolder' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "FS_createPath"))
          Module["FS_createPath"] = function () {
            abort(
              "'FS_createPath' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "FS_createDataFile"))
          Module["FS_createDataFile"] = function () {
            abort(
              "'FS_createDataFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "FS_createPreloadedFile"))
          Module["FS_createPreloadedFile"] = function () {
            abort(
              "'FS_createPreloadedFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "FS_createLazyFile"))
          Module["FS_createLazyFile"] = function () {
            abort(
              "'FS_createLazyFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "FS_createLink"))
          Module["FS_createLink"] = function () {
            abort(
              "'FS_createLink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "FS_createDevice"))
          Module["FS_createDevice"] = function () {
            abort(
              "'FS_createDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "FS_unlink"))
          Module["FS_unlink"] = function () {
            abort(
              "'FS_unlink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getLEB"))
          Module["getLEB"] = function () {
            abort(
              "'getLEB' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getFunctionTables"))
          Module["getFunctionTables"] = function () {
            abort(
              "'getFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "alignFunctionTables"))
          Module["alignFunctionTables"] = function () {
            abort(
              "'alignFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "registerFunctions"))
          Module["registerFunctions"] = function () {
            abort(
              "'registerFunctions' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "addFunction"))
          Module["addFunction"] = function () {
            abort(
              "'addFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "removeFunction"))
          Module["removeFunction"] = function () {
            abort(
              "'removeFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper"))
          Module["getFuncWrapper"] = function () {
            abort(
              "'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "prettyPrint"))
          Module["prettyPrint"] = function () {
            abort(
              "'prettyPrint' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "dynCall"))
          Module["dynCall"] = function () {
            abort(
              "'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getCompilerSetting"))
          Module["getCompilerSetting"] = function () {
            abort(
              "'getCompilerSetting' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "print"))
          Module["print"] = function () {
            abort(
              "'print' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "printErr"))
          Module["printErr"] = function () {
            abort(
              "'printErr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getTempRet0"))
          Module["getTempRet0"] = function () {
            abort(
              "'getTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "setTempRet0"))
          Module["setTempRet0"] = function () {
            abort(
              "'setTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "callMain"))
          Module["callMain"] = function () {
            abort(
              "'callMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "abort"))
          Module["abort"] = function () {
            abort(
              "'abort' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stringToNewUTF8"))
          Module["stringToNewUTF8"] = function () {
            abort(
              "'stringToNewUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "setFileTime"))
          Module["setFileTime"] = function () {
            abort(
              "'setFileTime' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "emscripten_realloc_buffer")
        )
          Module["emscripten_realloc_buffer"] = function () {
            abort(
              "'emscripten_realloc_buffer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "ENV"))
          Module["ENV"] = function () {
            abort(
              "'ENV' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_CODES"))
          Module["ERRNO_CODES"] = function () {
            abort(
              "'ERRNO_CODES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_MESSAGES"))
          Module["ERRNO_MESSAGES"] = function () {
            abort(
              "'ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "setErrNo"))
          Module["setErrNo"] = function () {
            abort(
              "'setErrNo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "inetPton4"))
          Module["inetPton4"] = function () {
            abort(
              "'inetPton4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "inetNtop4"))
          Module["inetNtop4"] = function () {
            abort(
              "'inetNtop4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "inetPton6"))
          Module["inetPton6"] = function () {
            abort(
              "'inetPton6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "inetNtop6"))
          Module["inetNtop6"] = function () {
            abort(
              "'inetNtop6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "readSockaddr"))
          Module["readSockaddr"] = function () {
            abort(
              "'readSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeSockaddr"))
          Module["writeSockaddr"] = function () {
            abort(
              "'writeSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "DNS"))
          Module["DNS"] = function () {
            abort(
              "'DNS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getHostByName"))
          Module["getHostByName"] = function () {
            abort(
              "'getHostByName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "GAI_ERRNO_MESSAGES"))
          Module["GAI_ERRNO_MESSAGES"] = function () {
            abort(
              "'GAI_ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "Protocols"))
          Module["Protocols"] = function () {
            abort(
              "'Protocols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "Sockets"))
          Module["Sockets"] = function () {
            abort(
              "'Sockets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getRandomDevice"))
          Module["getRandomDevice"] = function () {
            abort(
              "'getRandomDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "traverseStack"))
          Module["traverseStack"] = function () {
            abort(
              "'traverseStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "UNWIND_CACHE"))
          Module["UNWIND_CACHE"] = function () {
            abort(
              "'UNWIND_CACHE' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "withBuiltinMalloc"))
          Module["withBuiltinMalloc"] = function () {
            abort(
              "'withBuiltinMalloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgsArray"))
          Module["readAsmConstArgsArray"] = function () {
            abort(
              "'readAsmConstArgsArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgs"))
          Module["readAsmConstArgs"] = function () {
            abort(
              "'readAsmConstArgs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "mainThreadEM_ASM"))
          Module["mainThreadEM_ASM"] = function () {
            abort(
              "'mainThreadEM_ASM' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "jstoi_q"))
          Module["jstoi_q"] = function () {
            abort(
              "'jstoi_q' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "jstoi_s"))
          Module["jstoi_s"] = function () {
            abort(
              "'jstoi_s' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getExecutableName"))
          Module["getExecutableName"] = function () {
            abort(
              "'getExecutableName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "listenOnce"))
          Module["listenOnce"] = function () {
            abort(
              "'listenOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "autoResumeAudioContext"))
          Module["autoResumeAudioContext"] = function () {
            abort(
              "'autoResumeAudioContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "dynCallLegacy"))
          Module["dynCallLegacy"] = function () {
            abort(
              "'dynCallLegacy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getDynCaller"))
          Module["getDynCaller"] = function () {
            abort(
              "'getDynCaller' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "dynCall"))
          Module["dynCall"] = function () {
            abort(
              "'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "callRuntimeCallbacks"))
          Module["callRuntimeCallbacks"] = function () {
            abort(
              "'callRuntimeCallbacks' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "runtimeKeepaliveCounter"))
          Module["runtimeKeepaliveCounter"] = function () {
            abort(
              "'runtimeKeepaliveCounter' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "keepRuntimeAlive"))
          Module["keepRuntimeAlive"] = function () {
            abort(
              "'keepRuntimeAlive' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "runtimeKeepalivePush"))
          Module["runtimeKeepalivePush"] = function () {
            abort(
              "'runtimeKeepalivePush' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "runtimeKeepalivePop"))
          Module["runtimeKeepalivePop"] = function () {
            abort(
              "'runtimeKeepalivePop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "callUserCallback"))
          Module["callUserCallback"] = function () {
            abort(
              "'callUserCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "maybeExit"))
          Module["maybeExit"] = function () {
            abort(
              "'maybeExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "asmjsMangle"))
          Module["asmjsMangle"] = function () {
            abort(
              "'asmjsMangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "reallyNegative"))
          Module["reallyNegative"] = function () {
            abort(
              "'reallyNegative' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "unSign"))
          Module["unSign"] = function () {
            abort(
              "'unSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "reSign"))
          Module["reSign"] = function () {
            abort(
              "'reSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "formatString"))
          Module["formatString"] = function () {
            abort(
              "'formatString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "PATH"))
          Module["PATH"] = function () {
            abort(
              "'PATH' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "PATH_FS"))
          Module["PATH_FS"] = function () {
            abort(
              "'PATH_FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "SYSCALLS"))
          Module["SYSCALLS"] = function () {
            abort(
              "'SYSCALLS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "syscallMmap2"))
          Module["syscallMmap2"] = function () {
            abort(
              "'syscallMmap2' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "syscallMunmap"))
          Module["syscallMunmap"] = function () {
            abort(
              "'syscallMunmap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getSocketFromFD"))
          Module["getSocketFromFD"] = function () {
            abort(
              "'getSocketFromFD' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getSocketAddress"))
          Module["getSocketAddress"] = function () {
            abort(
              "'getSocketAddress' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "JSEvents"))
          Module["JSEvents"] = function () {
            abort(
              "'JSEvents' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "registerKeyEventCallback")
        )
          Module["registerKeyEventCallback"] = function () {
            abort(
              "'registerKeyEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "specialHTMLTargets"))
          Module["specialHTMLTargets"] = function () {
            abort(
              "'specialHTMLTargets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "maybeCStringToJsString"))
          Module["maybeCStringToJsString"] = function () {
            abort(
              "'maybeCStringToJsString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "findEventTarget"))
          Module["findEventTarget"] = function () {
            abort(
              "'findEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "findCanvasEventTarget"))
          Module["findCanvasEventTarget"] = function () {
            abort(
              "'findCanvasEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getBoundingClientRect"))
          Module["getBoundingClientRect"] = function () {
            abort(
              "'getBoundingClientRect' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "fillMouseEventData"))
          Module["fillMouseEventData"] = function () {
            abort(
              "'fillMouseEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "registerMouseEventCallback")
        )
          Module["registerMouseEventCallback"] = function () {
            abort(
              "'registerMouseEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "registerWheelEventCallback")
        )
          Module["registerWheelEventCallback"] = function () {
            abort(
              "'registerWheelEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "registerUiEventCallback"))
          Module["registerUiEventCallback"] = function () {
            abort(
              "'registerUiEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "registerFocusEventCallback")
        )
          Module["registerFocusEventCallback"] = function () {
            abort(
              "'registerFocusEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "fillDeviceOrientationEventData"
          )
        )
          Module["fillDeviceOrientationEventData"] = function () {
            abort(
              "'fillDeviceOrientationEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerDeviceOrientationEventCallback"
          )
        )
          Module["registerDeviceOrientationEventCallback"] = function () {
            abort(
              "'registerDeviceOrientationEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "fillDeviceMotionEventData")
        )
          Module["fillDeviceMotionEventData"] = function () {
            abort(
              "'fillDeviceMotionEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerDeviceMotionEventCallback"
          )
        )
          Module["registerDeviceMotionEventCallback"] = function () {
            abort(
              "'registerDeviceMotionEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "screenOrientation"))
          Module["screenOrientation"] = function () {
            abort(
              "'screenOrientation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "fillOrientationChangeEventData"
          )
        )
          Module["fillOrientationChangeEventData"] = function () {
            abort(
              "'fillOrientationChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerOrientationChangeEventCallback"
          )
        )
          Module["registerOrientationChangeEventCallback"] = function () {
            abort(
              "'registerOrientationChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "fillFullscreenChangeEventData"
          )
        )
          Module["fillFullscreenChangeEventData"] = function () {
            abort(
              "'fillFullscreenChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerFullscreenChangeEventCallback"
          )
        )
          Module["registerFullscreenChangeEventCallback"] = function () {
            abort(
              "'registerFullscreenChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "registerRestoreOldStyle"))
          Module["registerRestoreOldStyle"] = function () {
            abort(
              "'registerRestoreOldStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "hideEverythingExceptGivenElement"
          )
        )
          Module["hideEverythingExceptGivenElement"] = function () {
            abort(
              "'hideEverythingExceptGivenElement' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "restoreHiddenElements"))
          Module["restoreHiddenElements"] = function () {
            abort(
              "'restoreHiddenElements' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "setLetterbox"))
          Module["setLetterbox"] = function () {
            abort(
              "'setLetterbox' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "currentFullscreenStrategy")
        )
          Module["currentFullscreenStrategy"] = function () {
            abort(
              "'currentFullscreenStrategy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "restoreOldWindowedStyle"))
          Module["restoreOldWindowedStyle"] = function () {
            abort(
              "'restoreOldWindowedStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "softFullscreenResizeWebGLRenderTarget"
          )
        )
          Module["softFullscreenResizeWebGLRenderTarget"] = function () {
            abort(
              "'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "doRequestFullscreen"))
          Module["doRequestFullscreen"] = function () {
            abort(
              "'doRequestFullscreen' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "fillPointerlockChangeEventData"
          )
        )
          Module["fillPointerlockChangeEventData"] = function () {
            abort(
              "'fillPointerlockChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerPointerlockChangeEventCallback"
          )
        )
          Module["registerPointerlockChangeEventCallback"] = function () {
            abort(
              "'registerPointerlockChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerPointerlockErrorEventCallback"
          )
        )
          Module["registerPointerlockErrorEventCallback"] = function () {
            abort(
              "'registerPointerlockErrorEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "requestPointerLock"))
          Module["requestPointerLock"] = function () {
            abort(
              "'requestPointerLock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "fillVisibilityChangeEventData"
          )
        )
          Module["fillVisibilityChangeEventData"] = function () {
            abort(
              "'fillVisibilityChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerVisibilityChangeEventCallback"
          )
        )
          Module["registerVisibilityChangeEventCallback"] = function () {
            abort(
              "'registerVisibilityChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "registerTouchEventCallback")
        )
          Module["registerTouchEventCallback"] = function () {
            abort(
              "'registerTouchEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "fillGamepadEventData"))
          Module["fillGamepadEventData"] = function () {
            abort(
              "'fillGamepadEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerGamepadEventCallback"
          )
        )
          Module["registerGamepadEventCallback"] = function () {
            abort(
              "'registerGamepadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerBeforeUnloadEventCallback"
          )
        )
          Module["registerBeforeUnloadEventCallback"] = function () {
            abort(
              "'registerBeforeUnloadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "fillBatteryEventData"))
          Module["fillBatteryEventData"] = function () {
            abort(
              "'fillBatteryEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "battery"))
          Module["battery"] = function () {
            abort(
              "'battery' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "registerBatteryEventCallback"
          )
        )
          Module["registerBatteryEventCallback"] = function () {
            abort(
              "'registerBatteryEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "setCanvasElementSize"))
          Module["setCanvasElementSize"] = function () {
            abort(
              "'setCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getCanvasElementSize"))
          Module["getCanvasElementSize"] = function () {
            abort(
              "'getCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "polyfillSetImmediate"))
          Module["polyfillSetImmediate"] = function () {
            abort(
              "'polyfillSetImmediate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "demangle"))
          Module["demangle"] = function () {
            abort(
              "'demangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "demangleAll"))
          Module["demangleAll"] = function () {
            abort(
              "'demangleAll' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "jsStackTrace"))
          Module["jsStackTrace"] = function () {
            abort(
              "'jsStackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stackTrace"))
          Module["stackTrace"] = function () {
            abort(
              "'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getEnvStrings"))
          Module["getEnvStrings"] = function () {
            abort(
              "'getEnvStrings' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "checkWasiClock"))
          Module["checkWasiClock"] = function () {
            abort(
              "'checkWasiClock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64"))
          Module["writeI53ToI64"] = function () {
            abort(
              "'writeI53ToI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Clamped"))
          Module["writeI53ToI64Clamped"] = function () {
            abort(
              "'writeI53ToI64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Signaling"))
          Module["writeI53ToI64Signaling"] = function () {
            abort(
              "'writeI53ToI64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Clamped"))
          Module["writeI53ToU64Clamped"] = function () {
            abort(
              "'writeI53ToU64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Signaling"))
          Module["writeI53ToU64Signaling"] = function () {
            abort(
              "'writeI53ToU64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "readI53FromI64"))
          Module["readI53FromI64"] = function () {
            abort(
              "'readI53FromI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "readI53FromU64"))
          Module["readI53FromU64"] = function () {
            abort(
              "'readI53FromU64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "convertI32PairToI53"))
          Module["convertI32PairToI53"] = function () {
            abort(
              "'convertI32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "convertU32PairToI53"))
          Module["convertU32PairToI53"] = function () {
            abort(
              "'convertU32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "resolveGlobalSymbol"))
          Module["resolveGlobalSymbol"] = function () {
            abort(
              "'resolveGlobalSymbol' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "GOT"))
          Module["GOT"] = function () {
            abort(
              "'GOT' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "GOTHandler"))
          Module["GOTHandler"] = function () {
            abort(
              "'GOTHandler' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "isInternalSym"))
          Module["isInternalSym"] = function () {
            abort(
              "'isInternalSym' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "updateGOT"))
          Module["updateGOT"] = function () {
            abort(
              "'updateGOT' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "relocateExports"))
          Module["relocateExports"] = function () {
            abort(
              "'relocateExports' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "reportUndefinedSymbols"))
          Module["reportUndefinedSymbols"] = function () {
            abort(
              "'reportUndefinedSymbols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "DLFCN"))
          Module["DLFCN"] = function () {
            abort(
              "'DLFCN' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "LDSO"))
          Module["LDSO"] = function () {
            abort(
              "'LDSO' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "createInvokeFunction"))
          Module["createInvokeFunction"] = function () {
            abort(
              "'createInvokeFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getMemory"))
          Module["getMemory"] = function () {
            abort(
              "'getMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "fetchBinary"))
          Module["fetchBinary"] = function () {
            abort(
              "'fetchBinary' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getDylinkMetadata"))
          Module["getDylinkMetadata"] = function () {
            abort(
              "'getDylinkMetadata' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "mergeLibSymbols"))
          Module["mergeLibSymbols"] = function () {
            abort(
              "'mergeLibSymbols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "loadWebAssemblyModule"))
          Module["loadWebAssemblyModule"] = function () {
            abort(
              "'loadWebAssemblyModule' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "loadDynamicLibrary"))
          Module["loadDynamicLibrary"] = function () {
            abort(
              "'loadDynamicLibrary' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "preloadDylibs"))
          Module["preloadDylibs"] = function () {
            abort(
              "'preloadDylibs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "uncaughtExceptionCount"))
          Module["uncaughtExceptionCount"] = function () {
            abort(
              "'uncaughtExceptionCount' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "exceptionLast"))
          Module["exceptionLast"] = function () {
            abort(
              "'exceptionLast' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "exceptionCaught"))
          Module["exceptionCaught"] = function () {
            abort(
              "'exceptionCaught' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "ExceptionInfoAttrs"))
          Module["ExceptionInfoAttrs"] = function () {
            abort(
              "'ExceptionInfoAttrs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "ExceptionInfo"))
          Module["ExceptionInfo"] = function () {
            abort(
              "'ExceptionInfo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "CatchInfo"))
          Module["CatchInfo"] = function () {
            abort(
              "'CatchInfo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "exception_addRef"))
          Module["exception_addRef"] = function () {
            abort(
              "'exception_addRef' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "exception_decRef"))
          Module["exception_decRef"] = function () {
            abort(
              "'exception_decRef' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "Browser"))
          Module["Browser"] = function () {
            abort(
              "'Browser' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "funcWrappers"))
          Module["funcWrappers"] = function () {
            abort(
              "'funcWrappers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper"))
          Module["getFuncWrapper"] = function () {
            abort(
              "'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "setMainLoop"))
          Module["setMainLoop"] = function () {
            abort(
              "'setMainLoop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "tempFixedLengthArray"))
          Module["tempFixedLengthArray"] = function () {
            abort(
              "'tempFixedLengthArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "miniTempWebGLFloatBuffers")
        )
          Module["miniTempWebGLFloatBuffers"] = function () {
            abort(
              "'miniTempWebGLFloatBuffers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "heapObjectForWebGLType"))
          Module["heapObjectForWebGLType"] = function () {
            abort(
              "'heapObjectForWebGLType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "heapAccessShiftForWebGLHeap"
          )
        )
          Module["heapAccessShiftForWebGLHeap"] = function () {
            abort(
              "'heapAccessShiftForWebGLHeap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "GL"))
          Module["GL"] = function () {
            abort(
              "'GL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGet"))
          Module["emscriptenWebGLGet"] = function () {
            abort(
              "'emscriptenWebGLGet' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "computeUnpackAlignedImageSize"
          )
        )
          Module["computeUnpackAlignedImageSize"] = function () {
            abort(
              "'computeUnpackAlignedImageSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "emscriptenWebGLGetTexPixelData"
          )
        )
          Module["emscriptenWebGLGetTexPixelData"] = function () {
            abort(
              "'emscriptenWebGLGetTexPixelData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetUniform")
        )
          Module["emscriptenWebGLGetUniform"] = function () {
            abort(
              "'emscriptenWebGLGetUniform' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "webglGetUniformLocation"))
          Module["webglGetUniformLocation"] = function () {
            abort(
              "'webglGetUniformLocation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "webglPrepareUniformLocationsBeforeFirstUse"
          )
        )
          Module["webglPrepareUniformLocationsBeforeFirstUse"] = function () {
            abort(
              "'webglPrepareUniformLocationsBeforeFirstUse' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "webglGetLeftBracePos"))
          Module["webglGetLeftBracePos"] = function () {
            abort(
              "'webglGetLeftBracePos' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (
          !Object.getOwnPropertyDescriptor(
            Module,
            "emscriptenWebGLGetVertexAttrib"
          )
        )
          Module["emscriptenWebGLGetVertexAttrib"] = function () {
            abort(
              "'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "writeGLArray"))
          Module["writeGLArray"] = function () {
            abort(
              "'writeGLArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "AL"))
          Module["AL"] = function () {
            abort(
              "'AL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "SDL_unicode"))
          Module["SDL_unicode"] = function () {
            abort(
              "'SDL_unicode' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "SDL_ttfContext"))
          Module["SDL_ttfContext"] = function () {
            abort(
              "'SDL_ttfContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "SDL_audio"))
          Module["SDL_audio"] = function () {
            abort(
              "'SDL_audio' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "SDL"))
          Module["SDL"] = function () {
            abort(
              "'SDL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "SDL_gfx"))
          Module["SDL_gfx"] = function () {
            abort(
              "'SDL_gfx' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "GLUT"))
          Module["GLUT"] = function () {
            abort(
              "'GLUT' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "EGL"))
          Module["EGL"] = function () {
            abort(
              "'EGL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "GLFW_Window"))
          Module["GLFW_Window"] = function () {
            abort(
              "'GLFW_Window' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "GLFW"))
          Module["GLFW"] = function () {
            abort(
              "'GLFW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "GLEW"))
          Module["GLEW"] = function () {
            abort(
              "'GLEW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "IDBStore"))
          Module["IDBStore"] = function () {
            abort(
              "'IDBStore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "runAndAbortIfError"))
          Module["runAndAbortIfError"] = function () {
            abort(
              "'runAndAbortIfError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "warnOnce"))
          Module["warnOnce"] = function () {
            abort(
              "'warnOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stackSave"))
          Module["stackSave"] = function () {
            abort(
              "'stackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stackRestore"))
          Module["stackRestore"] = function () {
            abort(
              "'stackRestore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stackAlloc"))
          Module["stackAlloc"] = function () {
            abort(
              "'stackAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "AsciiToString"))
          Module["AsciiToString"] = function () {
            abort(
              "'AsciiToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stringToAscii"))
          Module["stringToAscii"] = function () {
            abort(
              "'stringToAscii' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "UTF16ToString"))
          Module["UTF16ToString"] = function () {
            abort(
              "'UTF16ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF16"))
          Module["stringToUTF16"] = function () {
            abort(
              "'stringToUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF16"))
          Module["lengthBytesUTF16"] = function () {
            abort(
              "'lengthBytesUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "UTF32ToString"))
          Module["UTF32ToString"] = function () {
            abort(
              "'UTF32ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF32"))
          Module["stringToUTF32"] = function () {
            abort(
              "'stringToUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF32"))
          Module["lengthBytesUTF32"] = function () {
            abort(
              "'lengthBytesUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8"))
          Module["allocateUTF8"] = function () {
            abort(
              "'allocateUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8OnStack"))
          Module["allocateUTF8OnStack"] = function () {
            abort(
              "'allocateUTF8OnStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        Module["writeStackCookie"] = writeStackCookie;
        Module["checkStackCookie"] = checkStackCookie;
        if (!Object.getOwnPropertyDescriptor(Module, "intArrayFromBase64"))
          Module["intArrayFromBase64"] = function () {
            abort(
              "'intArrayFromBase64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "tryParseAsDataURI"))
          Module["tryParseAsDataURI"] = function () {
            abort(
              "'tryParseAsDataURI' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
            );
          };
        if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_NORMAL"))
          Object.defineProperty(Module, "ALLOC_NORMAL", {
            configurable: true,
            get: function () {
              abort(
                "'ALLOC_NORMAL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
              );
            },
          });
        if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_STACK"))
          Object.defineProperty(Module, "ALLOC_STACK", {
            configurable: true,
            get: function () {
              abort(
                "'ALLOC_STACK' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"
              );
            },
          });

        var calledRun;

        /**
         * @constructor
         * @this {ExitStatus}
         */
        function ExitStatus(status) {
          this.name = "ExitStatus";
          this.message = "Program terminated with exit(" + status + ")";
          this.status = status;
        }

        var calledMain = false;

        dependenciesFulfilled = function runCaller() {
          // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
          if (!calledRun) run();
          if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
        };

        function callMain(args) {
          assert(
            runDependencies == 0,
            'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'
          );
          assert(
            __ATPRERUN__.length == 0,
            "cannot call main when preRun functions remain to be called"
          );

          var entryFunction = Module["_main"];

          // Main modules can't tell if they have main() at compile time, since it may
          // arrive from a dynamic library.
          if (!entryFunction) return;

          args = args || [];

          var argc = args.length + 1;
          var argv = stackAlloc((argc + 1) * 4);
          HEAP32[argv >> 2] = allocateUTF8OnStack(thisProgram);
          for (var i = 1; i < argc; i++) {
            HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]);
          }
          HEAP32[(argv >> 2) + argc] = 0;

          try {
            var ret = entryFunction(argc, argv);

            // In PROXY_TO_PTHREAD builds, we should never exit the runtime below, as
            // execution is asynchronously handed off to a pthread.
            // if we're not running an evented main loop, it's time to exit
            exit(ret, /* implicit = */ true);
          } catch (e) {
            if (e instanceof ExitStatus) {
              // exit() throws this once it's done to make sure execution
              // has been stopped completely
              return;
            } else if (e == "unwind") {
              // running an evented main loop, don't immediately exit
              return;
            } else {
              var toLog = e;
              if (e && typeof e === "object" && e.stack) {
                toLog = [e, e.stack];
              }
              err("exception thrown: " + toLog);
              quit_(1, e);
            }
          } finally {
            calledMain = true;
          }
        }

        function stackCheckInit() {
          // This is normally called automatically during __wasm_call_ctors but need to
          // get these values before even running any of the ctors so we call it redundantly
          // here.
          // TODO(sbc): Move writeStackCookie to native to to avoid this.
          _emscripten_stack_set_limits(5251008, 8128);
          writeStackCookie();
        }

        var dylibsLoaded = false;

        /** @type {function(Array=)} */
        function run(args) {
          args = args || arguments_;

          if (runDependencies > 0) {
            return;
          }

          stackCheckInit();

          if (!dylibsLoaded) {
            // Loading of dynamic libraries needs to happen on each thread, so we can't
            // use the normal __ATPRERUN__ mechanism.
            preloadDylibs();
            dylibsLoaded = true;

            // Loading dylibs can add run dependencies.
            if (runDependencies > 0) {
              return;
            }
          }

          preRun();

          // a preRun added a dependency, run will be called later
          if (runDependencies > 0) {
            return;
          }

          function doRun() {
            // run may have just been called through dependencies being fulfilled just in this very frame,
            // or while the async setStatus time below was happening
            if (calledRun) return;
            calledRun = true;
            Module["calledRun"] = true;

            if (ABORT) return;

            initRuntime();

            preMain();

            if (Module["onRuntimeInitialized"])
              Module["onRuntimeInitialized"]();

            if (shouldRunNow) callMain(args);

            postRun();
          }

          if (Module["setStatus"]) {
            Module["setStatus"]("Running...");
            setTimeout(function () {
              setTimeout(function () {
                Module["setStatus"]("");
              }, 1);
              doRun();
            }, 1);
          } else {
            doRun();
          }
          checkStackCookie();
        }
        Module["run"] = run;

        function checkUnflushedContent() {
          // Compiler settings do not allow exiting the runtime, so flushing
          // the streams is not possible. but in ASSERTIONS mode we check
          // if there was something to flush, and if so tell the user they
          // should request that the runtime be exitable.
          // Normally we would not even include flush() at all, but in ASSERTIONS
          // builds we do so just for this check, and here we see if there is any
          // content to flush, that is, we check if there would have been
          // something a non-ASSERTIONS build would have not seen.
          // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0
          // mode (which has its own special function for this; otherwise, all
          // the code is inside libc)
          var oldOut = out;
          var oldErr = err;
          var has = false;
          out = err = function (x) {
            has = true;
          };
          try {
            // it doesn't matter if it fails
            var flush = Module["_fflush"];
            if (flush) flush(0);
          } catch (e) {}
          out = oldOut;
          err = oldErr;
          if (has) {
            warnOnce(
              "stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc."
            );
            warnOnce(
              "(this may also be due to not including full filesystem support - try building with -s FORCE_FILESYSTEM=1)"
            );
          }
        }

        /** @param {boolean|number=} implicit */
        function exit(status, implicit) {
          EXITSTATUS = status;

          checkUnflushedContent();

          // if this is just main exit-ing implicitly, and the status is 0, then we
          // don't need to do anything here and can just leave. if the status is
          // non-zero, though, then we need to report it.
          // (we may have warned about this earlier, if a situation justifies doing so)
          if (implicit && keepRuntimeAlive() && status === 0) {
            return;
          }

          if (keepRuntimeAlive()) {
            // if exit() was called, we may warn the user if the runtime isn't actually being shut down
            if (!implicit) {
              var msg =
                "program exited (with status: " +
                status +
                "), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)";
              err(msg);
            }
          } else {
            exitRuntime();

            if (Module["onExit"]) Module["onExit"](status);

            ABORT = true;
          }

          quit_(status, new ExitStatus(status));
        }

        if (Module["preInit"]) {
          if (typeof Module["preInit"] == "function")
            Module["preInit"] = [Module["preInit"]];
          while (Module["preInit"].length > 0) {
            Module["preInit"].pop()();
          }
        }

        // shouldRunNow refers to calling main(), not run().
        var shouldRunNow = true;

        if (Module["noInitialRun"]) shouldRunNow = false;

        run();

        const C = Module;
        const INTERNAL = {};
        const SIZE_OF_INT = 4;
        const SIZE_OF_NODE = 5 * SIZE_OF_INT;
        const SIZE_OF_POINT = 2 * SIZE_OF_INT;
        const SIZE_OF_RANGE = 2 * SIZE_OF_INT + 2 * SIZE_OF_POINT;
        const ZERO_POINT = { row: 0, column: 0 };
        const QUERY_WORD_REGEX = /[\w-.]*/g;

        const PREDICATE_STEP_TYPE_CAPTURE = 1;
        const PREDICATE_STEP_TYPE_STRING = 2;

        const LANGUAGE_FUNCTION_REGEX = /^_?tree_sitter_\w+/;

        var VERSION;
        var MIN_COMPATIBLE_VERSION;
        var TRANSFER_BUFFER;
        var currentParseCallback;
        var currentLogCallback;

        class ParserImpl {
          static init() {
            TRANSFER_BUFFER = C._ts_init();
            VERSION = getValue(TRANSFER_BUFFER, "i32");
            MIN_COMPATIBLE_VERSION = getValue(
              TRANSFER_BUFFER + SIZE_OF_INT,
              "i32"
            );
          }

          initialize() {
            C._ts_parser_new_wasm();
            this[0] = getValue(TRANSFER_BUFFER, "i32");
            this[1] = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32");
          }

          delete() {
            C._ts_parser_delete(this[0]);
            C._free(this[1]);
            this[0] = 0;
            this[1] = 0;
          }

          setLanguage(language) {
            let address;
            if (!language) {
              address = 0;
              language = null;
            } else if (language.constructor === Language) {
              address = language[0];
              const version = C._ts_language_version(address);
              if (version < MIN_COMPATIBLE_VERSION || VERSION < version) {
                throw new Error(
                  `Incompatible language version ${version}. ` +
                    `Compatibility range ${MIN_COMPATIBLE_VERSION} through ${VERSION}.`
                );
              }
            } else {
              throw new Error("Argument must be a Language");
            }
            this.language = language;
            C._ts_parser_set_language(this[0], address);
            return this;
          }

          getLanguage() {
            return this.language;
          }

          parse(callback, oldTree, options) {
            if (typeof callback === "string") {
              currentParseCallback = (index, _, endIndex) =>
                callback.slice(index, endIndex);
            } else if (typeof callback === "function") {
              currentParseCallback = callback;
            } else {
              throw new Error("Argument must be a string or a function");
            }

            if (this.logCallback) {
              currentLogCallback = this.logCallback;
              C._ts_parser_enable_logger_wasm(this[0], 1);
            } else {
              currentLogCallback = null;
              C._ts_parser_enable_logger_wasm(this[0], 0);
            }

            let rangeCount = 0;
            let rangeAddress = 0;
            if (options && options.includedRanges) {
              rangeCount = options.includedRanges.length;
              rangeAddress = C._calloc(rangeCount, SIZE_OF_RANGE);
              let address = rangeAddress;
              for (let i = 0; i < rangeCount; i++) {
                marshalRange(address, options.includedRanges[i]);
                address += SIZE_OF_RANGE;
              }
            }

            const treeAddress = C._ts_parser_parse_wasm(
              this[0],
              this[1],
              oldTree ? oldTree[0] : 0,
              rangeAddress,
              rangeCount
            );

            if (!treeAddress) {
              currentParseCallback = null;
              currentLogCallback = null;
              throw new Error("Parsing failed");
            }

            const result = new Tree(
              INTERNAL,
              treeAddress,
              this.language,
              currentParseCallback
            );
            currentParseCallback = null;
            currentLogCallback = null;
            return result;
          }

          reset() {
            C._ts_parser_reset(this[0]);
          }

          setTimeoutMicros(timeout) {
            C._ts_parser_set_timeout_micros(this[0], timeout);
          }

          getTimeoutMicros() {
            return C._ts_parser_timeout_micros(this[0]);
          }

          setLogger(callback) {
            if (!callback) {
              callback = null;
            } else if (typeof callback !== "function") {
              throw new Error("Logger callback must be a function");
            }
            this.logCallback = callback;
            return this;
          }

          getLogger() {
            return this.logCallback;
          }
        }

        class Tree {
          constructor(internal, address, language, textCallback) {
            assertInternal(internal);
            this[0] = address;
            this.language = language;
            this.textCallback = textCallback;
          }

          copy() {
            const address = C._ts_tree_copy(this[0]);
            return new Tree(
              INTERNAL,
              address,
              this.language,
              this.textCallback
            );
          }

          delete() {
            C._ts_tree_delete(this[0]);
            this[0] = 0;
          }

          edit(edit) {
            marshalEdit(edit);
            C._ts_tree_edit_wasm(this[0]);
          }

          get rootNode() {
            C._ts_tree_root_node_wasm(this[0]);
            return unmarshalNode(this);
          }

          getLanguage() {
            return this.language;
          }

          walk() {
            return this.rootNode.walk();
          }

          getChangedRanges(other) {
            if (other.constructor !== Tree) {
              throw new TypeError("Argument must be a Tree");
            }

            C._ts_tree_get_changed_ranges_wasm(this[0], other[0]);
            const count = getValue(TRANSFER_BUFFER, "i32");
            const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32");
            const result = new Array(count);
            if (count > 0) {
              let address = buffer;
              for (let i = 0; i < count; i++) {
                result[i] = unmarshalRange(address);
                address += SIZE_OF_RANGE;
              }
              C._free(buffer);
            }
            return result;
          }
        }

        class Node {
          constructor(internal, tree) {
            assertInternal(internal);
            this.tree = tree;
          }

          get typeId() {
            marshalNode(this);
            return C._ts_node_symbol_wasm(this.tree[0]);
          }

          get type() {
            return this.tree.language.types[this.typeId] || "ERROR";
          }

          get endPosition() {
            marshalNode(this);
            C._ts_node_end_point_wasm(this.tree[0]);
            return unmarshalPoint(TRANSFER_BUFFER);
          }

          get endIndex() {
            marshalNode(this);
            return C._ts_node_end_index_wasm(this.tree[0]);
          }

          get text() {
            return getText(this.tree, this.startIndex, this.endIndex);
          }

          isNamed() {
            marshalNode(this);
            return C._ts_node_is_named_wasm(this.tree[0]) === 1;
          }

          hasError() {
            marshalNode(this);
            return C._ts_node_has_error_wasm(this.tree[0]) === 1;
          }

          hasChanges() {
            marshalNode(this);
            return C._ts_node_has_changes_wasm(this.tree[0]) === 1;
          }

          isMissing() {
            marshalNode(this);
            return C._ts_node_is_missing_wasm(this.tree[0]) === 1;
          }

          equals(other) {
            return this.id === other.id;
          }

          child(index) {
            marshalNode(this);
            C._ts_node_child_wasm(this.tree[0], index);
            return unmarshalNode(this.tree);
          }

          namedChild(index) {
            marshalNode(this);
            C._ts_node_named_child_wasm(this.tree[0], index);
            return unmarshalNode(this.tree);
          }

          childForFieldId(fieldId) {
            marshalNode(this);
            C._ts_node_child_by_field_id_wasm(this.tree[0], fieldId);
            return unmarshalNode(this.tree);
          }

          childForFieldName(fieldName) {
            const fieldId = this.tree.language.fields.indexOf(fieldName);
            if (fieldId !== -1) return this.childForFieldId(fieldId);
          }

          get childCount() {
            marshalNode(this);
            return C._ts_node_child_count_wasm(this.tree[0]);
          }

          get namedChildCount() {
            marshalNode(this);
            return C._ts_node_named_child_count_wasm(this.tree[0]);
          }

          get firstChild() {
            return this.child(0);
          }

          get firstNamedChild() {
            return this.namedChild(0);
          }

          get lastChild() {
            return this.child(this.childCount - 1);
          }

          get lastNamedChild() {
            return this.namedChild(this.namedChildCount - 1);
          }

          get children() {
            if (!this._children) {
              marshalNode(this);
              C._ts_node_children_wasm(this.tree[0]);
              const count = getValue(TRANSFER_BUFFER, "i32");
              const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32");
              this._children = new Array(count);
              if (count > 0) {
                let address = buffer;
                for (let i = 0; i < count; i++) {
                  this._children[i] = unmarshalNode(this.tree, address);
                  address += SIZE_OF_NODE;
                }
                C._free(buffer);
              }
            }
            return this._children;
          }

          get namedChildren() {
            if (!this._namedChildren) {
              marshalNode(this);
              C._ts_node_named_children_wasm(this.tree[0]);
              const count = getValue(TRANSFER_BUFFER, "i32");
              const buffer = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32");
              this._namedChildren = new Array(count);
              if (count > 0) {
                let address = buffer;
                for (let i = 0; i < count; i++) {
                  this._namedChildren[i] = unmarshalNode(this.tree, address);
                  address += SIZE_OF_NODE;
                }
                C._free(buffer);
              }
            }
            return this._namedChildren;
          }

          descendantsOfType(types, startPosition, endPosition) {
            if (!Array.isArray(types)) types = [types];
            if (!startPosition) startPosition = ZERO_POINT;
            if (!endPosition) endPosition = ZERO_POINT;

            // Convert the type strings to numeric type symbols.
            const symbols = [];
            const typesBySymbol = this.tree.language.types;
            for (let i = 0, n = typesBySymbol.length; i < n; i++) {
              if (types.includes(typesBySymbol[i])) {
                symbols.push(i);
              }
            }

            // Copy the array of symbols to the WASM heap.
            const symbolsAddress = C._malloc(SIZE_OF_INT * symbols.length);
            for (let i = 0, n = symbols.length; i < n; i++) {
              setValue(symbolsAddress + i * SIZE_OF_INT, symbols[i], "i32");
            }

            // Call the C API to compute the descendants.
            marshalNode(this);
            C._ts_node_descendants_of_type_wasm(
              this.tree[0],
              symbolsAddress,
              symbols.length,
              startPosition.row,
              startPosition.column,
              endPosition.row,
              endPosition.column
            );

            // Instantiate the nodes based on the data returned.
            const descendantCount = getValue(TRANSFER_BUFFER, "i32");
            const descendantAddress = getValue(
              TRANSFER_BUFFER + SIZE_OF_INT,
              "i32"
            );
            const result = new Array(descendantCount);
            if (descendantCount > 0) {
              let address = descendantAddress;
              for (let i = 0; i < descendantCount; i++) {
                result[i] = unmarshalNode(this.tree, address);
                address += SIZE_OF_NODE;
              }
            }

            // Free the intermediate buffers
            C._free(descendantAddress);
            C._free(symbolsAddress);
            return result;
          }

          get nextSibling() {
            marshalNode(this);
            C._ts_node_next_sibling_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          get previousSibling() {
            marshalNode(this);
            C._ts_node_prev_sibling_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          get nextNamedSibling() {
            marshalNode(this);
            C._ts_node_next_named_sibling_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          get previousNamedSibling() {
            marshalNode(this);
            C._ts_node_prev_named_sibling_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          get parent() {
            marshalNode(this);
            C._ts_node_parent_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          descendantForIndex(start, end = start) {
            if (typeof start !== "number" || typeof end !== "number") {
              throw new Error("Arguments must be numbers");
            }

            marshalNode(this);
            let address = TRANSFER_BUFFER + SIZE_OF_NODE;
            setValue(address, start, "i32");
            setValue(address + SIZE_OF_INT, end, "i32");
            C._ts_node_descendant_for_index_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          namedDescendantForIndex(start, end = start) {
            if (typeof start !== "number" || typeof end !== "number") {
              throw new Error("Arguments must be numbers");
            }

            marshalNode(this);
            let address = TRANSFER_BUFFER + SIZE_OF_NODE;
            setValue(address, start, "i32");
            setValue(address + SIZE_OF_INT, end, "i32");
            C._ts_node_named_descendant_for_index_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          descendantForPosition(start, end = start) {
            if (!isPoint(start) || !isPoint(end)) {
              throw new Error("Arguments must be {row, column} objects");
            }

            marshalNode(this);
            let address = TRANSFER_BUFFER + SIZE_OF_NODE;
            marshalPoint(address, start);
            marshalPoint(address + SIZE_OF_POINT, end);
            C._ts_node_descendant_for_position_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          namedDescendantForPosition(start, end = start) {
            if (!isPoint(start) || !isPoint(end)) {
              throw new Error("Arguments must be {row, column} objects");
            }

            marshalNode(this);
            let address = TRANSFER_BUFFER + SIZE_OF_NODE;
            marshalPoint(address, start);
            marshalPoint(address + SIZE_OF_POINT, end);
            C._ts_node_named_descendant_for_position_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          walk() {
            marshalNode(this);
            C._ts_tree_cursor_new_wasm(this.tree[0]);
            return new TreeCursor(INTERNAL, this.tree);
          }

          toString() {
            marshalNode(this);
            const address = C._ts_node_to_string_wasm(this.tree[0]);
            const result = AsciiToString(address);
            C._free(address);
            return result;
          }
        }

        class TreeCursor {
          constructor(internal, tree) {
            assertInternal(internal);
            this.tree = tree;
            unmarshalTreeCursor(this);
          }

          delete() {
            marshalTreeCursor(this);
            C._ts_tree_cursor_delete_wasm(this.tree[0]);
            this[0] = this[1] = this[2] = 0;
          }

          reset(node) {
            marshalNode(node);
            marshalTreeCursor(this, TRANSFER_BUFFER + SIZE_OF_NODE);
            C._ts_tree_cursor_reset_wasm(this.tree[0]);
            unmarshalTreeCursor(this);
          }

          get nodeType() {
            return this.tree.language.types[this.nodeTypeId] || "ERROR";
          }

          get nodeTypeId() {
            marshalTreeCursor(this);
            return C._ts_tree_cursor_current_node_type_id_wasm(this.tree[0]);
          }

          get nodeId() {
            marshalTreeCursor(this);
            return C._ts_tree_cursor_current_node_id_wasm(this.tree[0]);
          }

          get nodeIsNamed() {
            marshalTreeCursor(this);
            return (
              C._ts_tree_cursor_current_node_is_named_wasm(this.tree[0]) === 1
            );
          }

          get nodeIsMissing() {
            marshalTreeCursor(this);
            return (
              C._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0]) === 1
            );
          }

          get nodeText() {
            marshalTreeCursor(this);
            const startIndex = C._ts_tree_cursor_start_index_wasm(this.tree[0]);
            const endIndex = C._ts_tree_cursor_end_index_wasm(this.tree[0]);
            return getText(this.tree, startIndex, endIndex);
          }

          get startPosition() {
            marshalTreeCursor(this);
            C._ts_tree_cursor_start_position_wasm(this.tree[0]);
            return unmarshalPoint(TRANSFER_BUFFER);
          }

          get endPosition() {
            marshalTreeCursor(this);
            C._ts_tree_cursor_end_position_wasm(this.tree[0]);
            return unmarshalPoint(TRANSFER_BUFFER);
          }

          get startIndex() {
            marshalTreeCursor(this);
            return C._ts_tree_cursor_start_index_wasm(this.tree[0]);
          }

          get endIndex() {
            marshalTreeCursor(this);
            return C._ts_tree_cursor_end_index_wasm(this.tree[0]);
          }

          currentNode() {
            marshalTreeCursor(this);
            C._ts_tree_cursor_current_node_wasm(this.tree[0]);
            return unmarshalNode(this.tree);
          }

          currentFieldId() {
            marshalTreeCursor(this);
            return C._ts_tree_cursor_current_field_id_wasm(this.tree[0]);
          }

          currentFieldName() {
            return this.tree.language.fields[this.currentFieldId()];
          }

          gotoFirstChild() {
            marshalTreeCursor(this);
            const result = C._ts_tree_cursor_goto_first_child_wasm(
              this.tree[0]
            );
            unmarshalTreeCursor(this);
            return result === 1;
          }

          gotoNextSibling() {
            marshalTreeCursor(this);
            const result = C._ts_tree_cursor_goto_next_sibling_wasm(
              this.tree[0]
            );
            unmarshalTreeCursor(this);
            return result === 1;
          }

          gotoParent() {
            marshalTreeCursor(this);
            const result = C._ts_tree_cursor_goto_parent_wasm(this.tree[0]);
            unmarshalTreeCursor(this);
            return result === 1;
          }
        }

        class Language {
          constructor(internal, address) {
            assertInternal(internal);
            this[0] = address;
            this.types = new Array(C._ts_language_symbol_count(this[0]));
            for (let i = 0, n = this.types.length; i < n; i++) {
              if (C._ts_language_symbol_type(this[0], i) < 2) {
                this.types[i] = UTF8ToString(
                  C._ts_language_symbol_name(this[0], i)
                );
              }
            }
            this.fields = new Array(C._ts_language_field_count(this[0]) + 1);
            for (let i = 0, n = this.fields.length; i < n; i++) {
              const fieldName = C._ts_language_field_name_for_id(this[0], i);
              if (fieldName !== 0) {
                this.fields[i] = UTF8ToString(fieldName);
              } else {
                this.fields[i] = null;
              }
            }
          }

          get version() {
            return C._ts_language_version(this[0]);
          }

          get fieldCount() {
            return this.fields.length - 1;
          }

          fieldIdForName(fieldName) {
            const result = this.fields.indexOf(fieldName);
            if (result !== -1) {
              return result;
            } else {
              return null;
            }
          }

          fieldNameForId(fieldId) {
            return this.fields[fieldId] || null;
          }

          idForNodeType(type, named) {
            const typeLength = lengthBytesUTF8(type);
            const typeAddress = C._malloc(typeLength + 1);
            stringToUTF8(type, typeAddress, typeLength + 1);
            const result = C._ts_language_symbol_for_name(
              this[0],
              typeAddress,
              typeLength,
              named
            );
            C._free(typeAddress);
            return result || null;
          }

          get nodeTypeCount() {
            return C._ts_language_symbol_count(this[0]);
          }

          nodeTypeForId(typeId) {
            const name = C._ts_language_symbol_name(this[0], typeId);
            return name ? UTF8ToString(name) : null;
          }

          nodeTypeIsNamed(typeId) {
            return C._ts_language_type_is_named_wasm(this[0], typeId)
              ? true
              : false;
          }

          nodeTypeIsVisible(typeId) {
            return C._ts_language_type_is_visible_wasm(this[0], typeId)
              ? true
              : false;
          }

          query(source) {
            const sourceLength = lengthBytesUTF8(source);
            const sourceAddress = C._malloc(sourceLength + 1);
            stringToUTF8(source, sourceAddress, sourceLength + 1);
            const address = C._ts_query_new(
              this[0],
              sourceAddress,
              sourceLength,
              TRANSFER_BUFFER,
              TRANSFER_BUFFER + SIZE_OF_INT
            );

            if (!address) {
              const errorId = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32");
              const errorByte = getValue(TRANSFER_BUFFER, "i32");
              const errorIndex = UTF8ToString(sourceAddress, errorByte).length;
              const suffix = source.substr(errorIndex, 100).split("\n")[0];
              let word = suffix.match(QUERY_WORD_REGEX)[0];
              let error;
              switch (errorId) {
                case 2:
                  error = new RangeError(`Bad node name '${word}'`);
                  break;
                case 3:
                  error = new RangeError(`Bad field name '${word}'`);
                  break;
                case 4:
                  error = new RangeError(`Bad capture name @${word}`);
                  break;
                case 5:
                  error = new TypeError(
                    `Bad pattern structure at offset ${errorIndex}: '${suffix}'...`
                  );
                  word = "";
                  break;
                default:
                  error = new SyntaxError(
                    `Bad syntax at offset ${errorIndex}: '${suffix}'...`
                  );
                  word = "";
                  break;
              }
              error.index = errorIndex;
              error.length = word.length;
              C._free(sourceAddress);
              throw error;
            }

            const stringCount = C._ts_query_string_count(address);
            const captureCount = C._ts_query_capture_count(address);
            const patternCount = C._ts_query_pattern_count(address);
            const captureNames = new Array(captureCount);
            const stringValues = new Array(stringCount);

            for (let i = 0; i < captureCount; i++) {
              const nameAddress = C._ts_query_capture_name_for_id(
                address,
                i,
                TRANSFER_BUFFER
              );
              const nameLength = getValue(TRANSFER_BUFFER, "i32");
              captureNames[i] = UTF8ToString(nameAddress, nameLength);
            }

            for (let i = 0; i < stringCount; i++) {
              const valueAddress = C._ts_query_string_value_for_id(
                address,
                i,
                TRANSFER_BUFFER
              );
              const nameLength = getValue(TRANSFER_BUFFER, "i32");
              stringValues[i] = UTF8ToString(valueAddress, nameLength);
            }

            const setProperties = new Array(patternCount);
            const assertedProperties = new Array(patternCount);
            const refutedProperties = new Array(patternCount);
            const predicates = new Array(patternCount);
            const textPredicates = new Array(patternCount);
            for (let i = 0; i < patternCount; i++) {
              const predicatesAddress = C._ts_query_predicates_for_pattern(
                address,
                i,
                TRANSFER_BUFFER
              );
              const stepCount = getValue(TRANSFER_BUFFER, "i32");

              predicates[i] = [];
              textPredicates[i] = [];

              const steps = [];
              let stepAddress = predicatesAddress;
              for (let j = 0; j < stepCount; j++) {
                const stepType = getValue(stepAddress, "i32");
                stepAddress += SIZE_OF_INT;
                const stepValueId = getValue(stepAddress, "i32");
                stepAddress += SIZE_OF_INT;
                if (stepType === PREDICATE_STEP_TYPE_CAPTURE) {
                  steps.push({
                    type: "capture",
                    name: captureNames[stepValueId],
                  });
                } else if (stepType === PREDICATE_STEP_TYPE_STRING) {
                  steps.push({
                    type: "string",
                    value: stringValues[stepValueId],
                  });
                } else if (steps.length > 0) {
                  if (steps[0].type !== "string") {
                    throw new Error(
                      "Predicates must begin with a literal value"
                    );
                  }
                  const operator = steps[0].value;
                  let isPositive = true;
                  switch (operator) {
                    case "not-eq?":
                      isPositive = false;
                    case "eq?":
                      if (steps.length !== 3)
                        throw new Error(
                          `Wrong number of arguments to \`#eq?\` predicate. Expected 2, got ${
                            steps.length - 1
                          }`
                        );
                      if (steps[1].type !== "capture")
                        throw new Error(
                          `First argument of \`#eq?\` predicate must be a capture. Got "${steps[1].value}"`
                        );
                      if (steps[2].type === "capture") {
                        const captureName1 = steps[1].name;
                        const captureName2 = steps[2].name;
                        textPredicates[i].push(function (captures) {
                          let node1, node2;
                          for (const c of captures) {
                            if (c.name === captureName1) node1 = c.node;
                            if (c.name === captureName2) node2 = c.node;
                          }
                          if (node1 === undefined || node2 === undefined)
                            return true;
                          return (node1.text === node2.text) === isPositive;
                        });
                      } else {
                        const captureName = steps[1].name;
                        const stringValue = steps[2].value;
                        textPredicates[i].push(function (captures) {
                          for (const c of captures) {
                            if (c.name === captureName) {
                              return (
                                (c.node.text === stringValue) === isPositive
                              );
                            }
                          }
                          return true;
                        });
                      }
                      break;

                    case "not-match?":
                      isPositive = false;
                    case "match?":
                      if (steps.length !== 3)
                        throw new Error(
                          `Wrong number of arguments to \`#match?\` predicate. Expected 2, got ${
                            steps.length - 1
                          }.`
                        );
                      if (steps[1].type !== "capture")
                        throw new Error(
                          `First argument of \`#match?\` predicate must be a capture. Got "${steps[1].value}".`
                        );
                      if (steps[2].type !== "string")
                        throw new Error(
                          `Second argument of \`#match?\` predicate must be a string. Got @${steps[2].value}.`
                        );
                      const captureName = steps[1].name;
                      const regex = new RegExp(steps[2].value);
                      textPredicates[i].push(function (captures) {
                        for (const c of captures) {
                          if (c.name === captureName)
                            return regex.test(c.node.text) === isPositive;
                        }
                        return true;
                      });
                      break;

                    case "set!":
                      if (steps.length < 2 || steps.length > 3)
                        throw new Error(
                          `Wrong number of arguments to \`#set!\` predicate. Expected 1 or 2. Got ${
                            steps.length - 1
                          }.`
                        );
                      if (steps.some((s) => s.type !== "string"))
                        throw new Error(
                          `Arguments to \`#set!\` predicate must be a strings.".`
                        );
                      if (!setProperties[i]) setProperties[i] = {};
                      setProperties[i][steps[1].value] = steps[2]
                        ? steps[2].value
                        : null;
                      break;

                    case "is?":
                    case "is-not?":
                      if (steps.length < 2 || steps.length > 3)
                        throw new Error(
                          `Wrong number of arguments to \`#${operator}\` predicate. Expected 1 or 2. Got ${
                            steps.length - 1
                          }.`
                        );
                      if (steps.some((s) => s.type !== "string"))
                        throw new Error(
                          `Arguments to \`#${operator}\` predicate must be a strings.".`
                        );
                      const properties =
                        operator === "is?"
                          ? assertedProperties
                          : refutedProperties;
                      if (!properties[i]) properties[i] = {};
                      properties[i][steps[1].value] = steps[2]
                        ? steps[2].value
                        : null;
                      break;

                    default:
                      predicates[i].push({
                        operator,
                        operands: steps.slice(1),
                      });
                  }

                  steps.length = 0;
                }
              }

              Object.freeze(setProperties[i]);
              Object.freeze(assertedProperties[i]);
              Object.freeze(refutedProperties[i]);
            }

            C._free(sourceAddress);
            return new Query(
              INTERNAL,
              address,
              captureNames,
              textPredicates,
              predicates,
              Object.freeze(setProperties),
              Object.freeze(assertedProperties),
              Object.freeze(refutedProperties)
            );
          }

          static load(input) {
            let bytes;
            if (input instanceof Uint8Array) {
              bytes = Promise.resolve(input);
            } else {
              const url = input;
              if (
                typeof process !== "undefined" &&
                process.versions &&
                process.versions.node
              ) {
                const fs = require("fs");
                bytes = Promise.resolve(fs.readFileSync(url));
              } else {
                bytes = fetch(url).then((response) =>
                  response.arrayBuffer().then((buffer) => {
                    if (response.ok) {
                      return new Uint8Array(buffer);
                    } else {
                      const body = new TextDecoder("utf-8").decode(buffer);
                      throw new Error(
                        `Language.load failed with status ${response.status}.\n\n${body}`
                      );
                    }
                  })
                );
              }
            }

            // emscripten-core/emscripten#12969
            const loadModule =
              typeof loadSideModule === "function"
                ? loadSideModule
                : loadWebAssemblyModule;

            return bytes
              .then((bytes) => loadModule(bytes, { loadAsync: true }))
              .then((mod) => {
                const symbolNames = Object.keys(mod);
                const functionName = symbolNames.find(
                  (key) =>
                    LANGUAGE_FUNCTION_REGEX.test(key) &&
                    !key.includes("external_scanner_")
                );
                if (!functionName) {
                  console.log(
                    `Couldn't find language function in WASM file. Symbols:\n${JSON.stringify(
                      symbolNames,
                      null,
                      2
                    )}`
                  );
                }
                const languageAddress = mod[functionName]();
                return new Language(INTERNAL, languageAddress);
              });
          }
        }

        class Query {
          constructor(
            internal,
            address,
            captureNames,
            textPredicates,
            predicates,
            setProperties,
            assertedProperties,
            refutedProperties
          ) {
            assertInternal(internal);
            this[0] = address;
            this.captureNames = captureNames;
            this.textPredicates = textPredicates;
            this.predicates = predicates;
            this.setProperties = setProperties;
            this.assertedProperties = assertedProperties;
            this.refutedProperties = refutedProperties;
            this.exceededMatchLimit = false;
          }

          delete() {
            C._ts_query_delete(this[0]);
            this[0] = 0;
          }

          matches(node, startPosition, endPosition, options) {
            if (!startPosition) startPosition = ZERO_POINT;
            if (!endPosition) endPosition = ZERO_POINT;
            if (!options) options = {};

            let matchLimit = options.matchLimit;
            if (typeof matchLimit === "undefined") {
              matchLimit = 0;
            } else if (typeof matchLimit !== "number") {
              throw new Error("Arguments must be numbers");
            }

            marshalNode(node);

            C._ts_query_matches_wasm(
              this[0],
              node.tree[0],
              startPosition.row,
              startPosition.column,
              endPosition.row,
              endPosition.column,
              matchLimit
            );

            const rawCount = getValue(TRANSFER_BUFFER, "i32");
            const startAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32");
            const didExceedMatchLimit = getValue(
              TRANSFER_BUFFER + 2 * SIZE_OF_INT,
              "i32"
            );
            const result = new Array(rawCount);
            this.exceededMatchLimit = !!didExceedMatchLimit;

            let filteredCount = 0;
            let address = startAddress;
            for (let i = 0; i < rawCount; i++) {
              const pattern = getValue(address, "i32");
              address += SIZE_OF_INT;
              const captureCount = getValue(address, "i32");
              address += SIZE_OF_INT;

              const captures = new Array(captureCount);
              address = unmarshalCaptures(this, node.tree, address, captures);
              if (this.textPredicates[pattern].every((p) => p(captures))) {
                result[filteredCount++] = { pattern, captures };
                const setProperties = this.setProperties[pattern];
                if (setProperties) result[i].setProperties = setProperties;
                const assertedProperties = this.assertedProperties[pattern];
                if (assertedProperties)
                  result[i].assertedProperties = assertedProperties;
                const refutedProperties = this.refutedProperties[pattern];
                if (refutedProperties)
                  result[i].refutedProperties = refutedProperties;
              }
            }
            result.length = filteredCount;

            C._free(startAddress);
            return result;
          }

          captures(node, startPosition, endPosition, options) {
            if (!startPosition) startPosition = ZERO_POINT;
            if (!endPosition) endPosition = ZERO_POINT;
            if (!options) options = {};

            let matchLimit = options.matchLimit;
            if (typeof matchLimit === "undefined") {
              matchLimit = 0;
            } else if (typeof matchLimit !== "number") {
              throw new Error("Arguments must be numbers");
            }

            marshalNode(node);

            C._ts_query_captures_wasm(
              this[0],
              node.tree[0],
              startPosition.row,
              startPosition.column,
              endPosition.row,
              endPosition.column,
              matchLimit
            );

            const count = getValue(TRANSFER_BUFFER, "i32");
            const startAddress = getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32");
            const didExceedMatchLimit = getValue(
              TRANSFER_BUFFER + 2 * SIZE_OF_INT,
              "i32"
            );
            const result = [];
            this.exceededMatchLimit = !!didExceedMatchLimit;

            const captures = [];
            let address = startAddress;
            for (let i = 0; i < count; i++) {
              const pattern = getValue(address, "i32");
              address += SIZE_OF_INT;
              const captureCount = getValue(address, "i32");
              address += SIZE_OF_INT;
              const captureIndex = getValue(address, "i32");
              address += SIZE_OF_INT;

              captures.length = captureCount;
              address = unmarshalCaptures(this, node.tree, address, captures);

              if (this.textPredicates[pattern].every((p) => p(captures))) {
                const capture = captures[captureIndex];
                const setProperties = this.setProperties[pattern];
                if (setProperties) capture.setProperties = setProperties;
                const assertedProperties = this.assertedProperties[pattern];
                if (assertedProperties)
                  capture.assertedProperties = assertedProperties;
                const refutedProperties = this.refutedProperties[pattern];
                if (refutedProperties)
                  capture.refutedProperties = refutedProperties;
                result.push(capture);
              }
            }

            C._free(startAddress);
            return result;
          }

          predicatesForPattern(patternIndex) {
            return this.predicates[patternIndex];
          }

          didExceedMatchLimit() {
            return this.exceededMatchLimit;
          }
        }

        function getText(tree, startIndex, endIndex) {
          const length = endIndex - startIndex;
          let result = tree.textCallback(startIndex, null, endIndex);
          startIndex += result.length;
          while (startIndex < endIndex) {
            const string = tree.textCallback(startIndex, null, endIndex);
            if (string && string.length > 0) {
              startIndex += string.length;
              result += string;
            } else {
              break;
            }
          }
          if (startIndex > endIndex) {
            result = result.slice(0, length);
          }
          return result;
        }

        function unmarshalCaptures(query, tree, address, result) {
          for (let i = 0, n = result.length; i < n; i++) {
            const captureIndex = getValue(address, "i32");
            address += SIZE_OF_INT;
            const node = unmarshalNode(tree, address);
            address += SIZE_OF_NODE;
            result[i] = { name: query.captureNames[captureIndex], node };
          }
          return address;
        }

        function assertInternal(x) {
          if (x !== INTERNAL) throw new Error("Illegal constructor");
        }

        function isPoint(point) {
          return (
            point &&
            typeof point.row === "number" &&
            typeof point.column === "number"
          );
        }

        function marshalNode(node) {
          let address = TRANSFER_BUFFER;
          setValue(address, node.id, "i32");
          address += SIZE_OF_INT;
          setValue(address, node.startIndex, "i32");
          address += SIZE_OF_INT;
          setValue(address, node.startPosition.row, "i32");
          address += SIZE_OF_INT;
          setValue(address, node.startPosition.column, "i32");
          address += SIZE_OF_INT;
          setValue(address, node[0], "i32");
        }

        function unmarshalNode(tree, address = TRANSFER_BUFFER) {
          const id = getValue(address, "i32");
          address += SIZE_OF_INT;
          if (id === 0) return null;

          const index = getValue(address, "i32");
          address += SIZE_OF_INT;
          const row = getValue(address, "i32");
          address += SIZE_OF_INT;
          const column = getValue(address, "i32");
          address += SIZE_OF_INT;
          const other = getValue(address, "i32");

          const result = new Node(INTERNAL, tree);
          result.id = id;
          result.startIndex = index;
          result.startPosition = { row, column };
          result[0] = other;

          return result;
        }

        function marshalTreeCursor(cursor, address = TRANSFER_BUFFER) {
          setValue(address + 0 * SIZE_OF_INT, cursor[0], "i32"),
            setValue(address + 1 * SIZE_OF_INT, cursor[1], "i32"),
            setValue(address + 2 * SIZE_OF_INT, cursor[2], "i32");
        }

        function unmarshalTreeCursor(cursor) {
          (cursor[0] = getValue(TRANSFER_BUFFER + 0 * SIZE_OF_INT, "i32")),
            (cursor[1] = getValue(TRANSFER_BUFFER + 1 * SIZE_OF_INT, "i32")),
            (cursor[2] = getValue(TRANSFER_BUFFER + 2 * SIZE_OF_INT, "i32"));
        }

        function marshalPoint(address, point) {
          setValue(address, point.row, "i32");
          setValue(address + SIZE_OF_INT, point.column, "i32");
        }

        function unmarshalPoint(address) {
          return {
            row: getValue(address, "i32"),
            column: getValue(address + SIZE_OF_INT, "i32"),
          };
        }

        function marshalRange(address, range) {
          marshalPoint(address, range.startPosition);
          address += SIZE_OF_POINT;
          marshalPoint(address, range.endPosition);
          address += SIZE_OF_POINT;
          setValue(address, range.startIndex, "i32");
          address += SIZE_OF_INT;
          setValue(address, range.endIndex, "i32");
          address += SIZE_OF_INT;
        }

        function unmarshalRange(address) {
          const result = {};
          result.startPosition = unmarshalPoint(address);
          address += SIZE_OF_POINT;
          result.endPosition = unmarshalPoint(address);
          address += SIZE_OF_POINT;
          result.startIndex = getValue(address, "i32");
          address += SIZE_OF_INT;
          result.endIndex = getValue(address, "i32");
          return result;
        }

        function marshalEdit(edit) {
          let address = TRANSFER_BUFFER;
          marshalPoint(address, edit.startPosition);
          address += SIZE_OF_POINT;
          marshalPoint(address, edit.oldEndPosition);
          address += SIZE_OF_POINT;
          marshalPoint(address, edit.newEndPosition);
          address += SIZE_OF_POINT;
          setValue(address, edit.startIndex, "i32");
          address += SIZE_OF_INT;
          setValue(address, edit.oldEndIndex, "i32");
          address += SIZE_OF_INT;
          setValue(address, edit.newEndIndex, "i32");
          address += SIZE_OF_INT;
        }

        for (const name of Object.getOwnPropertyNames(ParserImpl.prototype)) {
          Object.defineProperty(Parser.prototype, name, {
            value: ParserImpl.prototype[name],
            enumerable: false,
            writable: false,
          });
        }

        Parser.Language = Language;
        Module.onRuntimeInitialized = () => {
          ParserImpl.init();
          resolveInitPromise();
        };
      }));
    }
  }

  return Parser;
})();

if (typeof exports === "object") {
  module.exports = TreeSitter;
}

// don't execute the inner catch statement if either of these exists
try {
  self;
} catch (_e) {
  try {
    window;
  } catch (_e) {
    // we hope this is going to be executed in the node environment
    globalThis.TreeSitter = TreeSitter;
  }
}
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  mod
));

// ../../../resources/editor/tools/yaml/tree-sitter-yaml.json
var require_tree_sitter_yaml = __commonJS({
  "../../../resources/editor/tools/yaml/tree-sitter-yaml.json"(exports, module) {
    module.exports = { data: [0, 97, 115, 109, 1, 0, 0, 0, 0, 14, 6, 100, 121, 108, 105, 110, 107, 176, 201, 9, 4, 3, 0, 0, 1, 64, 11, 96, 1, 127, 1, 127, 96, 2, 127, 127, 1, 127, 96, 2, 127, 127, 0, 96, 1, 127, 0, 96, 3, 127, 127, 127, 1, 127, 96, 3, 127, 127, 127, 0, 96, 0, 0, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 0, 96, 5, 127, 127, 127, 127, 127, 0, 96, 4, 127, 127, 127, 127, 1, 127, 2, 140, 4, 16, 3, 101, 110, 118, 13, 95, 95, 97, 115, 115, 101, 114, 116, 95, 102, 97, 105, 108, 0, 8, 3, 101, 110, 118, 5, 95, 90, 110, 119, 109, 0, 0, 3, 101, 110, 118, 6, 95, 90, 100, 108, 80, 118, 0, 3, 3, 101, 110, 118, 62, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 50, 48, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 95, 99, 111, 109, 109, 111, 110, 73, 76, 98, 49, 69, 69, 50, 48, 95, 95, 116, 104, 114, 111, 119, 95, 108, 101, 110, 103, 116, 104, 95, 101, 114, 114, 111, 114, 69, 118, 0, 3, 3, 101, 110, 118, 5, 97, 98, 111, 114, 116, 0, 6, 3, 101, 110, 118, 6, 109, 101, 109, 99, 112, 121, 0, 4, 3, 101, 110, 118, 15, 95, 95, 115, 116, 97, 99, 107, 95, 112, 111, 105, 110, 116, 101, 114, 3, 127, 1, 3, 101, 110, 118, 13, 95, 95, 109, 101, 109, 111, 114, 121, 95, 98, 97, 115, 101, 3, 127, 0, 3, 101, 110, 118, 12, 95, 95, 116, 97, 98, 108, 101, 95, 98, 97, 115, 101, 3, 127, 0, 8, 71, 79, 84, 46, 102, 117, 110, 99, 40, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 99, 114, 101, 97, 116, 101, 3, 127, 1, 8, 71, 79, 84, 46, 102, 117, 110, 99, 41, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 100, 101, 115, 116, 114, 111, 121, 3, 127, 1, 8, 71, 79, 84, 46, 102, 117, 110, 99, 38, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 115, 99, 97, 110, 3, 127, 1, 8, 71, 79, 84, 46, 102, 117, 110, 99, 43, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 115, 101, 114, 105, 97, 108, 105, 122, 101, 3, 127, 1, 8, 71, 79, 84, 46, 102, 117, 110, 99, 45, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 100, 101, 115, 101, 114, 105, 97, 108, 105, 122, 101, 3, 127, 1, 3, 101, 110, 118, 6, 109, 101, 109, 111, 114, 121, 2, 0, 3, 3, 101, 110, 118, 25, 95, 95, 105, 110, 100, 105, 114, 101, 99, 116, 95, 102, 117, 110, 99, 116, 105, 111, 110, 95, 116, 97, 98, 108, 101, 1, 112, 0, 3, 3, 124, 123, 6, 6, 4, 7, 0, 5, 3, 0, 1, 0, 1, 0, 1, 0, 0, 5, 3, 2, 4, 2, 2, 2, 5, 0, 1, 0, 2, 0, 0, 3, 3, 4, 4, 4, 4, 4, 2, 0, 5, 4, 4, 1, 1, 0, 2, 0, 1, 0, 0, 4, 1, 3, 0, 0, 9, 3, 0, 0, 5, 2, 2, 5, 2, 3, 1, 1, 1, 1, 2, 3, 2, 2, 4, 5, 0, 1, 10, 2, 0, 5, 5, 0, 1, 4, 0, 1, 0, 8, 2, 2, 3, 0, 0, 7, 1, 1, 1, 4, 4, 0, 3, 1, 2, 2, 1, 0, 3, 0, 1, 1, 1, 0, 0, 0, 2, 0, 0, 2, 0, 1, 0, 7, 1, 6, 6, 1, 127, 0, 65, 0, 11, 7, 177, 60, 131, 1, 18, 95, 95, 112, 111, 115, 116, 95, 105, 110, 115, 116, 97, 110, 116, 105, 97, 116, 101, 0, 6, 56, 95, 90, 78, 49, 54, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 49, 49, 97, 100, 118, 95, 115, 99, 104, 95, 115, 116, 116, 69, 97, 105, 80, 78, 83, 95, 49, 50, 82, 101, 115, 117, 108, 116, 83, 99, 104, 101, 109, 97, 69, 0, 8, 40, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 99, 114, 101, 97, 116, 101, 0, 9, 40, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 67, 50, 69, 118, 0, 10, 41, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 100, 101, 115, 116, 114, 111, 121, 0, 12, 40, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 68, 50, 69, 118, 0, 13, 43, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 115, 101, 114, 105, 97, 108, 105, 122, 101, 0, 14, 44, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 53, 98, 101, 103, 105, 110, 69, 118, 0, 15, 31, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 112, 108, 69, 108, 0, 16, 42, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 51, 101, 110, 100, 69, 118, 0, 17, 43, 95, 90, 78, 83, 116, 51, 95, 95, 50, 110, 101, 73, 80, 115, 69, 69, 98, 82, 75, 78, 83, 95, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 84, 95, 69, 69, 83, 54, 95, 0, 18, 31, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 100, 101, 69, 118, 0, 19, 30, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 112, 112, 69, 118, 0, 20, 45, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 100, 101, 115, 101, 114, 105, 97, 108, 105, 122, 101, 0, 21, 44, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 53, 99, 108, 101, 97, 114, 69, 118, 0, 22, 49, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 57, 112, 117, 115, 104, 95, 98, 97, 99, 107, 69, 79, 115, 0, 23, 38, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 95, 101, 120, 116, 101, 114, 110, 97, 108, 95, 115, 99, 97, 110, 110, 101, 114, 95, 115, 99, 97, 110, 0, 24, 45, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 54, 114, 98, 101, 103, 105, 110, 69, 118, 0, 26, 43, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 52, 114, 101, 110, 100, 69, 118, 0, 27, 54, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 114, 101, 118, 101, 114, 115, 101, 95, 105, 116, 101, 114, 97, 116, 111, 114, 73, 78, 83, 95, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 69, 69, 112, 112, 69, 105, 0, 28, 55, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 54, 114, 101, 118, 101, 114, 115, 101, 95, 105, 116, 101, 114, 97, 116, 111, 114, 73, 78, 83, 95, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 69, 69, 100, 101, 69, 118, 0, 29, 79, 95, 90, 78, 83, 116, 51, 95, 95, 50, 101, 113, 73, 78, 83, 95, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 69, 83, 51, 95, 69, 69, 98, 82, 75, 78, 83, 95, 49, 54, 114, 101, 118, 101, 114, 115, 101, 95, 105, 116, 101, 114, 97, 116, 111, 114, 73, 84, 95, 69, 69, 82, 75, 78, 83, 52, 95, 73, 84, 48, 95, 69, 69, 0, 30, 43, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 52, 98, 97, 99, 107, 69, 118, 0, 31, 44, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 52, 115, 105, 122, 101, 69, 118, 0, 34, 48, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 51, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 67, 50, 69, 118, 0, 53, 41, 95, 90, 78, 83, 116, 51, 95, 95, 50, 50, 48, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 95, 99, 111, 109, 109, 111, 110, 73, 76, 98, 49, 69, 69, 67, 50, 69, 118, 0, 54, 87, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 73, 80, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 67, 50, 73, 68, 110, 78, 83, 95, 49, 56, 95, 95, 100, 101, 102, 97, 117, 108, 116, 95, 105, 110, 105, 116, 95, 116, 97, 103, 69, 69, 69, 79, 84, 95, 79, 84, 48, 95, 0, 55, 58, 95, 90, 78, 83, 116, 51, 95, 95, 50, 55, 102, 111, 114, 119, 97, 114, 100, 73, 68, 110, 69, 69, 79, 84, 95, 82, 78, 83, 95, 49, 54, 114, 101, 109, 111, 118, 101, 95, 114, 101, 102, 101, 114, 101, 110, 99, 101, 73, 83, 49, 95, 69, 52, 116, 121, 112, 101, 69, 0, 54, 56, 95, 90, 78, 83, 116, 51, 95, 95, 50, 50, 50, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 95, 101, 108, 101, 109, 73, 80, 115, 76, 105, 48, 69, 76, 98, 48, 69, 69, 67, 50, 73, 68, 110, 118, 69, 69, 79, 84, 95, 0, 56, 80, 95, 90, 78, 83, 116, 51, 95, 95, 50, 55, 102, 111, 114, 119, 97, 114, 100, 73, 78, 83, 95, 49, 56, 95, 95, 100, 101, 102, 97, 117, 108, 116, 95, 105, 110, 105, 116, 95, 116, 97, 103, 69, 69, 69, 79, 84, 95, 82, 78, 83, 95, 49, 54, 114, 101, 109, 111, 118, 101, 95, 114, 101, 102, 101, 114, 101, 110, 99, 101, 73, 83, 50, 95, 69, 52, 116, 121, 112, 101, 69, 0, 54, 87, 95, 90, 78, 83, 116, 51, 95, 95, 50, 50, 50, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 95, 101, 108, 101, 109, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 76, 105, 49, 69, 76, 98, 49, 69, 69, 67, 50, 69, 78, 83, 95, 49, 56, 95, 95, 100, 101, 102, 97, 117, 108, 116, 95, 105, 110, 105, 116, 95, 116, 97, 103, 69, 0, 54, 26, 95, 90, 78, 83, 116, 51, 95, 95, 50, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 67, 50, 69, 118, 0, 54, 58, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 55, 95, 95, 97, 110, 110, 111, 116, 97, 116, 101, 95, 100, 101, 108, 101, 116, 101, 69, 118, 0, 57, 48, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 51, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 68, 50, 69, 118, 0, 58, 44, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 52, 100, 97, 116, 97, 69, 118, 0, 19, 48, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 56, 99, 97, 112, 97, 99, 105, 116, 121, 69, 118, 0, 59, 83, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 51, 49, 95, 95, 97, 110, 110, 111, 116, 97, 116, 101, 95, 99, 111, 110, 116, 105, 103, 117, 111, 117, 115, 95, 99, 111, 110, 116, 97, 105, 110, 101, 114, 69, 80, 75, 118, 83, 53, 95, 83, 53, 95, 83, 53, 95, 0, 60, 52, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 51, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 53, 99, 108, 101, 97, 114, 69, 118, 0, 61, 54, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 51, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 55, 95, 95, 97, 108, 108, 111, 99, 69, 118, 0, 62, 56, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 51, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 56, 99, 97, 112, 97, 99, 105, 116, 121, 69, 118, 0, 63, 66, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 48, 100, 101, 97, 108, 108, 111, 99, 97, 116, 101, 69, 82, 83, 50, 95, 80, 115, 109, 0, 64, 33, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 50, 95, 95, 116, 111, 95, 97, 100, 100, 114, 101, 115, 115, 73, 115, 69, 69, 80, 84, 95, 83, 50, 95, 0, 54, 57, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 51, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 57, 95, 95, 101, 110, 100, 95, 99, 97, 112, 69, 118, 0, 62, 58, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 73, 80, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 53, 102, 105, 114, 115, 116, 69, 118, 0, 54, 54, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 50, 50, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 95, 101, 108, 101, 109, 73, 80, 115, 76, 105, 48, 69, 76, 98, 48, 69, 69, 53, 95, 95, 103, 101, 116, 69, 118, 0, 54, 66, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 51, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 55, 95, 95, 100, 101, 115, 116, 114, 117, 99, 116, 95, 97, 116, 95, 101, 110, 100, 69, 80, 115, 0, 65, 38, 95, 90, 78, 83, 116, 51, 95, 95, 50, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 49, 48, 100, 101, 97, 108, 108, 111, 99, 97, 116, 101, 69, 80, 115, 109, 0, 64, 58, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 73, 80, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 54, 115, 101, 99, 111, 110, 100, 69, 118, 0, 54, 66, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 55, 100, 101, 115, 116, 114, 111, 121, 73, 115, 69, 69, 118, 82, 83, 50, 95, 80, 84, 95, 0, 66, 98, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 57, 95, 95, 100, 101, 115, 116, 114, 111, 121, 73, 115, 69, 69, 118, 78, 83, 95, 49, 55, 105, 110, 116, 101, 103, 114, 97, 108, 95, 99, 111, 110, 115, 116, 97, 110, 116, 73, 98, 76, 98, 49, 69, 69, 69, 82, 83, 50, 95, 80, 84, 95, 0, 66, 33, 95, 90, 78, 83, 116, 51, 95, 95, 50, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 55, 100, 101, 115, 116, 114, 111, 121, 69, 80, 115, 0, 66, 35, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 57, 95, 95, 108, 105, 98, 99, 112, 112, 95, 100, 101, 97, 108, 108, 111, 99, 97, 116, 101, 69, 80, 118, 109, 109, 0, 67, 68, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 68, 101, 97, 108, 108, 111, 99, 97, 116, 101, 67, 97, 108, 108, 101, 114, 51, 51, 95, 95, 100, 111, 95, 100, 101, 97, 108, 108, 111, 99, 97, 116, 101, 95, 104, 97, 110, 100, 108, 101, 95, 115, 105, 122, 101, 95, 97, 108, 105, 103, 110, 69, 80, 118, 109, 109, 0, 67, 61, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 68, 101, 97, 108, 108, 111, 99, 97, 116, 101, 67, 97, 108, 108, 101, 114, 50, 55, 95, 95, 100, 111, 95, 100, 101, 97, 108, 108, 111, 99, 97, 116, 101, 95, 104, 97, 110, 100, 108, 101, 95, 115, 105, 122, 101, 69, 80, 118, 109, 0, 68, 41, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 68, 101, 97, 108, 108, 111, 99, 97, 116, 101, 67, 97, 108, 108, 101, 114, 57, 95, 95, 100, 111, 95, 99, 97, 108, 108, 69, 80, 118, 0, 69, 68, 95, 90, 78, 83, 116, 51, 95, 95, 50, 50, 50, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 95, 101, 108, 101, 109, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 76, 105, 49, 69, 76, 98, 49, 69, 69, 53, 95, 95, 103, 101, 116, 69, 118, 0, 54, 52, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 49, 95, 95, 109, 97, 107, 101, 95, 105, 116, 101, 114, 69, 80, 115, 0, 70, 30, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 112, 76, 69, 108, 0, 71, 55, 95, 90, 78, 83, 116, 51, 95, 95, 50, 101, 113, 73, 80, 115, 83, 49, 95, 69, 69, 98, 82, 75, 78, 83, 95, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 84, 95, 69, 69, 82, 75, 78, 83, 50, 95, 73, 84, 48, 95, 69, 69, 0, 72, 32, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 67, 50, 69, 83, 49, 95, 0, 73, 34, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 52, 98, 97, 115, 101, 69, 118, 0, 19, 58, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 55, 95, 95, 97, 110, 110, 111, 116, 97, 116, 101, 95, 115, 104, 114, 105, 110, 107, 69, 109, 0, 74, 66, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 50, 54, 95, 95, 105, 110, 118, 97, 108, 105, 100, 97, 116, 101, 95, 97, 108, 108, 95, 105, 116, 101, 114, 97, 116, 111, 114, 115, 69, 118, 0, 75, 56, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 51, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 57, 95, 95, 101, 110, 100, 95, 99, 97, 112, 69, 118, 0, 62, 55, 95, 90, 78, 83, 116, 51, 95, 95, 50, 52, 109, 111, 118, 101, 73, 82, 115, 69, 69, 79, 78, 83, 95, 49, 54, 114, 101, 109, 111, 118, 101, 95, 114, 101, 102, 101, 114, 101, 110, 99, 101, 73, 84, 95, 69, 52, 116, 121, 112, 101, 69, 79, 83, 51, 95, 0, 54, 72, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 50, 50, 95, 95, 99, 111, 110, 115, 116, 114, 117, 99, 116, 95, 111, 110, 101, 95, 97, 116, 95, 101, 110, 100, 73, 74, 115, 69, 69, 69, 118, 68, 112, 79, 84, 95, 0, 76, 67, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 50, 49, 95, 95, 112, 117, 115, 104, 95, 98, 97, 99, 107, 95, 115, 108, 111, 119, 95, 112, 97, 116, 104, 73, 115, 69, 69, 118, 79, 84, 95, 0, 77, 57, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 73, 80, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 53, 102, 105, 114, 115, 116, 69, 118, 0, 54, 67, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 50, 49, 95, 67, 111, 110, 115, 116, 114, 117, 99, 116, 84, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 67, 50, 69, 82, 83, 51, 95, 109, 0, 78, 57, 95, 90, 78, 83, 116, 51, 95, 95, 50, 55, 102, 111, 114, 119, 97, 114, 100, 73, 115, 69, 69, 79, 84, 95, 82, 78, 83, 95, 49, 54, 114, 101, 109, 111, 118, 101, 95, 114, 101, 102, 101, 114, 101, 110, 99, 101, 73, 83, 49, 95, 69, 52, 116, 121, 112, 101, 69, 0, 54, 77, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 57, 99, 111, 110, 115, 116, 114, 117, 99, 116, 73, 115, 74, 115, 69, 69, 69, 118, 82, 83, 50, 95, 80, 84, 95, 68, 112, 79, 84, 48, 95, 0, 79, 63, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 50, 49, 95, 67, 111, 110, 115, 116, 114, 117, 99, 116, 84, 114, 97, 110, 115, 97, 99, 116, 105, 111, 110, 68, 50, 69, 118, 0, 80, 52, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 49, 95, 95, 114, 101, 99, 111, 109, 109, 101, 110, 100, 69, 109, 0, 81, 54, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 67, 50, 69, 109, 109, 83, 51, 95, 0, 82, 93, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 50, 54, 95, 95, 115, 119, 97, 112, 95, 111, 117, 116, 95, 99, 105, 114, 99, 117, 108, 97, 114, 95, 98, 117, 102, 102, 101, 114, 69, 82, 78, 83, 95, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 83, 50, 95, 69, 69, 0, 83, 50, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 68, 50, 69, 118, 0, 84, 53, 95, 90, 78, 83, 116, 51, 95, 95, 50, 50, 50, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 95, 101, 108, 101, 109, 73, 80, 115, 76, 105, 48, 69, 76, 98, 48, 69, 69, 53, 95, 95, 103, 101, 116, 69, 118, 0, 54, 110, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 49, 95, 95, 99, 111, 110, 115, 116, 114, 117, 99, 116, 73, 115, 74, 115, 69, 69, 69, 118, 78, 83, 95, 49, 55, 105, 110, 116, 101, 103, 114, 97, 108, 95, 99, 111, 110, 115, 116, 97, 110, 116, 73, 98, 76, 98, 49, 69, 69, 69, 82, 83, 50, 95, 80, 84, 95, 68, 112, 79, 84, 48, 95, 0, 85, 49, 95, 90, 78, 83, 116, 51, 95, 95, 50, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 57, 99, 111, 110, 115, 116, 114, 117, 99, 116, 73, 115, 74, 115, 69, 69, 69, 118, 80, 84, 95, 68, 112, 79, 84, 48, 95, 0, 86, 48, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 56, 109, 97, 120, 95, 115, 105, 122, 101, 69, 118, 0, 87, 27, 95, 90, 78, 83, 116, 51, 95, 95, 50, 51, 109, 97, 120, 73, 109, 69, 69, 82, 75, 84, 95, 83, 51, 95, 83, 51, 95, 0, 88, 67, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 73, 80, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 67, 50, 73, 68, 110, 83, 52, 95, 69, 69, 79, 84, 95, 79, 84, 48, 95, 0, 89, 56, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 55, 95, 95, 97, 108, 108, 111, 99, 69, 118, 0, 90, 61, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 56, 97, 108, 108, 111, 99, 97, 116, 101, 69, 82, 83, 50, 95, 109, 0, 91, 58, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 57, 95, 95, 101, 110, 100, 95, 99, 97, 112, 69, 118, 0, 92, 138, 2, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 52, 54, 95, 95, 99, 111, 110, 115, 116, 114, 117, 99, 116, 95, 98, 97, 99, 107, 119, 97, 114, 100, 95, 119, 105, 116, 104, 95, 101, 120, 99, 101, 112, 116, 105, 111, 110, 95, 103, 117, 97, 114, 97, 110, 116, 101, 101, 115, 73, 115, 69, 69, 78, 83, 95, 57, 101, 110, 97, 98, 108, 101, 95, 105, 102, 73, 88, 97, 97, 111, 111, 76, 95, 90, 78, 83, 95, 49, 55, 105, 110, 116, 101, 103, 114, 97, 108, 95, 99, 111, 110, 115, 116, 97, 110, 116, 73, 98, 76, 98, 49, 69, 69, 53, 118, 97, 108, 117, 101, 69, 69, 110, 116, 115, 114, 49, 53, 95, 95, 104, 97, 115, 95, 99, 111, 110, 115, 116, 114, 117, 99, 116, 73, 83, 50, 95, 80, 84, 95, 83, 56, 95, 69, 69, 53, 118, 97, 108, 117, 101, 115, 114, 51, 49, 105, 115, 95, 116, 114, 105, 118, 105, 97, 108, 108, 121, 95, 109, 111, 118, 101, 95, 99, 111, 110, 115, 116, 114, 117, 99, 116, 105, 98, 108, 101, 73, 83, 56, 95, 69, 69, 53, 118, 97, 108, 117, 101, 69, 118, 69, 52, 116, 121, 112, 101, 69, 82, 83, 50, 95, 83, 57, 95, 83, 57, 95, 82, 83, 57, 95, 0, 93, 122, 95, 90, 78, 83, 116, 51, 95, 95, 50, 52, 115, 119, 97, 112, 73, 80, 115, 69, 69, 78, 83, 95, 57, 101, 110, 97, 98, 108, 101, 95, 105, 102, 73, 88, 97, 97, 115, 114, 50, 49, 105, 115, 95, 109, 111, 118, 101, 95, 99, 111, 110, 115, 116, 114, 117, 99, 116, 105, 98, 108, 101, 73, 84, 95, 69, 69, 53, 118, 97, 108, 117, 101, 115, 114, 49, 56, 105, 115, 95, 109, 111, 118, 101, 95, 97, 115, 115, 105, 103, 110, 97, 98, 108, 101, 73, 83, 51, 95, 69, 69, 53, 118, 97, 108, 117, 101, 69, 118, 69, 52, 116, 121, 112, 101, 69, 82, 83, 51, 95, 83, 54, 95, 0, 94, 55, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 52, 95, 95, 97, 110, 110, 111, 116, 97, 116, 101, 95, 110, 101, 119, 69, 109, 0, 95, 54, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 53, 99, 108, 101, 97, 114, 69, 118, 0, 96, 58, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 56, 99, 97, 112, 97, 99, 105, 116, 121, 69, 118, 0, 97, 55, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 51, 95, 95, 118, 101, 99, 116, 111, 114, 95, 98, 97, 115, 101, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 55, 95, 95, 97, 108, 108, 111, 99, 69, 118, 0, 62, 61, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 56, 109, 97, 120, 95, 115, 105, 122, 101, 69, 82, 75, 83, 50, 95, 0, 98, 34, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 52, 110, 117, 109, 101, 114, 105, 99, 95, 108, 105, 109, 105, 116, 115, 73, 108, 69, 51, 109, 97, 120, 69, 118, 0, 99, 27, 95, 90, 78, 83, 116, 51, 95, 95, 50, 51, 109, 105, 110, 73, 109, 69, 69, 82, 75, 84, 95, 83, 51, 95, 83, 51, 95, 0, 100, 45, 95, 90, 78, 83, 116, 51, 95, 95, 50, 51, 109, 97, 120, 73, 109, 78, 83, 95, 54, 95, 95, 108, 101, 115, 115, 73, 109, 109, 69, 69, 69, 69, 82, 75, 84, 95, 83, 53, 95, 83, 53, 95, 84, 48, 95, 0, 101, 45, 95, 90, 78, 83, 116, 51, 95, 95, 50, 51, 109, 105, 110, 73, 109, 78, 83, 95, 54, 95, 95, 108, 101, 115, 115, 73, 109, 109, 69, 69, 69, 69, 82, 75, 84, 95, 83, 53, 95, 83, 53, 95, 84, 48, 95, 0, 102, 94, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 48, 95, 95, 109, 97, 120, 95, 115, 105, 122, 101, 69, 78, 83, 95, 49, 55, 105, 110, 116, 101, 103, 114, 97, 108, 95, 99, 111, 110, 115, 116, 97, 110, 116, 73, 98, 76, 98, 49, 69, 69, 69, 82, 75, 83, 50, 95, 0, 98, 59, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 73, 80, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 54, 115, 101, 99, 111, 110, 100, 69, 118, 0, 54, 47, 95, 90, 78, 83, 116, 51, 95, 95, 50, 50, 51, 95, 95, 108, 105, 98, 99, 112, 112, 95, 110, 117, 109, 101, 114, 105, 99, 95, 108, 105, 109, 105, 116, 115, 73, 108, 76, 98, 49, 69, 69, 51, 109, 97, 120, 69, 118, 0, 99, 30, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 54, 95, 95, 108, 101, 115, 115, 73, 109, 109, 69, 99, 108, 69, 82, 75, 109, 83, 51, 95, 0, 103, 34, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 56, 109, 97, 120, 95, 115, 105, 122, 101, 69, 118, 0, 98, 69, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 50, 50, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 95, 101, 108, 101, 109, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 76, 105, 49, 69, 76, 98, 49, 69, 69, 53, 95, 95, 103, 101, 116, 69, 118, 0, 54, 74, 95, 90, 78, 83, 116, 51, 95, 95, 50, 55, 102, 111, 114, 119, 97, 114, 100, 73, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 69, 79, 84, 95, 82, 78, 83, 95, 49, 54, 114, 101, 109, 111, 118, 101, 95, 114, 101, 102, 101, 114, 101, 110, 99, 101, 73, 83, 52, 95, 69, 52, 116, 121, 112, 101, 69, 0, 54, 73, 95, 90, 78, 83, 116, 51, 95, 95, 50, 50, 50, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 95, 101, 108, 101, 109, 73, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 76, 105, 49, 69, 76, 98, 48, 69, 69, 67, 50, 73, 83, 51, 95, 118, 69, 69, 79, 84, 95, 0, 73, 36, 95, 90, 78, 83, 116, 51, 95, 95, 50, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 56, 97, 108, 108, 111, 99, 97, 116, 101, 69, 109, 80, 75, 118, 0, 104, 59, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 73, 80, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 54, 115, 101, 99, 111, 110, 100, 69, 118, 0, 105, 58, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 73, 80, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 53, 102, 105, 114, 115, 116, 69, 118, 0, 54, 35, 95, 90, 78, 83, 116, 51, 95, 95, 50, 50, 48, 95, 95, 116, 104, 114, 111, 119, 95, 108, 101, 110, 103, 116, 104, 95, 101, 114, 114, 111, 114, 69, 80, 75, 99, 0, 106, 31, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 108, 105, 98, 99, 112, 112, 95, 97, 108, 108, 111, 99, 97, 116, 101, 69, 109, 109, 0, 107, 69, 95, 90, 78, 83, 116, 51, 95, 95, 50, 50, 50, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 95, 101, 108, 101, 109, 73, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 76, 105, 49, 69, 76, 98, 48, 69, 69, 53, 95, 95, 103, 101, 116, 69, 118, 0, 19, 56, 95, 90, 78, 83, 116, 51, 95, 95, 50, 52, 109, 111, 118, 101, 73, 82, 80, 115, 69, 69, 79, 78, 83, 95, 49, 54, 114, 101, 109, 111, 118, 101, 95, 114, 101, 102, 101, 114, 101, 110, 99, 101, 73, 84, 95, 69, 52, 116, 121, 112, 101, 69, 79, 83, 52, 95, 0, 54, 68, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 55, 95, 95, 100, 101, 115, 116, 114, 117, 99, 116, 95, 97, 116, 95, 101, 110, 100, 69, 80, 115, 0, 108, 59, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 57, 95, 95, 101, 110, 100, 95, 99, 97, 112, 69, 118, 0, 92, 98, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 52, 95, 95, 115, 112, 108, 105, 116, 95, 98, 117, 102, 102, 101, 114, 73, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 55, 95, 95, 100, 101, 115, 116, 114, 117, 99, 116, 95, 97, 116, 95, 101, 110, 100, 69, 80, 115, 78, 83, 95, 49, 55, 105, 110, 116, 101, 103, 114, 97, 108, 95, 99, 111, 110, 115, 116, 97, 110, 116, 73, 98, 76, 98, 48, 69, 69, 69, 0, 109, 59, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 55, 95, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 95, 112, 97, 105, 114, 73, 80, 115, 82, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 53, 102, 105, 114, 115, 116, 69, 118, 0, 54, 56, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 114, 101, 118, 101, 114, 115, 101, 95, 105, 116, 101, 114, 97, 116, 111, 114, 73, 78, 83, 95, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 69, 69, 67, 50, 69, 83, 51, 95, 0, 110, 30, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 109, 109, 69, 118, 0, 111, 58, 95, 90, 78, 75, 83, 116, 51, 95, 95, 50, 49, 54, 114, 101, 118, 101, 114, 115, 101, 95, 105, 116, 101, 114, 97, 116, 111, 114, 73, 78, 83, 95, 49, 49, 95, 95, 119, 114, 97, 112, 95, 105, 116, 101, 114, 73, 80, 115, 69, 69, 69, 52, 98, 97, 115, 101, 69, 118, 0, 105, 47, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 56, 112, 111, 112, 95, 98, 97, 99, 107, 69, 118, 0, 112, 50, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 57, 112, 117, 115, 104, 95, 98, 97, 99, 107, 69, 82, 75, 115, 0, 120, 58, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 55, 95, 95, 100, 101, 115, 116, 114, 117, 99, 116, 95, 97, 116, 95, 101, 110, 100, 69, 80, 115, 0, 123, 68, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 50, 55, 95, 95, 105, 110, 118, 97, 108, 105, 100, 97, 116, 101, 95, 105, 116, 101, 114, 97, 116, 111, 114, 115, 95, 112, 97, 115, 116, 69, 80, 115, 0, 66, 74, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 50, 50, 95, 95, 99, 111, 110, 115, 116, 114, 117, 99, 116, 95, 111, 110, 101, 95, 97, 116, 95, 101, 110, 100, 73, 74, 82, 75, 115, 69, 69, 69, 118, 68, 112, 79, 84, 95, 0, 76, 69, 95, 90, 78, 83, 116, 51, 95, 95, 50, 54, 118, 101, 99, 116, 111, 114, 73, 115, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 50, 49, 95, 95, 112, 117, 115, 104, 95, 98, 97, 99, 107, 95, 115, 108, 111, 119, 95, 112, 97, 116, 104, 73, 82, 75, 115, 69, 69, 118, 79, 84, 95, 0, 77, 59, 95, 90, 78, 83, 116, 51, 95, 95, 50, 55, 102, 111, 114, 119, 97, 114, 100, 73, 82, 75, 115, 69, 69, 79, 84, 95, 82, 78, 83, 95, 49, 54, 114, 101, 109, 111, 118, 101, 95, 114, 101, 102, 101, 114, 101, 110, 99, 101, 73, 83, 51, 95, 69, 52, 116, 121, 112, 101, 69, 0, 54, 79, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 57, 99, 111, 110, 115, 116, 114, 117, 99, 116, 73, 115, 74, 82, 75, 115, 69, 69, 69, 118, 82, 83, 50, 95, 80, 84, 95, 68, 112, 79, 84, 48, 95, 0, 79, 112, 95, 90, 78, 83, 116, 51, 95, 95, 50, 49, 54, 97, 108, 108, 111, 99, 97, 116, 111, 114, 95, 116, 114, 97, 105, 116, 115, 73, 78, 83, 95, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 69, 69, 49, 49, 95, 95, 99, 111, 110, 115, 116, 114, 117, 99, 116, 73, 115, 74, 82, 75, 115, 69, 69, 69, 118, 78, 83, 95, 49, 55, 105, 110, 116, 101, 103, 114, 97, 108, 95, 99, 111, 110, 115, 116, 97, 110, 116, 73, 98, 76, 98, 49, 69, 69, 69, 82, 83, 50, 95, 80, 84, 95, 68, 112, 79, 84, 48, 95, 0, 85, 51, 95, 90, 78, 83, 116, 51, 95, 95, 50, 57, 97, 108, 108, 111, 99, 97, 116, 111, 114, 73, 115, 69, 57, 99, 111, 110, 115, 116, 114, 117, 99, 116, 73, 115, 74, 82, 75, 115, 69, 69, 69, 118, 80, 84, 95, 68, 112, 79, 84, 48, 95, 0, 86, 16, 116, 114, 101, 101, 95, 115, 105, 116, 116, 101, 114, 95, 121, 97, 109, 108, 0, 127, 12, 95, 95, 100, 115, 111, 95, 104, 97, 110, 100, 108, 101, 3, 8, 24, 95, 95, 119, 97, 115, 109, 95, 97, 112, 112, 108, 121, 95, 100, 97, 116, 97, 95, 114, 101, 108, 111, 99, 115, 0, 7, 9, 10, 1, 0, 35, 2, 11, 3, 47, 48, 128, 1, 10, 217, 147, 1, 123, 4, 0, 16, 7, 11, 163, 39, 0, 35, 1, 65, 248, 23, 106, 35, 1, 65, 208, 147, 5, 106, 54, 2, 0, 35, 1, 65, 252, 23, 106, 35, 1, 65, 224, 24, 106, 54, 2, 0, 35, 1, 65, 128, 24, 106, 35, 1, 65, 240, 199, 3, 106, 54, 2, 0, 35, 1, 65, 132, 24, 106, 35, 1, 65, 192, 166, 8, 106, 54, 2, 0, 35, 1, 65, 136, 24, 106, 35, 1, 65, 192, 246, 3, 106, 54, 2, 0, 35, 1, 65, 140, 24, 106, 35, 1, 65, 212, 255, 3, 106, 54, 2, 0, 35, 1, 65, 144, 24, 106, 35, 1, 65, 240, 0, 106, 54, 2, 0, 35, 1, 65, 148, 24, 106, 35, 1, 65, 160, 1, 106, 54, 2, 0, 35, 1, 65, 152, 24, 106, 35, 1, 65, 224, 16, 106, 54, 2, 0, 35, 1, 65, 156, 24, 106, 35, 1, 65, 224, 255, 3, 106, 54, 2, 0, 35, 1, 65, 160, 24, 106, 35, 1, 65, 176, 132, 4, 106, 54, 2, 0, 35, 1, 65, 164, 24, 106, 35, 1, 65, 160, 133, 4, 106, 54, 2, 0, 35, 1, 65, 168, 24, 106, 35, 1, 65, 160, 134, 4, 106, 54, 2, 0, 35, 1, 65, 172, 24, 106, 35, 2, 65, 2, 106, 54, 2, 0, 35, 1, 65, 184, 24, 106, 35, 1, 65, 208, 183, 4, 106, 54, 2, 0, 35, 1, 65, 188, 24, 106, 35, 1, 65, 240, 145, 5, 106, 54, 2, 0, 35, 1, 65, 192, 24, 106, 35, 3, 54, 2, 0, 35, 1, 65, 196, 24, 106, 35, 4, 54, 2, 0, 35, 1, 65, 200, 24, 106, 35, 5, 54, 2, 0, 35, 1, 65, 204, 24, 106, 35, 6, 54, 2, 0, 35, 1, 65, 208, 24, 106, 35, 7, 54, 2, 0, 35, 1, 65, 192, 246, 3, 106, 35, 1, 65, 208, 1, 106, 54, 2, 0, 35, 1, 65, 196, 246, 3, 106, 35, 1, 65, 212, 1, 106, 54, 2, 0, 35, 1, 65, 200, 246, 3, 106, 35, 1, 65, 217, 1, 106, 54, 2, 0, 35, 1, 65, 204, 246, 3, 106, 35, 1, 65, 232, 1, 106, 54, 2, 0, 35, 1, 65, 208, 246, 3, 106, 35, 1, 65, 245, 1, 106, 54, 2, 0, 35, 1, 65, 212, 246, 3, 106, 35, 1, 65, 132, 2, 106, 54, 2, 0, 35, 1, 65, 216, 246, 3, 106, 35, 1, 65, 143, 2, 106, 54, 2, 0, 35, 1, 65, 220, 246, 3, 106, 35, 1, 65, 154, 2, 106, 54, 2, 0, 35, 1, 65, 224, 246, 3, 106, 35, 1, 65, 169, 2, 106, 54, 2, 0, 35, 1, 65, 228, 246, 3, 106, 35, 1, 65, 189, 2, 106, 54, 2, 0, 35, 1, 65, 232, 246, 3, 106, 35, 1, 65, 193, 2, 106, 54, 2, 0, 35, 1, 65, 236, 246, 3, 106, 35, 1, 65, 197, 2, 106, 54, 2, 0, 35, 1, 65, 240, 246, 3, 106, 35, 1, 65, 197, 2, 106, 54, 2, 0, 35, 1, 65, 244, 246, 3, 106, 35, 1, 65, 197, 2, 106, 54, 2, 0, 35, 1, 65, 248, 246, 3, 106, 35, 1, 65, 199, 2, 106, 54, 2, 0, 35, 1, 65, 252, 246, 3, 106, 35, 1, 65, 199, 2, 106, 54, 2, 0, 35, 1, 65, 128, 247, 3, 106, 35, 1, 65, 199, 2, 106, 54, 2, 0, 35, 1, 65, 132, 247, 3, 106, 35, 1, 65, 201, 2, 106, 54, 2, 0, 35, 1, 65, 136, 247, 3, 106, 35, 1, 65, 201, 2, 106, 54, 2, 0, 35, 1, 65, 140, 247, 3, 106, 35, 1, 65, 201, 2, 106, 54, 2, 0, 35, 1, 65, 144, 247, 3, 106, 35, 1, 65, 201, 2, 106, 54, 2, 0, 35, 1, 65, 148, 247, 3, 106, 35, 1, 65, 203, 2, 106, 54, 2, 0, 35, 1, 65, 152, 247, 3, 106, 35, 1, 65, 203, 2, 106, 54, 2, 0, 35, 1, 65, 156, 247, 3, 106, 35, 1, 65, 205, 2, 106, 54, 2, 0, 35, 1, 65, 160, 247, 3, 106, 35, 1, 65, 205, 2, 106, 54, 2, 0, 35, 1, 65, 164, 247, 3, 106, 35, 1, 65, 207, 2, 106, 54, 2, 0, 35, 1, 65, 168, 247, 3, 106, 35, 1, 65, 223, 2, 106, 54, 2, 0, 35, 1, 65, 172, 247, 3, 106, 35, 1, 65, 223, 2, 106, 54, 2, 0, 35, 1, 65, 176, 247, 3, 106, 35, 1, 65, 223, 2, 106, 54, 2, 0, 35, 1, 65, 180, 247, 3, 106, 35, 1, 65, 225, 2, 106, 54, 2, 0, 35, 1, 65, 184, 247, 3, 106, 35, 1, 65, 225, 2, 106, 54, 2, 0, 35, 1, 65, 188, 247, 3, 106, 35, 1, 65, 227, 2, 106, 54, 2, 0, 35, 1, 65, 192, 247, 3, 106, 35, 1, 65, 227, 2, 106, 54, 2, 0, 35, 1, 65, 196, 247, 3, 106, 35, 1, 65, 227, 2, 106, 54, 2, 0, 35, 1, 65, 200, 247, 3, 106, 35, 1, 65, 229, 2, 106, 54, 2, 0, 35, 1, 65, 204, 247, 3, 106, 35, 1, 65, 229, 2, 106, 54, 2, 0, 35, 1, 65, 208, 247, 3, 106, 35, 1, 65, 231, 2, 106, 54, 2, 0, 35, 1, 65, 212, 247, 3, 106, 35, 1, 65, 231, 2, 106, 54, 2, 0, 35, 1, 65, 216, 247, 3, 106, 35, 1, 65, 199, 2, 106, 54, 2, 0, 35, 1, 65, 220, 247, 3, 106, 35, 1, 65, 199, 2, 106, 54, 2, 0, 35, 1, 65, 224, 247, 3, 106, 35, 1, 65, 201, 2, 106, 54, 2, 0, 35, 1, 65, 228, 247, 3, 106, 35, 1, 65, 201, 2, 106, 54, 2, 0, 35, 1, 65, 232, 247, 3, 106, 35, 1, 65, 201, 2, 106, 54, 2, 0, 35, 1, 65, 236, 247, 3, 106, 35, 1, 65, 201, 2, 106, 54, 2, 0, 35, 1, 65, 240, 247, 3, 106, 35, 1, 65, 233, 2, 106, 54, 2, 0, 35, 1, 65, 244, 247, 3, 106, 35, 1, 65, 233, 2, 106, 54, 2, 0, 35, 1, 65, 248, 247, 3, 106, 35, 1, 65, 233, 2, 106, 54, 2, 0, 35, 1, 65, 252, 247, 3, 106, 35, 1, 65, 235, 2, 106, 54, 2, 0, 35, 1, 65, 128, 248, 3, 106, 35, 1, 65, 250, 2, 106, 54, 2, 0, 35, 1, 65, 132, 248, 3, 106, 35, 1, 65, 138, 3, 106, 54, 2, 0, 35, 1, 65, 136, 248, 3, 106, 35, 1, 65, 138, 3, 106, 54, 2, 0, 35, 1, 65, 140, 248, 3, 106, 35, 1, 65, 138, 3, 106, 54, 2, 0, 35, 1, 65, 144, 248, 3, 106, 35, 1, 65, 138, 3, 106, 54, 2, 0, 35, 1, 65, 148, 248, 3, 106, 35, 1, 65, 233, 2, 106, 54, 2, 0, 35, 1, 65, 152, 248, 3, 106, 35, 1, 65, 233, 2, 106, 54, 2, 0, 35, 1, 65, 156, 248, 3, 106, 35, 1, 65, 154, 3, 106, 54, 2, 0, 35, 1, 65, 160, 248, 3, 106, 35, 1, 65, 154, 3, 106, 54, 2, 0, 35, 1, 65, 164, 248, 3, 106, 35, 1, 65, 154, 3, 106, 54, 2, 0, 35, 1, 65, 168, 248, 3, 106, 35, 1, 65, 156, 3, 106, 54, 2, 0, 35, 1, 65, 172, 248, 3, 106, 35, 1, 65, 171, 3, 106, 54, 2, 0, 35, 1, 65, 176, 248, 3, 106, 35, 1, 65, 138, 3, 106, 54, 2, 0, 35, 1, 65, 180, 248, 3, 106, 35, 1, 65, 138, 3, 106, 54, 2, 0, 35, 1, 65, 184, 248, 3, 106, 35, 1, 65, 154, 3, 106, 54, 2, 0, 35, 1, 65, 188, 248, 3, 106, 35, 1, 65, 154, 3, 106, 54, 2, 0, 35, 1, 65, 192, 248, 3, 106, 35, 1, 65, 187, 3, 106, 54, 2, 0, 35, 1, 65, 196, 248, 3, 106, 35, 1, 65, 187, 3, 106, 54, 2, 0, 35, 1, 65, 200, 248, 3, 106, 35, 1, 65, 187, 3, 106, 54, 2, 0, 35, 1, 65, 204, 248, 3, 106, 35, 1, 65, 187, 3, 106, 54, 2, 0, 35, 1, 65, 208, 248, 3, 106, 35, 1, 65, 187, 3, 106, 54, 2, 0, 35, 1, 65, 212, 248, 3, 106, 35, 1, 65, 199, 3, 106, 54, 2, 0, 35, 1, 65, 216, 248, 3, 106, 35, 1, 65, 199, 3, 106, 54, 2, 0, 35, 1, 65, 220, 248, 3, 106, 35, 1, 65, 199, 3, 106, 54, 2, 0, 35, 1, 65, 224, 248, 3, 106, 35, 1, 65, 199, 3, 106, 54, 2, 0, 35, 1, 65, 228, 248, 3, 106, 35, 1, 65, 199, 3, 106, 54, 2, 0, 35, 1, 65, 232, 248, 3, 106, 35, 1, 65, 214, 3, 106, 54, 2, 0, 35, 1, 65, 236, 248, 3, 106, 35, 1, 65, 214, 3, 106, 54, 2, 0, 35, 1, 65, 240, 248, 3, 106, 35, 1, 65, 214, 3, 106, 54, 2, 0, 35, 1, 65, 244, 248, 3, 106, 35, 1, 65, 214, 3, 106, 54, 2, 0, 35, 1, 65, 248, 248, 3, 106, 35, 1, 65, 214, 3, 106, 54, 2, 0, 35, 1, 65, 252, 248, 3, 106, 35, 1, 65, 229, 3, 106, 54, 2, 0, 35, 1, 65, 128, 249, 3, 106, 35, 1, 65, 229, 3, 106, 54, 2, 0, 35, 1, 65, 132, 249, 3, 106, 35, 1, 65, 229, 3, 106, 54, 2, 0, 35, 1, 65, 136, 249, 3, 106, 35, 1, 65, 229, 3, 106, 54, 2, 0, 35, 1, 65, 140, 249, 3, 106, 35, 1, 65, 229, 3, 106, 54, 2, 0, 35, 1, 65, 144, 249, 3, 106, 35, 1, 65, 242, 3, 106, 54, 2, 0, 35, 1, 65, 148, 249, 3, 106, 35, 1, 65, 242, 3, 106, 54, 2, 0, 35, 1, 65, 152, 249, 3, 106, 35, 1, 65, 242, 3, 106, 54, 2, 0, 35, 1, 65, 156, 249, 3, 106, 35, 1, 65, 242, 3, 106, 54, 2, 0, 35, 1, 65, 160, 249, 3, 106, 35, 1, 65, 242, 3, 106, 54, 2, 0, 35, 1, 65, 164, 249, 3, 106, 35, 1, 65, 242, 3, 106, 54, 2, 0, 35, 1, 65, 168, 249, 3, 106, 35, 1, 65, 242, 3, 106, 54, 2, 0, 35, 1, 65, 172, 249, 3, 106, 35, 1, 65, 242, 3, 106, 54, 2, 0, 35, 1, 65, 176, 249, 3, 106, 35, 1, 65, 242, 3, 106, 54, 2, 0, 35, 1, 65, 180, 249, 3, 106, 35, 1, 65, 128, 4, 106, 54, 2, 0, 35, 1, 65, 184, 249, 3, 106, 35, 1, 65, 128, 4, 106, 54, 2, 0, 35, 1, 65, 188, 249, 3, 106, 35, 1, 65, 128, 4, 106, 54, 2, 0, 35, 1, 65, 192, 249, 3, 106, 35, 1, 65, 132, 4, 106, 54, 2, 0, 35, 1, 65, 196, 249, 3, 106, 35, 1, 65, 132, 4, 106, 54, 2, 0, 35, 1, 65, 200, 249, 3, 106, 35, 1, 65, 132, 4, 106, 54, 2, 0, 35, 1, 65, 204, 249, 3, 106, 35, 1, 65, 134, 4, 106, 54, 2, 0, 35, 1, 65, 208, 249, 3, 106, 35, 1, 65, 146, 4, 106, 54, 2, 0, 35, 1, 65, 212, 249, 3, 106, 35, 1, 65, 146, 4, 106, 54, 2, 0, 35, 1, 65, 216, 249, 3, 106, 35, 1, 65, 146, 4, 106, 54, 2, 0, 35, 1, 65, 220, 249, 3, 106, 35, 1, 65, 148, 4, 106, 54, 2, 0, 35, 1, 65, 224, 249, 3, 106, 35, 1, 65, 159, 4, 106, 54, 2, 0, 35, 1, 65, 228, 249, 3, 106, 35, 1, 65, 163, 4, 106, 54, 2, 0, 35, 1, 65, 232, 249, 3, 106, 35, 1, 65, 171, 4, 106, 54, 2, 0, 35, 1, 65, 236, 249, 3, 106, 35, 1, 65, 178, 4, 106, 54, 2, 0, 35, 1, 65, 240, 249, 3, 106, 35, 1, 65, 199, 4, 106, 54, 2, 0, 35, 1, 65, 244, 249, 3, 106, 35, 1, 65, 221, 4, 106, 54, 2, 0, 35, 1, 65, 248, 249, 3, 106, 35, 1, 65, 243, 4, 106, 54, 2, 0, 35, 1, 65, 252, 249, 3, 106, 35, 1, 65, 138, 5, 106, 54, 2, 0, 35, 1, 65, 128, 250, 3, 106, 35, 1, 65, 155, 5, 106, 54, 2, 0, 35, 1, 65, 132, 250, 3, 106, 35, 1, 65, 173, 5, 106, 54, 2, 0, 35, 1, 65, 136, 250, 3, 106, 35, 1, 65, 191, 5, 106, 54, 2, 0, 35, 1, 65, 140, 250, 3, 106, 35, 1, 65, 210, 5, 106, 54, 2, 0, 35, 1, 65, 144, 250, 3, 106, 35, 1, 65, 223, 5, 106, 54, 2, 0, 35, 1, 65, 148, 250, 3, 106, 35, 1, 65, 232, 5, 106, 54, 2, 0, 35, 1, 65, 152, 250, 3, 106, 35, 1, 65, 241, 5, 106, 54, 2, 0, 35, 1, 65, 156, 250, 3, 106, 35, 1, 65, 250, 5, 106, 54, 2, 0, 35, 1, 65, 160, 250, 3, 106, 35, 1, 65, 250, 5, 106, 54, 2, 0, 35, 1, 65, 164, 250, 3, 106, 35, 1, 65, 250, 5, 106, 54, 2, 0, 35, 1, 65, 168, 250, 3, 106, 35, 1, 65, 250, 5, 106, 54, 2, 0, 35, 1, 65, 172, 250, 3, 106, 35, 1, 65, 250, 5, 106, 54, 2, 0, 35, 1, 65, 176, 250, 3, 106, 35, 1, 65, 131, 6, 106, 54, 2, 0, 35, 1, 65, 180, 250, 3, 106, 35, 1, 65, 144, 6, 106, 54, 2, 0, 35, 1, 65, 184, 250, 3, 106, 35, 1, 65, 151, 6, 106, 54, 2, 0, 35, 1, 65, 188, 250, 3, 106, 35, 1, 65, 166, 6, 106, 54, 2, 0, 35, 1, 65, 192, 250, 3, 106, 35, 1, 65, 180, 6, 106, 54, 2, 0, 35, 1, 65, 196, 250, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 200, 250, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 204, 250, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 208, 250, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 212, 250, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 216, 250, 3, 106, 35, 1, 65, 209, 6, 106, 54, 2, 0, 35, 1, 65, 220, 250, 3, 106, 35, 1, 65, 216, 6, 106, 54, 2, 0, 35, 1, 65, 224, 250, 3, 106, 35, 1, 65, 224, 6, 106, 54, 2, 0, 35, 1, 65, 228, 250, 3, 106, 35, 1, 65, 235, 6, 106, 54, 2, 0, 35, 1, 65, 232, 250, 3, 106, 35, 1, 65, 247, 6, 106, 54, 2, 0, 35, 1, 65, 236, 250, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 240, 250, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 244, 250, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 248, 250, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 252, 250, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 128, 251, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 132, 251, 3, 106, 35, 1, 65, 141, 7, 106, 54, 2, 0, 35, 1, 65, 136, 251, 3, 106, 35, 1, 65, 141, 7, 106, 54, 2, 0, 35, 1, 65, 140, 251, 3, 106, 35, 1, 65, 141, 7, 106, 54, 2, 0, 35, 1, 65, 144, 251, 3, 106, 35, 1, 65, 156, 7, 106, 54, 2, 0, 35, 1, 65, 148, 251, 3, 106, 35, 1, 65, 156, 7, 106, 54, 2, 0, 35, 1, 65, 152, 251, 3, 106, 35, 1, 65, 156, 7, 106, 54, 2, 0, 35, 1, 65, 156, 251, 3, 106, 35, 1, 65, 176, 7, 106, 54, 2, 0, 35, 1, 65, 160, 251, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 164, 251, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 168, 251, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 172, 251, 3, 106, 35, 1, 65, 193, 7, 106, 54, 2, 0, 35, 1, 65, 176, 251, 3, 106, 35, 1, 65, 193, 7, 106, 54, 2, 0, 35, 1, 65, 180, 251, 3, 106, 35, 1, 65, 207, 7, 106, 54, 2, 0, 35, 1, 65, 184, 251, 3, 106, 35, 1, 65, 222, 7, 106, 54, 2, 0, 35, 1, 65, 188, 251, 3, 106, 35, 1, 65, 238, 7, 106, 54, 2, 0, 35, 1, 65, 192, 251, 3, 106, 35, 1, 65, 253, 7, 106, 54, 2, 0, 35, 1, 65, 196, 251, 3, 106, 35, 1, 65, 253, 7, 106, 54, 2, 0, 35, 1, 65, 200, 251, 3, 106, 35, 1, 65, 253, 7, 106, 54, 2, 0, 35, 1, 65, 204, 251, 3, 106, 35, 1, 65, 144, 8, 106, 54, 2, 0, 35, 1, 65, 208, 251, 3, 106, 35, 1, 65, 159, 8, 106, 54, 2, 0, 35, 1, 65, 212, 251, 3, 106, 35, 1, 65, 175, 8, 106, 54, 2, 0, 35, 1, 65, 216, 251, 3, 106, 35, 1, 65, 190, 8, 106, 54, 2, 0, 35, 1, 65, 220, 251, 3, 106, 35, 1, 65, 205, 8, 106, 54, 2, 0, 35, 1, 65, 224, 251, 3, 106, 35, 1, 65, 221, 8, 106, 54, 2, 0, 35, 1, 65, 228, 251, 3, 106, 35, 1, 65, 253, 7, 106, 54, 2, 0, 35, 1, 65, 232, 251, 3, 106, 35, 1, 65, 253, 7, 106, 54, 2, 0, 35, 1, 65, 236, 251, 3, 106, 35, 1, 65, 253, 7, 106, 54, 2, 0, 35, 1, 65, 240, 251, 3, 106, 35, 1, 65, 236, 8, 106, 54, 2, 0, 35, 1, 65, 244, 251, 3, 106, 35, 1, 65, 253, 8, 106, 54, 2, 0, 35, 1, 65, 248, 251, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 252, 251, 3, 106, 35, 1, 65, 130, 7, 106, 54, 2, 0, 35, 1, 65, 128, 252, 3, 106, 35, 1, 65, 142, 9, 106, 54, 2, 0, 35, 1, 65, 132, 252, 3, 106, 35, 1, 65, 142, 9, 106, 54, 2, 0, 35, 1, 65, 136, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 140, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 144, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 148, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 152, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 156, 252, 3, 106, 35, 1, 65, 155, 9, 106, 54, 2, 0, 35, 1, 65, 160, 252, 3, 106, 35, 1, 65, 155, 9, 106, 54, 2, 0, 35, 1, 65, 164, 252, 3, 106, 35, 1, 65, 155, 9, 106, 54, 2, 0, 35, 1, 65, 168, 252, 3, 106, 35, 1, 65, 155, 9, 106, 54, 2, 0, 35, 1, 65, 172, 252, 3, 106, 35, 1, 65, 155, 9, 106, 54, 2, 0, 35, 1, 65, 176, 252, 3, 106, 35, 1, 65, 169, 9, 106, 54, 2, 0, 35, 1, 65, 180, 252, 3, 106, 35, 1, 65, 182, 9, 106, 54, 2, 0, 35, 1, 65, 184, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 188, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 192, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 196, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 200, 252, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 204, 252, 3, 106, 35, 1, 65, 199, 9, 106, 54, 2, 0, 35, 1, 65, 208, 252, 3, 106, 35, 1, 65, 199, 9, 106, 54, 2, 0, 35, 1, 65, 212, 252, 3, 106, 35, 1, 65, 199, 9, 106, 54, 2, 0, 35, 1, 65, 216, 252, 3, 106, 35, 1, 65, 199, 9, 106, 54, 2, 0, 35, 1, 65, 220, 252, 3, 106, 35, 1, 65, 199, 9, 106, 54, 2, 0, 35, 1, 65, 224, 252, 3, 106, 35, 1, 65, 212, 9, 106, 54, 2, 0, 35, 1, 65, 228, 252, 3, 106, 35, 1, 65, 225, 9, 106, 54, 2, 0, 35, 1, 65, 232, 252, 3, 106, 35, 1, 65, 242, 9, 106, 54, 2, 0, 35, 1, 65, 236, 252, 3, 106, 35, 1, 65, 129, 10, 106, 54, 2, 0, 35, 1, 65, 240, 252, 3, 106, 35, 1, 65, 145, 10, 106, 54, 2, 0, 35, 1, 65, 244, 252, 3, 106, 35, 1, 65, 160, 10, 106, 54, 2, 0, 35, 1, 65, 248, 252, 3, 106, 35, 1, 65, 176, 10, 106, 54, 2, 0, 35, 1, 65, 252, 252, 3, 106, 35, 1, 65, 195, 10, 106, 54, 2, 0, 35, 1, 65, 128, 253, 3, 106, 35, 1, 65, 212, 10, 106, 54, 2, 0, 35, 1, 65, 132, 253, 3, 106, 35, 1, 65, 229, 10, 106, 54, 2, 0, 35, 1, 65, 136, 253, 3, 106, 35, 1, 65, 250, 10, 106, 54, 2, 0, 35, 1, 65, 140, 253, 3, 106, 35, 1, 65, 137, 11, 106, 54, 2, 0, 35, 1, 65, 144, 253, 3, 106, 35, 1, 65, 153, 11, 106, 54, 2, 0, 35, 1, 65, 148, 253, 3, 106, 35, 1, 65, 168, 11, 106, 54, 2, 0, 35, 1, 65, 152, 253, 3, 106, 35, 1, 65, 184, 11, 106, 54, 2, 0, 35, 1, 65, 156, 253, 3, 106, 35, 1, 65, 203, 11, 106, 54, 2, 0, 35, 1, 65, 160, 253, 3, 106, 35, 1, 65, 203, 11, 106, 54, 2, 0, 35, 1, 65, 164, 253, 3, 106, 35, 1, 65, 203, 11, 106, 54, 2, 0, 35, 1, 65, 168, 253, 3, 106, 35, 1, 65, 213, 11, 106, 54, 2, 0, 35, 1, 65, 172, 253, 3, 106, 35, 1, 65, 230, 11, 106, 54, 2, 0, 35, 1, 65, 176, 253, 3, 106, 35, 1, 65, 248, 11, 106, 54, 2, 0, 35, 1, 65, 180, 253, 3, 106, 35, 1, 65, 138, 12, 106, 54, 2, 0, 35, 1, 65, 184, 253, 3, 106, 35, 1, 65, 157, 12, 106, 54, 2, 0, 35, 1, 65, 188, 253, 3, 106, 35, 1, 65, 176, 12, 106, 54, 2, 0, 35, 1, 65, 192, 253, 3, 106, 35, 1, 65, 195, 12, 106, 54, 2, 0, 35, 1, 65, 196, 253, 3, 106, 35, 1, 65, 215, 12, 106, 54, 2, 0, 35, 1, 65, 200, 253, 3, 106, 35, 1, 65, 238, 12, 106, 54, 2, 0, 35, 1, 65, 204, 253, 3, 106, 35, 1, 65, 129, 13, 106, 54, 2, 0, 35, 1, 65, 208, 253, 3, 106, 35, 1, 65, 149, 13, 106, 54, 2, 0, 35, 1, 65, 212, 253, 3, 106, 35, 1, 65, 172, 13, 106, 54, 2, 0, 35, 1, 65, 216, 253, 3, 106, 35, 1, 65, 189, 13, 106, 54, 2, 0, 35, 1, 65, 220, 253, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 224, 253, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 228, 253, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 232, 253, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 236, 253, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 240, 253, 3, 106, 35, 1, 65, 210, 13, 106, 54, 2, 0, 35, 1, 65, 244, 253, 3, 106, 35, 1, 65, 210, 13, 106, 54, 2, 0, 35, 1, 65, 248, 253, 3, 106, 35, 1, 65, 210, 13, 106, 54, 2, 0, 35, 1, 65, 252, 253, 3, 106, 35, 1, 65, 210, 13, 106, 54, 2, 0, 35, 1, 65, 128, 254, 3, 106, 35, 1, 65, 210, 13, 106, 54, 2, 0, 35, 1, 65, 132, 254, 3, 106, 35, 1, 65, 230, 13, 106, 54, 2, 0, 35, 1, 65, 136, 254, 3, 106, 35, 1, 65, 245, 13, 106, 54, 2, 0, 35, 1, 65, 140, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 144, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 148, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 152, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 156, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 160, 254, 3, 106, 35, 1, 65, 133, 14, 106, 54, 2, 0, 35, 1, 65, 164, 254, 3, 106, 35, 1, 65, 133, 14, 106, 54, 2, 0, 35, 1, 65, 168, 254, 3, 106, 35, 1, 65, 133, 14, 106, 54, 2, 0, 35, 1, 65, 172, 254, 3, 106, 35, 1, 65, 133, 14, 106, 54, 2, 0, 35, 1, 65, 176, 254, 3, 106, 35, 1, 65, 133, 14, 106, 54, 2, 0, 35, 1, 65, 180, 254, 3, 106, 35, 1, 65, 153, 14, 106, 54, 2, 0, 35, 1, 65, 184, 254, 3, 106, 35, 1, 65, 168, 14, 106, 54, 2, 0, 35, 1, 65, 188, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 192, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 196, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 200, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 204, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 208, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 212, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 216, 254, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 220, 254, 3, 106, 35, 1, 65, 184, 14, 106, 54, 2, 0, 35, 1, 65, 224, 254, 3, 106, 35, 1, 65, 184, 14, 106, 54, 2, 0, 35, 1, 65, 228, 254, 3, 106, 35, 1, 65, 184, 14, 106, 54, 2, 0, 35, 1, 65, 232, 254, 3, 106, 35, 1, 65, 184, 14, 106, 54, 2, 0, 35, 1, 65, 236, 254, 3, 106, 35, 1, 65, 184, 14, 106, 54, 2, 0, 35, 1, 65, 240, 254, 3, 106, 35, 1, 65, 184, 14, 106, 54, 2, 0, 35, 1, 65, 244, 254, 3, 106, 35, 1, 65, 184, 14, 106, 54, 2, 0, 35, 1, 65, 248, 254, 3, 106, 35, 1, 65, 184, 14, 106, 54, 2, 0, 35, 1, 65, 252, 254, 3, 106, 35, 1, 65, 184, 14, 106, 54, 2, 0, 35, 1, 65, 128, 255, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 132, 255, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 136, 255, 3, 106, 35, 1, 65, 199, 6, 106, 54, 2, 0, 35, 1, 65, 140, 255, 3, 106, 35, 1, 65, 197, 14, 106, 54, 2, 0, 35, 1, 65, 144, 255, 3, 106, 35, 1, 65, 197, 14, 106, 54, 2, 0, 35, 1, 65, 148, 255, 3, 106, 35, 1, 65, 197, 14, 106, 54, 2, 0, 35, 1, 65, 152, 255, 3, 106, 35, 1, 65, 203, 14, 106, 54, 2, 0, 35, 1, 65, 156, 255, 3, 106, 35, 1, 65, 203, 14, 106, 54, 2, 0, 35, 1, 65, 160, 255, 3, 106, 35, 1, 65, 203, 14, 106, 54, 2, 0, 35, 1, 65, 164, 255, 3, 106, 35, 1, 65, 210, 14, 106, 54, 2, 0, 35, 1, 65, 168, 255, 3, 106, 35, 1, 65, 227, 14, 106, 54, 2, 0, 35, 1, 65, 172, 255, 3, 106, 35, 1, 65, 246, 14, 106, 54, 2, 0, 35, 1, 65, 176, 255, 3, 106, 35, 1, 65, 137, 15, 106, 54, 2, 0, 35, 1, 65, 180, 255, 3, 106, 35, 1, 65, 156, 15, 106, 54, 2, 0, 35, 1, 65, 184, 255, 3, 106, 35, 1, 65, 175, 15, 106, 54, 2, 0, 35, 1, 65, 188, 255, 3, 106, 35, 1, 65, 198, 15, 106, 54, 2, 0, 35, 1, 65, 192, 255, 3, 106, 35, 1, 65, 221, 15, 106, 54, 2, 0, 35, 1, 65, 196, 255, 3, 106, 35, 1, 65, 248, 15, 106, 54, 2, 0, 35, 1, 65, 200, 255, 3, 106, 35, 1, 65, 139, 16, 106, 54, 2, 0, 35, 1, 65, 204, 255, 3, 106, 35, 1, 65, 163, 16, 106, 54, 2, 0, 35, 1, 65, 208, 255, 3, 106, 35, 1, 65, 182, 16, 106, 54, 2, 0, 35, 1, 65, 216, 255, 3, 106, 35, 1, 65, 206, 16, 106, 54, 2, 0, 35, 1, 65, 220, 255, 3, 106, 35, 1, 65, 210, 16, 106, 54, 2, 0, 11, 185, 15, 0, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 32, 0, 65, 1, 106, 14, 45, 45, 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, 44, 35, 36, 37, 38, 39, 40, 41, 42, 43, 11, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 32, 1, 65, 211, 0, 76, 4, 64, 2, 64, 32, 1, 65, 43, 107, 14, 6, 8, 9, 8, 2, 9, 3, 0, 11, 32, 1, 65, 198, 0, 70, 13, 3, 32, 1, 65, 206, 0, 71, 13, 8, 32, 2, 65, 0, 54, 2, 0, 65, 16, 33, 0, 12, 54, 11, 32, 1, 65, 237, 0, 76, 4, 64, 32, 1, 65, 212, 0, 70, 13, 4, 32, 1, 65, 230, 0, 71, 13, 8, 32, 2, 65, 0, 54, 2, 0, 65, 17, 33, 0, 12, 54, 11, 32, 1, 65, 238, 0, 70, 13, 4, 32, 1, 65, 244, 0, 70, 13, 5, 32, 1, 65, 254, 0, 71, 13, 7, 32, 2, 65, 2, 54, 2, 0, 65, 35, 33, 0, 12, 53, 11, 32, 2, 65, 0, 54, 2, 0, 65, 6, 33, 0, 12, 52, 11, 32, 2, 65, 1, 54, 2, 0, 65, 37, 33, 0, 12, 51, 11, 32, 2, 65, 0, 54, 2, 0, 65, 2, 33, 0, 12, 50, 11, 32, 2, 65, 0, 54, 2, 0, 65, 13, 33, 0, 12, 49, 11, 32, 2, 65, 0, 54, 2, 0, 65, 29, 33, 0, 12, 48, 11, 32, 2, 65, 0, 54, 2, 0, 65, 26, 33, 0, 12, 47, 11, 32, 2, 65, 0, 54, 2, 0, 65, 1, 33, 0, 12, 46, 11, 32, 1, 65, 49, 107, 65, 8, 75, 13, 44, 32, 2, 65, 1, 54, 2, 0, 65, 38, 33, 0, 12, 45, 11, 32, 1, 65, 46, 70, 4, 64, 32, 2, 65, 0, 54, 2, 0, 65, 7, 33, 0, 12, 45, 11, 32, 1, 65, 48, 107, 65, 9, 75, 13, 43, 32, 2, 65, 1, 54, 2, 0, 65, 38, 33, 0, 12, 44, 11, 32, 1, 65, 225, 0, 71, 4, 64, 32, 1, 65, 193, 0, 71, 13, 43, 32, 2, 65, 0, 54, 2, 0, 65, 9, 33, 0, 12, 44, 11, 32, 2, 65, 0, 54, 2, 0, 65, 22, 33, 0, 12, 43, 11, 32, 1, 65, 225, 0, 71, 4, 64, 32, 1, 65, 193, 0, 71, 13, 42, 32, 2, 65, 0, 54, 2, 0, 65, 12, 33, 0, 12, 43, 11, 32, 2, 65, 0, 54, 2, 0, 65, 12, 33, 0, 12, 42, 11, 32, 1, 65, 197, 0, 71, 13, 40, 32, 2, 65, 3, 54, 2, 0, 65, 36, 33, 0, 12, 41, 11, 32, 1, 65, 198, 0, 71, 13, 39, 32, 2, 65, 4, 54, 2, 0, 65, 41, 33, 0, 12, 40, 11, 2, 64, 2, 64, 2, 64, 32, 1, 65, 232, 0, 76, 4, 64, 32, 1, 65, 201, 0, 70, 13, 1, 32, 1, 65, 206, 0, 71, 13, 3, 32, 2, 65, 0, 54, 2, 0, 65, 3, 33, 0, 12, 43, 11, 32, 1, 65, 233, 0, 70, 13, 1, 32, 1, 65, 238, 0, 71, 13, 2, 32, 2, 65, 0, 54, 2, 0, 65, 18, 33, 0, 12, 42, 11, 32, 2, 65, 0, 54, 2, 0, 65, 11, 33, 0, 12, 41, 11, 32, 2, 65, 0, 54, 2, 0, 65, 24, 33, 0, 12, 40, 11, 32, 1, 65, 48, 107, 65, 9, 75, 13, 38, 32, 2, 65, 4, 54, 2, 0, 65, 42, 33, 0, 12, 39, 11, 2, 64, 32, 1, 65, 233, 0, 71, 4, 64, 32, 1, 65, 201, 0, 71, 13, 1, 32, 2, 65, 0, 54, 2, 0, 65, 11, 33, 0, 12, 40, 11, 32, 2, 65, 0, 54, 2, 0, 65, 24, 33, 0, 12, 39, 11, 32, 1, 65, 48, 107, 65, 9, 75, 13, 37, 32, 2, 65, 4, 54, 2, 0, 65, 42, 33, 0, 12, 38, 11, 32, 1, 65, 204, 0, 71, 13, 36, 32, 2, 65, 2, 54, 2, 0, 65, 35, 33, 0, 12, 37, 11, 32, 1, 65, 204, 0, 71, 13, 35, 32, 2, 65, 0, 54, 2, 0, 65, 14, 33, 0, 12, 36, 11, 32, 1, 65, 204, 0, 71, 13, 34, 32, 2, 65, 0, 54, 2, 0, 65, 8, 33, 0, 12, 35, 11, 32, 1, 65, 238, 0, 71, 4, 64, 32, 1, 65, 206, 0, 71, 13, 34, 32, 2, 65, 0, 54, 2, 0, 65, 5, 33, 0, 12, 35, 11, 32, 2, 65, 0, 54, 2, 0, 65, 20, 33, 0, 12, 34, 11, 32, 1, 65, 206, 0, 71, 13, 32, 32, 2, 65, 4, 54, 2, 0, 65, 41, 33, 0, 12, 33, 11, 32, 1, 65, 242, 0, 71, 4, 64, 32, 1, 65, 210, 0, 71, 13, 32, 32, 2, 65, 0, 54, 2, 0, 65, 15, 33, 0, 12, 33, 11, 32, 2, 65, 0, 54, 2, 0, 65, 28, 33, 0, 12, 32, 11, 32, 1, 65, 211, 0, 71, 13, 30, 32, 2, 65, 0, 54, 2, 0, 65, 4, 33, 0, 12, 31, 11, 32, 1, 65, 213, 0, 71, 13, 29, 32, 2, 65, 0, 54, 2, 0, 65, 4, 33, 0, 12, 30, 11, 32, 1, 65, 245, 0, 71, 4, 64, 32, 1, 65, 213, 0, 71, 13, 29, 32, 2, 65, 0, 54, 2, 0, 65, 10, 33, 0, 12, 30, 11, 32, 2, 65, 0, 54, 2, 0, 65, 23, 33, 0, 12, 29, 11, 32, 1, 65, 225, 0, 71, 13, 27, 32, 2, 65, 0, 54, 2, 0, 65, 22, 33, 0, 12, 28, 11, 32, 1, 65, 225, 0, 71, 13, 26, 32, 2, 65, 0, 54, 2, 0, 65, 25, 33, 0, 12, 27, 11, 32, 1, 65, 229, 0, 71, 13, 25, 32, 2, 65, 3, 54, 2, 0, 65, 36, 33, 0, 12, 26, 11, 32, 1, 65, 230, 0, 71, 13, 24, 32, 2, 65, 4, 54, 2, 0, 65, 41, 33, 0, 12, 25, 11, 32, 1, 65, 236, 0, 71, 13, 23, 32, 2, 65, 2, 54, 2, 0, 65, 35, 33, 0, 12, 24, 11, 32, 1, 65, 236, 0, 71, 13, 22, 32, 2, 65, 0, 54, 2, 0, 65, 27, 33, 0, 12, 23, 11, 32, 1, 65, 236, 0, 71, 13, 21, 32, 2, 65, 0, 54, 2, 0, 65, 21, 33, 0, 12, 22, 11, 32, 1, 65, 238, 0, 71, 13, 20, 32, 2, 65, 0, 54, 2, 0, 65, 20, 33, 0, 12, 21, 11, 32, 1, 65, 238, 0, 71, 13, 19, 32, 2, 65, 4, 54, 2, 0, 65, 41, 33, 0, 12, 20, 11, 32, 1, 65, 242, 0, 71, 13, 18, 32, 2, 65, 0, 54, 2, 0, 65, 28, 33, 0, 12, 19, 11, 32, 1, 65, 243, 0, 71, 13, 17, 32, 2, 65, 0, 54, 2, 0, 65, 19, 33, 0, 12, 18, 11, 32, 1, 65, 245, 0, 71, 13, 16, 32, 2, 65, 0, 54, 2, 0, 65, 19, 33, 0, 12, 17, 11, 32, 1, 65, 245, 0, 71, 13, 15, 32, 2, 65, 0, 54, 2, 0, 65, 23, 33, 0, 12, 16, 11, 2, 64, 2, 64, 32, 1, 65, 43, 107, 14, 3, 0, 1, 0, 1, 11, 32, 2, 65, 0, 54, 2, 0, 65, 32, 33, 0, 12, 16, 11, 32, 1, 65, 48, 107, 65, 9, 75, 13, 14, 32, 2, 65, 4, 54, 2, 0, 65, 43, 33, 0, 12, 15, 11, 32, 1, 65, 120, 113, 65, 48, 71, 13, 13, 32, 2, 65, 1, 54, 2, 0, 65, 39, 33, 0, 12, 14, 11, 32, 1, 65, 48, 107, 65, 9, 75, 13, 12, 32, 2, 65, 4, 54, 2, 0, 65, 43, 33, 0, 12, 13, 11, 32, 1, 65, 48, 107, 65, 10, 73, 32, 1, 65, 225, 0, 107, 65, 6, 73, 114, 69, 65, 0, 32, 1, 65, 193, 0, 107, 65, 5, 75, 27, 13, 11, 32, 2, 65, 1, 54, 2, 0, 65, 40, 33, 0, 12, 12, 11, 35, 1, 34, 0, 32, 0, 65, 6, 106, 65, 149, 1, 32, 0, 65, 32, 106, 16, 0, 0, 11, 32, 2, 65, 3, 54, 2, 0, 12, 9, 11, 32, 2, 65, 1, 54, 2, 0, 2, 64, 32, 1, 65, 248, 0, 71, 4, 64, 32, 1, 65, 239, 0, 71, 4, 64, 32, 1, 65, 46, 71, 13, 2, 32, 2, 65, 4, 54, 2, 0, 65, 42, 33, 0, 12, 12, 11, 32, 2, 65, 0, 54, 2, 0, 65, 31, 33, 0, 12, 11, 11, 32, 2, 65, 0, 54, 2, 0, 65, 33, 33, 0, 12, 10, 11, 32, 1, 65, 95, 113, 65, 197, 0, 70, 4, 64, 32, 2, 65, 0, 54, 2, 0, 65, 30, 33, 0, 12, 10, 11, 32, 1, 65, 48, 107, 65, 9, 75, 13, 8, 32, 2, 65, 1, 54, 2, 0, 65, 38, 33, 0, 12, 9, 11, 32, 2, 65, 1, 54, 2, 0, 32, 1, 65, 46, 70, 4, 64, 32, 2, 65, 4, 54, 2, 0, 65, 42, 33, 0, 12, 9, 11, 32, 1, 65, 95, 113, 65, 197, 0, 70, 4, 64, 32, 2, 65, 0, 54, 2, 0, 65, 30, 33, 0, 12, 9, 11, 32, 1, 65, 48, 107, 65, 9, 75, 13, 7, 32, 2, 65, 1, 54, 2, 0, 65, 38, 33, 0, 12, 8, 11, 32, 2, 65, 1, 54, 2, 0, 32, 1, 65, 120, 113, 65, 48, 71, 13, 6, 32, 2, 65, 1, 54, 2, 0, 65, 39, 33, 0, 12, 7, 11, 32, 2, 65, 1, 54, 2, 0, 32, 1, 65, 48, 107, 65, 10, 73, 32, 1, 65, 225, 0, 107, 65, 6, 73, 114, 69, 65, 0, 32, 1, 65, 193, 0, 107, 65, 5, 75, 27, 13, 5, 32, 2, 65, 1, 54, 2, 0, 65, 40, 33, 0, 12, 6, 11, 32, 2, 65, 4, 54, 2, 0, 12, 4, 11, 32, 2, 65, 4, 54, 2, 0, 32, 1, 65, 95, 113, 65, 197, 0, 70, 4, 64, 32, 2, 65, 0, 54, 2, 0, 65, 30, 33, 0, 12, 5, 11, 32, 1, 65, 48, 107, 65, 9, 75, 13, 3, 32, 2, 65, 4, 54, 2, 0, 65, 42, 33, 0, 12, 4, 11, 32, 2, 65, 4, 54, 2, 0, 32, 1, 65, 48, 107, 65, 9, 75, 13, 2, 32, 2, 65, 4, 54, 2, 0, 65, 43, 33, 0, 12, 3, 11, 32, 2, 65, 0, 54, 2, 0, 65, 255, 1, 33, 0, 12, 2, 11, 32, 2, 65, 2, 54, 2, 0, 11, 65, 255, 1, 33, 0, 2, 64, 2, 64, 32, 1, 65, 10, 107, 14, 4, 2, 1, 1, 2, 0, 11, 32, 1, 69, 32, 1, 65, 32, 70, 114, 13, 1, 11, 32, 2, 65, 0, 54, 2, 0, 11, 32, 0, 65, 24, 116, 65, 24, 117, 11, 36, 1, 2, 127, 65, 56, 16, 1, 34, 1, 34, 0, 65, 12, 106, 16, 10, 26, 32, 0, 65, 24, 106, 16, 10, 26, 32, 0, 65, 0, 65, 0, 16, 11, 32, 1, 11, 9, 0, 32, 0, 16, 53, 26, 32, 0, 11, 218, 1, 1, 4, 127, 35, 0, 65, 16, 107, 34, 3, 36, 0, 32, 0, 65, 0, 59, 1, 8, 32, 0, 66, 128, 128, 128, 128, 112, 55, 2, 0, 32, 0, 65, 12, 106, 34, 4, 16, 22, 32, 3, 65, 242, 0, 59, 1, 14, 32, 4, 32, 3, 65, 14, 106, 16, 23, 32, 0, 65, 24, 106, 34, 5, 16, 22, 32, 3, 65, 255, 255, 3, 59, 1, 12, 32, 5, 32, 3, 65, 12, 106, 16, 23, 2, 64, 32, 2, 69, 13, 0, 32, 0, 32, 1, 44, 0, 0, 59, 1, 0, 32, 0, 32, 1, 44, 0, 1, 59, 1, 2, 32, 0, 32, 1, 44, 0, 2, 59, 1, 4, 32, 0, 32, 1, 44, 0, 3, 59, 1, 6, 32, 0, 32, 1, 44, 0, 4, 59, 1, 8, 32, 2, 65, 6, 73, 13, 0, 65, 5, 33, 0, 3, 64, 32, 3, 32, 0, 32, 1, 106, 34, 6, 44, 0, 0, 59, 1, 10, 32, 4, 32, 3, 65, 10, 106, 16, 23, 32, 3, 32, 6, 44, 0, 1, 59, 1, 8, 32, 5, 32, 3, 65, 8, 106, 16, 23, 32, 0, 65, 2, 106, 34, 0, 32, 2, 73, 13, 0, 11, 11, 32, 3, 65, 16, 106, 36, 0, 11, 27, 0, 32, 0, 4, 64, 32, 0, 65, 24, 106, 16, 13, 26, 32, 0, 65, 12, 106, 16, 13, 26, 32, 0, 16, 2, 11, 11, 13, 0, 32, 0, 16, 57, 32, 0, 16, 58, 26, 32, 0, 11, 249, 1, 1, 3, 127, 35, 0, 65, 32, 107, 34, 2, 36, 0, 32, 1, 32, 0, 45, 0, 0, 58, 0, 0, 32, 1, 32, 0, 45, 0, 2, 58, 0, 1, 32, 1, 32, 0, 45, 0, 4, 58, 0, 2, 32, 1, 32, 0, 45, 0, 6, 58, 0, 3, 32, 1, 32, 0, 45, 0, 8, 58, 0, 4, 32, 2, 32, 0, 65, 12, 106, 34, 3, 16, 15, 54, 2, 16, 32, 2, 32, 2, 65, 16, 106, 65, 1, 16, 16, 54, 2, 24, 32, 2, 32, 3, 16, 17, 54, 2, 16, 32, 2, 32, 0, 65, 24, 106, 16, 15, 54, 2, 0, 32, 2, 32, 2, 65, 1, 16, 16, 54, 2, 8, 65, 5, 33, 0, 2, 64, 32, 2, 65, 24, 106, 32, 2, 65, 16, 106, 16, 18, 69, 4, 64, 65, 5, 33, 3, 12, 1, 11, 3, 64, 32, 0, 32, 1, 106, 34, 3, 32, 2, 40, 2, 24, 45, 0, 0, 58, 0, 0, 32, 3, 32, 2, 40, 2, 8, 45, 0, 0, 58, 0, 1, 32, 0, 65, 2, 106, 33, 3, 32, 2, 65, 24, 106, 16, 20, 26, 32, 2, 65, 8, 106, 16, 20, 26, 32, 2, 65, 24, 106, 32, 2, 65, 16, 106, 16, 18, 69, 13, 1, 32, 0, 65, 254, 7, 73, 33, 4, 32, 3, 33, 0, 32, 4, 13, 0, 11, 11, 32, 2, 65, 32, 106, 36, 0, 32, 3, 11, 11, 0, 32, 0, 32, 0, 40, 2, 0, 16, 70, 11, 49, 1, 1, 127, 35, 0, 65, 16, 107, 34, 2, 36, 0, 32, 2, 32, 0, 40, 2, 0, 54, 2, 8, 32, 2, 65, 8, 106, 32, 1, 16, 71, 26, 32, 2, 40, 2, 8, 33, 0, 32, 2, 65, 16, 106, 36, 0, 32, 0, 11, 11, 0, 32, 0, 32, 0, 40, 2, 4, 16, 70, 11, 11, 0, 32, 0, 32, 1, 16, 72, 65, 1, 115, 11, 7, 0, 32, 0, 40, 2, 0, 11, 17, 0, 32, 0, 32, 0, 40, 2, 0, 65, 2, 106, 54, 2, 0, 32, 0, 11, 10, 0, 32, 0, 32, 1, 32, 2, 16, 11, 11, 20, 1, 1, 127, 32, 0, 16, 34, 33, 1, 32, 0, 16, 61, 32, 0, 32, 1, 16, 74, 11, 31, 0, 32, 0, 40, 2, 4, 32, 0, 16, 62, 40, 2, 0, 73, 4, 64, 32, 0, 32, 1, 16, 76, 15, 11, 32, 0, 32, 1, 16, 77, 11, 137, 54, 1, 21, 127, 35, 0, 65, 48, 107, 34, 15, 36, 0, 32, 0, 65, 0, 54, 2, 52, 32, 0, 65, 0, 58, 0, 48, 32, 0, 65, 0, 54, 2, 44, 32, 0, 32, 0, 40, 2, 0, 54, 2, 40, 32, 0, 32, 1, 16, 25, 65, 1, 33, 5, 2, 64, 32, 2, 45, 0, 46, 13, 0, 32, 2, 45, 0, 47, 13, 0, 32, 2, 45, 0, 57, 13, 0, 32, 2, 45, 0, 58, 65, 0, 71, 33, 5, 11, 32, 15, 65, 40, 106, 32, 0, 65, 24, 106, 34, 13, 16, 26, 32, 15, 65, 32, 106, 32, 13, 16, 27, 32, 15, 65, 24, 106, 32, 15, 65, 40, 106, 65, 0, 16, 28, 32, 15, 65, 24, 106, 16, 29, 46, 1, 0, 33, 19, 65, 255, 255, 3, 33, 7, 32, 15, 65, 40, 106, 32, 15, 65, 32, 106, 16, 30, 69, 4, 64, 32, 15, 65, 40, 106, 16, 29, 47, 1, 0, 33, 7, 11, 32, 0, 65, 12, 106, 34, 18, 16, 31, 47, 1, 0, 33, 17, 3, 64, 65, 0, 33, 9, 3, 64, 32, 1, 40, 2, 0, 34, 13, 65, 9, 71, 4, 64, 32, 13, 65, 32, 70, 4, 64, 32, 0, 32, 1, 16, 32, 32, 8, 32, 9, 65, 127, 115, 65, 1, 113, 106, 33, 8, 12, 2, 11, 5, 32, 0, 32, 1, 16, 32, 65, 1, 33, 9, 12, 1, 11, 11, 32, 13, 16, 33, 4, 64, 32, 0, 65, 0, 59, 1, 42, 32, 0, 32, 0, 47, 1, 40, 65, 1, 106, 59, 1, 40, 32, 0, 32, 1, 40, 2, 0, 54, 2, 44, 32, 1, 65, 1, 32, 1, 40, 2, 8, 17, 2, 0, 65, 0, 33, 8, 12, 1, 11, 11, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 32, 5, 32, 13, 65, 35, 71, 114, 69, 4, 64, 32, 2, 45, 0, 24, 4, 64, 32, 2, 45, 0, 103, 69, 13, 2, 32, 0, 46, 1, 42, 32, 19, 74, 13, 2, 65, 0, 33, 5, 32, 18, 16, 34, 65, 1, 70, 13, 6, 32, 0, 16, 35, 32, 0, 16, 36, 32, 1, 65, 231, 0, 59, 1, 4, 12, 5, 11, 32, 0, 46, 1, 42, 34, 4, 69, 13, 3, 32, 0, 47, 1, 40, 34, 3, 32, 0, 47, 1, 0, 71, 13, 3, 32, 4, 32, 0, 46, 1, 2, 76, 13, 2, 12, 3, 11, 32, 13, 4, 64, 32, 0, 47, 1, 40, 33, 3, 12, 2, 11, 32, 2, 45, 0, 103, 4, 64, 32, 0, 32, 1, 16, 25, 65, 0, 33, 5, 32, 18, 16, 34, 65, 1, 70, 13, 5, 32, 0, 16, 35, 32, 0, 16, 36, 32, 1, 65, 231, 0, 59, 1, 4, 12, 4, 11, 32, 2, 45, 0, 0, 69, 4, 64, 65, 0, 33, 5, 12, 5, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 0, 59, 1, 4, 12, 3, 11, 32, 0, 47, 1, 40, 34, 3, 32, 0, 47, 1, 0, 70, 13, 1, 11, 2, 64, 32, 2, 45, 0, 103, 69, 32, 0, 46, 1, 42, 34, 6, 32, 19, 74, 114, 32, 9, 114, 13, 0, 2, 64, 32, 19, 65, 255, 255, 3, 113, 32, 7, 71, 32, 17, 65, 241, 0, 71, 114, 69, 4, 64, 32, 13, 65, 45, 71, 32, 6, 32, 19, 72, 114, 13, 1, 12, 2, 11, 32, 6, 32, 7, 65, 16, 116, 65, 16, 117, 76, 13, 0, 32, 17, 65, 243, 0, 71, 13, 1, 11, 65, 0, 33, 5, 32, 18, 16, 34, 65, 1, 70, 13, 3, 32, 0, 16, 35, 32, 0, 16, 36, 32, 1, 65, 231, 0, 59, 1, 4, 12, 2, 11, 2, 64, 32, 0, 46, 1, 0, 34, 10, 32, 3, 65, 16, 116, 65, 16, 117, 72, 34, 12, 13, 0, 32, 2, 45, 0, 2, 69, 13, 0, 65, 0, 33, 13, 65, 0, 33, 2, 2, 64, 32, 1, 40, 2, 0, 34, 4, 16, 113, 69, 13, 0, 65, 1, 33, 13, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 34, 4, 16, 113, 69, 13, 1, 32, 13, 65, 1, 106, 33, 13, 12, 0, 11, 0, 11, 2, 64, 32, 4, 65, 46, 71, 13, 0, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 113, 69, 13, 0, 65, 1, 33, 4, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 113, 4, 64, 32, 4, 65, 1, 106, 33, 4, 12, 1, 11, 11, 32, 13, 65, 255, 255, 3, 113, 69, 32, 4, 65, 255, 255, 3, 113, 69, 114, 13, 0, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 2, 59, 1, 4, 65, 1, 33, 2, 11, 32, 2, 33, 5, 12, 3, 11, 2, 64, 32, 12, 13, 0, 32, 2, 45, 0, 4, 69, 13, 0, 65, 0, 33, 2, 2, 64, 32, 1, 40, 2, 0, 65, 33, 71, 13, 0, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 114, 69, 13, 0, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 4, 59, 1, 4, 65, 1, 33, 2, 11, 32, 2, 33, 5, 12, 3, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 34, 4, 13, 0, 32, 2, 45, 0, 5, 69, 13, 0, 2, 127, 2, 64, 32, 1, 40, 2, 0, 65, 33, 70, 4, 64, 32, 0, 32, 1, 16, 42, 12, 1, 11, 65, 0, 32, 0, 32, 1, 16, 115, 65, 1, 71, 13, 1, 26, 11, 2, 64, 3, 64, 2, 64, 32, 0, 32, 1, 16, 116, 65, 1, 106, 14, 2, 2, 0, 1, 11, 11, 32, 0, 32, 1, 16, 25, 11, 32, 0, 16, 36, 32, 1, 65, 5, 59, 1, 4, 65, 1, 11, 33, 5, 12, 3, 11, 2, 64, 32, 4, 13, 0, 32, 2, 45, 0, 7, 69, 13, 0, 32, 1, 40, 2, 0, 16, 49, 34, 2, 4, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 49, 4, 64, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 49, 13, 0, 11, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 7, 59, 1, 4, 11, 32, 2, 33, 5, 12, 3, 11, 65, 1, 33, 5, 32, 12, 32, 8, 65, 16, 116, 65, 16, 117, 32, 19, 74, 113, 34, 11, 69, 32, 2, 45, 0, 24, 69, 114, 69, 4, 64, 32, 0, 33, 4, 2, 64, 32, 1, 34, 7, 40, 2, 0, 16, 49, 69, 13, 0, 2, 64, 2, 64, 32, 4, 47, 1, 42, 13, 0, 32, 4, 32, 7, 16, 52, 69, 13, 0, 32, 4, 65, 12, 106, 16, 34, 65, 1, 70, 13, 2, 32, 4, 16, 35, 32, 4, 16, 36, 32, 7, 65, 231, 0, 59, 1, 4, 12, 1, 11, 32, 4, 32, 7, 16, 42, 32, 4, 32, 7, 16, 25, 32, 7, 40, 2, 0, 33, 16, 3, 64, 32, 16, 16, 49, 4, 127, 32, 4, 32, 7, 16, 42, 32, 7, 40, 2, 0, 16, 49, 4, 64, 3, 64, 32, 4, 32, 7, 16, 42, 32, 7, 40, 2, 0, 16, 49, 13, 0, 11, 11, 32, 4, 32, 7, 16, 25, 32, 7, 40, 2, 0, 5, 32, 16, 11, 16, 51, 4, 64, 32, 4, 32, 7, 16, 42, 32, 7, 40, 2, 0, 34, 16, 16, 51, 69, 13, 1, 3, 64, 32, 4, 32, 7, 16, 42, 32, 7, 40, 2, 0, 34, 16, 16, 51, 13, 0, 11, 12, 1, 11, 11, 32, 4, 16, 36, 32, 7, 65, 24, 59, 1, 4, 11, 65, 1, 33, 16, 11, 32, 16, 13, 3, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 46, 69, 13, 0, 32, 0, 32, 1, 65, 46, 16, 37, 13, 3, 11, 32, 11, 69, 32, 2, 45, 0, 47, 69, 114, 69, 4, 64, 32, 0, 32, 1, 65, 47, 16, 37, 13, 3, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 57, 69, 13, 0, 32, 0, 32, 1, 65, 57, 16, 38, 13, 3, 11, 32, 11, 69, 32, 2, 45, 0, 58, 69, 114, 69, 4, 64, 32, 0, 32, 1, 65, 58, 16, 38, 13, 3, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 34, 4, 13, 0, 32, 2, 45, 0, 98, 69, 13, 0, 32, 1, 40, 2, 0, 16, 119, 4, 64, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 119, 13, 0, 11, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 226, 0, 59, 1, 4, 12, 2, 11, 2, 64, 32, 4, 13, 0, 32, 2, 45, 0, 102, 69, 13, 0, 32, 1, 40, 2, 0, 16, 119, 4, 64, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 119, 13, 0, 11, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 230, 0, 59, 1, 4, 12, 2, 11, 32, 9, 69, 32, 12, 32, 8, 65, 255, 255, 3, 113, 32, 19, 65, 255, 255, 3, 113, 70, 113, 113, 33, 14, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 32, 1, 40, 2, 0, 34, 4, 65, 57, 76, 4, 64, 32, 4, 65, 33, 107, 14, 14, 4, 10, 19, 19, 1, 3, 11, 19, 19, 2, 19, 9, 14, 15, 19, 11, 2, 64, 32, 4, 65, 58, 107, 14, 6, 13, 19, 19, 19, 18, 12, 0, 11, 2, 64, 32, 4, 65, 219, 0, 107, 14, 3, 5, 16, 6, 0, 11, 32, 4, 65, 251, 0, 107, 14, 3, 6, 16, 7, 18, 11, 32, 6, 13, 17, 32, 2, 45, 0, 1, 69, 13, 17, 2, 127, 65, 0, 33, 13, 32, 0, 32, 1, 34, 2, 16, 42, 2, 64, 2, 64, 2, 64, 32, 1, 40, 2, 0, 34, 1, 65, 212, 0, 71, 4, 64, 32, 1, 65, 217, 0, 71, 13, 1, 32, 0, 32, 2, 16, 42, 32, 2, 40, 2, 0, 34, 1, 65, 193, 0, 71, 13, 1, 32, 0, 32, 2, 16, 42, 32, 2, 40, 2, 0, 34, 1, 65, 205, 0, 71, 13, 1, 32, 0, 32, 2, 16, 42, 32, 2, 40, 2, 0, 34, 1, 65, 204, 0, 71, 13, 1, 32, 0, 32, 2, 16, 42, 32, 2, 40, 2, 0, 34, 1, 16, 43, 69, 13, 1, 32, 0, 32, 2, 16, 25, 32, 0, 16, 36, 32, 2, 65, 1, 59, 1, 4, 65, 1, 12, 4, 11, 32, 0, 32, 2, 16, 42, 32, 2, 40, 2, 0, 34, 1, 65, 193, 0, 71, 13, 0, 32, 0, 32, 2, 16, 42, 32, 2, 40, 2, 0, 34, 1, 65, 199, 0, 71, 13, 0, 32, 0, 32, 2, 16, 42, 32, 2, 40, 2, 0, 34, 1, 16, 43, 69, 13, 0, 32, 0, 32, 2, 16, 25, 32, 0, 16, 36, 32, 2, 65, 3, 59, 1, 4, 12, 1, 11, 32, 1, 16, 49, 4, 64, 3, 64, 32, 0, 32, 2, 16, 42, 32, 2, 40, 2, 0, 34, 1, 16, 49, 13, 0, 11, 11, 32, 0, 46, 1, 42, 65, 2, 72, 13, 1, 32, 1, 16, 43, 69, 13, 1, 32, 0, 32, 2, 16, 25, 32, 0, 16, 36, 32, 2, 65, 6, 59, 1, 4, 11, 65, 1, 33, 13, 11, 32, 13, 11, 33, 5, 12, 20, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 99, 69, 13, 0, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 65, 227, 0, 16, 39, 33, 5, 12, 20, 11, 32, 11, 69, 32, 2, 45, 0, 100, 69, 114, 69, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 65, 228, 0, 16, 39, 33, 5, 12, 20, 11, 32, 14, 69, 32, 2, 45, 0, 101, 69, 114, 13, 16, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 65, 229, 0, 16, 39, 33, 5, 12, 19, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 95, 69, 13, 0, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 65, 223, 0, 16, 40, 33, 5, 12, 19, 11, 32, 11, 69, 32, 2, 45, 0, 96, 69, 114, 69, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 65, 224, 0, 16, 40, 33, 5, 12, 19, 11, 32, 14, 69, 32, 2, 45, 0, 97, 69, 114, 13, 15, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 65, 225, 0, 16, 40, 33, 5, 12, 18, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 92, 69, 13, 0, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 65, 220, 0, 16, 41, 33, 5, 12, 18, 11, 32, 11, 69, 32, 2, 45, 0, 93, 69, 114, 69, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 65, 221, 0, 16, 41, 33, 5, 12, 18, 11, 32, 14, 69, 32, 2, 45, 0, 94, 69, 114, 13, 14, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 65, 222, 0, 16, 41, 33, 5, 12, 17, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 25, 69, 13, 0, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 25, 59, 1, 4, 12, 16, 11, 32, 11, 69, 32, 2, 45, 0, 26, 69, 114, 69, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 26, 59, 1, 4, 12, 16, 11, 32, 14, 69, 32, 2, 45, 0, 27, 69, 114, 13, 13, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 27, 59, 1, 4, 12, 15, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 28, 69, 13, 0, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 28, 59, 1, 4, 12, 15, 11, 32, 11, 69, 32, 2, 45, 0, 29, 69, 114, 13, 12, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 29, 59, 1, 4, 12, 15, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 30, 69, 13, 0, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 30, 59, 1, 4, 12, 14, 11, 32, 11, 69, 32, 2, 45, 0, 31, 69, 114, 69, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 31, 59, 1, 4, 12, 14, 11, 32, 14, 69, 32, 2, 45, 0, 32, 69, 114, 13, 11, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 32, 59, 1, 4, 12, 13, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 33, 69, 13, 0, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 33, 59, 1, 4, 12, 13, 11, 32, 11, 69, 32, 2, 45, 0, 34, 69, 114, 13, 10, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 34, 59, 1, 4, 12, 13, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 35, 69, 13, 0, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 35, 59, 1, 4, 12, 12, 11, 32, 11, 69, 32, 2, 45, 0, 36, 69, 114, 13, 9, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 36, 59, 1, 4, 12, 12, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 43, 69, 13, 0, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 43, 59, 1, 4, 12, 11, 11, 32, 11, 69, 32, 2, 45, 0, 44, 69, 114, 69, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 44, 59, 1, 4, 12, 11, 11, 32, 14, 69, 32, 2, 45, 0, 45, 69, 114, 69, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 45, 59, 1, 4, 12, 11, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 52, 69, 13, 0, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 52, 59, 1, 4, 12, 11, 11, 32, 11, 69, 32, 2, 45, 0, 53, 69, 114, 13, 8, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 53, 59, 1, 4, 12, 11, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 54, 69, 13, 0, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 54, 59, 1, 4, 12, 10, 11, 32, 11, 69, 32, 2, 45, 0, 55, 69, 114, 69, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 55, 59, 1, 4, 12, 10, 11, 32, 14, 69, 32, 2, 45, 0, 56, 69, 114, 69, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 56, 59, 1, 4, 12, 10, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 61, 69, 13, 0, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 65, 39, 70, 4, 64, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 59, 59, 1, 4, 12, 11, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 61, 59, 1, 4, 12, 10, 11, 32, 11, 69, 32, 2, 45, 0, 62, 69, 114, 13, 7, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 65, 39, 70, 4, 64, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 60, 59, 1, 4, 12, 10, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 62, 59, 1, 4, 12, 9, 11, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 34, 4, 32, 2, 45, 0, 37, 69, 114, 33, 17, 65, 0, 32, 11, 32, 2, 45, 0, 14, 65, 0, 71, 113, 34, 8, 32, 4, 32, 2, 45, 0, 13, 69, 114, 34, 12, 69, 114, 32, 14, 32, 2, 45, 0, 15, 65, 0, 71, 113, 34, 7, 32, 17, 69, 114, 114, 69, 32, 11, 32, 2, 45, 0, 38, 65, 0, 71, 113, 34, 4, 27, 13, 6, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 43, 69, 13, 6, 32, 0, 32, 1, 16, 25, 32, 12, 69, 4, 64, 65, 0, 33, 5, 32, 9, 13, 10, 32, 0, 65, 237, 0, 32, 6, 16, 44, 32, 0, 16, 36, 32, 1, 65, 13, 59, 1, 4, 12, 9, 11, 32, 8, 4, 64, 65, 0, 33, 5, 32, 9, 13, 10, 32, 0, 65, 237, 0, 32, 6, 16, 44, 32, 0, 16, 36, 32, 1, 65, 14, 59, 1, 4, 12, 9, 11, 32, 7, 4, 64, 32, 0, 16, 36, 32, 1, 65, 15, 59, 1, 4, 12, 9, 11, 32, 17, 69, 4, 64, 32, 0, 16, 36, 32, 1, 65, 37, 59, 1, 4, 12, 9, 11, 32, 4, 69, 13, 6, 32, 0, 16, 36, 32, 1, 65, 38, 59, 1, 4, 12, 8, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 39, 69, 13, 0, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 39, 59, 1, 4, 12, 8, 11, 32, 11, 69, 32, 2, 45, 0, 40, 69, 114, 69, 4, 64, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 40, 59, 1, 4, 12, 9, 11, 65, 0, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 34, 4, 32, 2, 45, 0, 41, 69, 114, 34, 18, 69, 32, 11, 32, 2, 45, 0, 17, 65, 0, 71, 113, 34, 17, 32, 4, 32, 2, 45, 0, 16, 69, 114, 34, 8, 69, 114, 32, 14, 32, 2, 45, 0, 18, 65, 0, 71, 113, 34, 12, 32, 4, 32, 2, 45, 0, 19, 69, 114, 34, 7, 69, 114, 114, 114, 69, 32, 11, 32, 2, 45, 0, 42, 65, 0, 71, 113, 34, 4, 27, 13, 5, 32, 0, 32, 1, 16, 42, 2, 64, 32, 1, 40, 2, 0, 34, 16, 16, 43, 4, 64, 32, 8, 69, 4, 64, 65, 0, 33, 5, 32, 9, 13, 11, 32, 0, 65, 237, 0, 32, 6, 16, 44, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 16, 59, 1, 4, 12, 10, 11, 32, 17, 4, 64, 65, 0, 33, 5, 32, 9, 13, 11, 32, 0, 65, 237, 0, 32, 6, 16, 44, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 17, 59, 1, 4, 12, 10, 11, 32, 12, 4, 64, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 18, 59, 1, 4, 12, 10, 11, 32, 7, 13, 1, 32, 0, 47, 1, 6, 34, 2, 32, 19, 65, 255, 255, 3, 113, 71, 4, 64, 65, 0, 33, 5, 32, 0, 47, 1, 8, 13, 11, 32, 0, 65, 237, 0, 32, 2, 65, 16, 116, 65, 16, 117, 16, 44, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 19, 59, 1, 4, 12, 9, 11, 32, 16, 65, 44, 70, 32, 16, 65, 253, 0, 70, 114, 13, 0, 32, 16, 65, 221, 0, 71, 13, 6, 11, 32, 18, 69, 4, 64, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 41, 59, 1, 4, 12, 8, 11, 32, 4, 69, 13, 5, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 42, 59, 1, 4, 12, 7, 11, 65, 0, 32, 2, 45, 0, 10, 69, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 114, 34, 8, 69, 32, 11, 32, 2, 45, 0, 11, 65, 0, 71, 113, 34, 12, 32, 6, 69, 114, 114, 69, 32, 14, 32, 2, 45, 0, 12, 65, 0, 71, 113, 34, 7, 27, 13, 4, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 34, 4, 16, 43, 4, 64, 32, 8, 69, 4, 64, 65, 0, 33, 5, 32, 9, 13, 9, 32, 0, 65, 241, 0, 32, 6, 16, 44, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 10, 59, 1, 4, 12, 8, 11, 32, 12, 4, 64, 65, 0, 33, 5, 32, 9, 13, 9, 32, 0, 65, 241, 0, 32, 6, 16, 44, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 11, 59, 1, 4, 12, 8, 11, 32, 7, 69, 13, 5, 32, 17, 65, 237, 0, 70, 4, 64, 32, 0, 65, 241, 0, 32, 6, 16, 44, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 12, 59, 1, 4, 12, 7, 11, 32, 6, 32, 4, 65, 45, 71, 114, 13, 4, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 65, 45, 71, 13, 4, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 43, 69, 13, 4, 32, 2, 45, 0, 103, 4, 64, 65, 0, 33, 5, 32, 18, 16, 34, 65, 1, 70, 13, 8, 32, 0, 16, 35, 32, 0, 16, 36, 32, 1, 65, 231, 0, 59, 1, 4, 12, 7, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 8, 59, 1, 4, 12, 6, 11, 32, 6, 13, 3, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 65, 46, 71, 13, 3, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 65, 46, 71, 13, 3, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 43, 69, 13, 3, 32, 2, 45, 0, 103, 4, 64, 65, 0, 33, 5, 32, 18, 16, 34, 65, 1, 70, 13, 7, 32, 0, 16, 35, 32, 0, 16, 36, 32, 1, 65, 231, 0, 59, 1, 4, 12, 6, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 9, 59, 1, 4, 12, 5, 11, 65, 0, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 34, 4, 32, 2, 45, 0, 50, 69, 114, 34, 8, 69, 32, 11, 32, 2, 45, 0, 49, 65, 0, 71, 113, 34, 12, 32, 4, 32, 2, 45, 0, 48, 69, 114, 34, 7, 69, 114, 114, 69, 32, 11, 32, 2, 45, 0, 51, 65, 0, 71, 113, 34, 4, 27, 13, 2, 32, 0, 32, 1, 16, 42, 2, 64, 32, 1, 40, 2, 0, 16, 33, 69, 13, 0, 32, 7, 69, 4, 64, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 48, 59, 1, 4, 12, 6, 11, 32, 12, 69, 13, 0, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 49, 59, 1, 4, 12, 5, 11, 32, 8, 69, 4, 64, 32, 0, 32, 1, 65, 50, 16, 45, 33, 5, 12, 6, 11, 65, 0, 33, 5, 32, 4, 69, 13, 5, 32, 0, 32, 1, 65, 51, 16, 45, 33, 5, 12, 5, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 20, 69, 13, 0, 32, 0, 32, 1, 65, 20, 16, 46, 33, 5, 12, 5, 11, 32, 11, 69, 32, 2, 45, 0, 21, 69, 114, 13, 1, 32, 0, 32, 1, 65, 21, 16, 46, 33, 5, 12, 4, 11, 2, 64, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 13, 0, 32, 2, 45, 0, 22, 69, 13, 0, 32, 0, 32, 1, 65, 22, 16, 46, 33, 5, 12, 4, 11, 32, 11, 69, 32, 2, 45, 0, 23, 69, 114, 13, 0, 32, 0, 32, 1, 65, 23, 16, 46, 33, 5, 12, 3, 11, 65, 1, 33, 21, 2, 64, 32, 10, 32, 3, 65, 16, 116, 65, 16, 117, 78, 4, 64, 32, 2, 45, 0, 83, 13, 1, 11, 32, 11, 32, 2, 45, 0, 84, 65, 0, 71, 113, 13, 0, 32, 14, 32, 2, 45, 0, 85, 65, 0, 71, 113, 33, 21, 11, 2, 127, 32, 10, 32, 3, 65, 16, 116, 65, 16, 117, 78, 4, 64, 65, 1, 32, 2, 45, 0, 86, 13, 1, 26, 11, 32, 11, 32, 2, 45, 0, 87, 65, 0, 71, 113, 11, 33, 16, 2, 127, 32, 10, 32, 3, 65, 16, 116, 65, 16, 117, 78, 4, 64, 65, 1, 32, 2, 45, 0, 88, 13, 1, 26, 11, 32, 11, 32, 2, 45, 0, 89, 65, 0, 71, 113, 11, 33, 22, 2, 64, 32, 10, 32, 3, 65, 16, 116, 65, 16, 117, 78, 4, 64, 65, 1, 33, 23, 32, 2, 45, 0, 90, 13, 1, 11, 65, 0, 33, 5, 32, 11, 32, 2, 45, 0, 91, 65, 0, 71, 113, 33, 23, 32, 16, 32, 21, 114, 32, 22, 114, 13, 0, 32, 23, 69, 13, 3, 11, 35, 2, 34, 4, 33, 2, 32, 4, 65, 1, 106, 32, 2, 32, 21, 32, 22, 114, 27, 33, 18, 2, 64, 32, 0, 47, 1, 42, 34, 2, 32, 6, 65, 255, 255, 3, 113, 70, 4, 127, 32, 0, 32, 1, 16, 42, 32, 0, 47, 1, 42, 5, 32, 2, 11, 65, 16, 116, 65, 16, 117, 32, 6, 107, 65, 1, 70, 4, 64, 2, 64, 32, 13, 16, 49, 4, 64, 2, 127, 2, 64, 32, 13, 34, 2, 65, 33, 107, 34, 4, 65, 31, 77, 65, 0, 65, 1, 32, 4, 116, 65, 247, 180, 128, 144, 126, 113, 27, 13, 0, 32, 2, 65, 251, 0, 107, 65, 3, 73, 32, 2, 65, 219, 0, 107, 34, 2, 65, 5, 77, 65, 0, 65, 1, 32, 2, 116, 65, 37, 113, 27, 114, 13, 0, 65, 0, 12, 1, 11, 65, 1, 11, 69, 13, 1, 11, 65, 0, 33, 5, 32, 13, 65, 45, 107, 34, 2, 65, 18, 75, 65, 1, 32, 2, 116, 65, 129, 192, 16, 113, 69, 114, 13, 5, 32, 0, 32, 1, 40, 2, 0, 32, 18, 17, 1, 0, 69, 13, 5, 11, 32, 0, 32, 0, 44, 0, 48, 32, 0, 40, 2, 44, 32, 0, 65, 52, 106, 16, 8, 58, 0, 48, 12, 1, 11, 32, 0, 65, 255, 1, 58, 0, 48, 11, 32, 0, 32, 1, 16, 25, 3, 64, 2, 64, 32, 1, 40, 2, 0, 34, 2, 16, 33, 69, 4, 64, 32, 15, 65, 0, 54, 2, 20, 32, 15, 32, 18, 54, 2, 16, 32, 15, 32, 15, 41, 3, 16, 55, 3, 8, 32, 1, 33, 12, 32, 15, 40, 2, 8, 33, 7, 32, 0, 34, 8, 32, 15, 40, 2, 12, 34, 2, 65, 1, 117, 106, 34, 20, 32, 0, 40, 2, 44, 2, 127, 32, 2, 65, 1, 113, 34, 17, 4, 64, 32, 20, 40, 2, 0, 32, 7, 106, 40, 2, 0, 12, 1, 11, 32, 7, 11, 17, 1, 0, 33, 13, 32, 12, 40, 2, 0, 34, 2, 16, 51, 33, 5, 65, 0, 33, 14, 2, 64, 32, 5, 32, 20, 32, 2, 2, 127, 32, 17, 4, 64, 32, 20, 40, 2, 0, 32, 7, 106, 40, 2, 0, 12, 1, 11, 32, 7, 11, 17, 1, 0, 34, 4, 114, 65, 1, 71, 13, 0, 32, 8, 65, 52, 106, 33, 14, 3, 127, 2, 64, 2, 64, 32, 4, 34, 2, 65, 1, 113, 69, 13, 0, 32, 12, 40, 2, 0, 34, 4, 65, 35, 70, 32, 4, 65, 58, 70, 114, 13, 0, 32, 8, 32, 12, 16, 42, 32, 8, 32, 12, 16, 25, 32, 8, 32, 8, 44, 0, 48, 32, 8, 40, 2, 44, 32, 14, 16, 8, 58, 0, 48, 12, 1, 11, 2, 64, 32, 13, 65, 1, 113, 69, 13, 0, 32, 12, 40, 2, 0, 65, 35, 71, 13, 0, 32, 8, 32, 12, 16, 42, 32, 8, 32, 12, 16, 25, 32, 8, 32, 8, 44, 0, 48, 32, 8, 40, 2, 44, 32, 14, 16, 8, 58, 0, 48, 12, 1, 11, 32, 5, 65, 1, 113, 4, 64, 32, 8, 32, 12, 16, 42, 32, 8, 32, 8, 44, 0, 48, 32, 8, 40, 2, 44, 32, 14, 16, 8, 58, 0, 48, 12, 1, 11, 32, 12, 40, 2, 0, 65, 58, 71, 4, 64, 65, 1, 33, 14, 12, 3, 11, 32, 8, 32, 12, 16, 42, 11, 32, 12, 40, 2, 0, 34, 4, 16, 51, 33, 5, 32, 7, 33, 13, 32, 20, 32, 4, 32, 17, 4, 127, 32, 20, 40, 2, 0, 32, 7, 106, 40, 2, 0, 5, 32, 13, 11, 17, 1, 0, 33, 4, 32, 2, 33, 13, 32, 8, 40, 2, 44, 65, 58, 71, 13, 0, 32, 4, 4, 127, 32, 8, 32, 12, 16, 25, 32, 8, 32, 8, 44, 0, 48, 32, 8, 40, 2, 44, 32, 14, 16, 8, 58, 0, 48, 12, 1, 5, 65, 255, 1, 11, 11, 33, 14, 11, 32, 14, 65, 255, 1, 113, 65, 1, 71, 13, 1, 32, 1, 40, 2, 0, 33, 2, 11, 32, 2, 69, 13, 0, 32, 2, 16, 33, 69, 13, 0, 3, 64, 2, 64, 2, 64, 32, 2, 16, 33, 4, 64, 32, 0, 32, 1, 16, 50, 12, 1, 11, 32, 2, 16, 51, 69, 13, 1, 32, 0, 32, 1, 16, 42, 11, 32, 1, 40, 2, 0, 33, 2, 12, 1, 11, 11, 32, 2, 69, 13, 0, 32, 0, 46, 1, 42, 34, 2, 32, 19, 76, 13, 0, 32, 2, 13, 1, 32, 0, 32, 1, 16, 52, 69, 13, 1, 11, 11, 32, 3, 32, 0, 47, 1, 36, 70, 4, 64, 32, 21, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 16, 36, 32, 0, 40, 2, 52, 34, 0, 65, 1, 107, 33, 2, 32, 1, 2, 127, 2, 64, 2, 64, 2, 64, 32, 10, 32, 3, 65, 16, 116, 65, 16, 117, 78, 4, 64, 32, 2, 65, 3, 73, 13, 1, 65, 206, 0, 65, 211, 0, 32, 0, 65, 4, 70, 27, 12, 4, 11, 32, 11, 4, 64, 32, 2, 65, 3, 73, 13, 2, 65, 207, 0, 65, 212, 0, 32, 0, 65, 4, 70, 27, 12, 4, 11, 32, 2, 65, 3, 73, 13, 2, 65, 208, 0, 65, 213, 0, 32, 0, 65, 4, 70, 27, 12, 3, 11, 66, 201, 128, 252, 129, 192, 8, 32, 2, 173, 66, 4, 134, 136, 167, 12, 2, 11, 66, 202, 128, 128, 130, 208, 8, 32, 2, 173, 66, 4, 134, 136, 167, 12, 1, 11, 66, 203, 128, 132, 130, 224, 8, 32, 2, 173, 66, 4, 134, 136, 167, 11, 59, 1, 4, 12, 3, 11, 65, 0, 33, 5, 32, 16, 69, 13, 3, 32, 0, 16, 36, 32, 0, 40, 2, 52, 34, 0, 65, 1, 107, 33, 2, 32, 1, 2, 127, 2, 64, 2, 64, 32, 10, 32, 3, 65, 16, 116, 65, 16, 117, 78, 4, 64, 32, 2, 65, 3, 73, 13, 1, 65, 209, 0, 65, 214, 0, 32, 0, 65, 4, 70, 27, 12, 3, 11, 32, 2, 65, 3, 73, 13, 1, 65, 210, 0, 65, 215, 0, 32, 0, 65, 4, 70, 27, 12, 2, 11, 66, 204, 128, 136, 130, 240, 8, 32, 2, 173, 66, 4, 134, 136, 167, 12, 1, 11, 66, 205, 128, 140, 130, 128, 9, 32, 2, 173, 66, 4, 134, 136, 167, 11, 59, 1, 4, 12, 2, 11, 32, 22, 4, 64, 32, 3, 32, 0, 47, 1, 4, 71, 4, 64, 32, 0, 32, 6, 59, 1, 6, 32, 0, 32, 3, 59, 1, 4, 32, 0, 32, 9, 59, 1, 8, 11, 32, 0, 16, 36, 32, 1, 65, 217, 0, 65, 216, 0, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 27, 59, 1, 4, 12, 2, 11, 65, 0, 33, 5, 32, 23, 69, 13, 2, 32, 0, 16, 36, 32, 1, 65, 219, 0, 65, 218, 0, 32, 3, 65, 16, 116, 65, 16, 117, 32, 10, 74, 27, 59, 1, 4, 12, 1, 11, 32, 0, 32, 1, 16, 42, 2, 64, 32, 1, 40, 2, 0, 34, 2, 16, 33, 32, 2, 69, 114, 13, 0, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 34, 2, 16, 33, 13, 1, 32, 2, 13, 0, 11, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 65, 232, 0, 59, 1, 4, 11, 65, 1, 33, 5, 11, 32, 15, 65, 48, 106, 36, 0, 32, 5, 11, 22, 0, 32, 0, 32, 0, 40, 2, 40, 54, 2, 36, 32, 1, 32, 1, 40, 2, 12, 17, 3, 0, 11, 11, 0, 32, 0, 32, 1, 16, 17, 16, 110, 26, 11, 11, 0, 32, 0, 32, 1, 16, 15, 16, 110, 26, 11, 20, 0, 32, 0, 32, 1, 41, 2, 0, 55, 2, 0, 32, 1, 65, 4, 106, 16, 111, 26, 11, 44, 1, 1, 127, 35, 0, 65, 16, 107, 34, 1, 36, 0, 32, 1, 32, 0, 40, 2, 4, 54, 2, 8, 32, 1, 65, 8, 106, 16, 111, 40, 2, 0, 33, 0, 32, 1, 65, 16, 106, 36, 0, 32, 0, 11, 53, 1, 1, 127, 35, 0, 65, 16, 107, 34, 2, 36, 0, 32, 2, 32, 0, 40, 2, 4, 54, 2, 8, 32, 2, 32, 1, 40, 2, 4, 54, 2, 0, 32, 2, 65, 8, 106, 32, 2, 16, 72, 33, 0, 32, 2, 65, 16, 106, 36, 0, 32, 0, 11, 10, 0, 32, 0, 40, 2, 4, 65, 2, 107, 11, 37, 0, 32, 0, 32, 0, 47, 1, 42, 65, 1, 106, 59, 1, 42, 32, 0, 32, 1, 40, 2, 0, 54, 2, 44, 32, 1, 65, 1, 32, 1, 40, 2, 8, 17, 2, 0, 11, 13, 0, 32, 0, 65, 13, 70, 32, 0, 65, 10, 70, 114, 11, 16, 0, 32, 0, 40, 2, 4, 32, 0, 40, 2, 0, 107, 65, 1, 117, 11, 16, 0, 32, 0, 65, 24, 106, 16, 112, 32, 0, 65, 12, 106, 16, 112, 11, 12, 0, 32, 0, 32, 0, 40, 2, 36, 54, 2, 0, 11, 118, 1, 1, 127, 32, 1, 40, 2, 0, 16, 117, 34, 3, 4, 64, 2, 64, 2, 64, 32, 0, 47, 1, 42, 13, 0, 32, 0, 32, 1, 16, 52, 69, 13, 0, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 65, 8, 65, 9, 32, 0, 40, 2, 44, 65, 45, 70, 27, 33, 2, 12, 1, 11, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 117, 4, 64, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 117, 13, 0, 11, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 11, 32, 1, 32, 2, 59, 1, 4, 11, 32, 3, 11, 118, 1, 1, 127, 32, 1, 40, 2, 0, 16, 118, 34, 3, 4, 64, 2, 64, 2, 64, 32, 0, 47, 1, 42, 13, 0, 32, 0, 32, 1, 16, 52, 69, 13, 0, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 65, 8, 65, 9, 32, 0, 40, 2, 44, 65, 45, 70, 27, 33, 2, 12, 1, 11, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 118, 4, 64, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 118, 13, 0, 11, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 11, 32, 1, 32, 2, 59, 1, 4, 11, 32, 3, 11, 56, 1, 1, 127, 2, 64, 32, 1, 40, 2, 0, 65, 42, 71, 13, 0, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 119, 69, 13, 0, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 32, 2, 59, 1, 4, 65, 1, 33, 3, 11, 32, 3, 11, 56, 1, 1, 127, 2, 64, 32, 1, 40, 2, 0, 65, 38, 71, 13, 0, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 119, 69, 13, 0, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 32, 2, 59, 1, 4, 65, 1, 33, 3, 11, 32, 3, 11, 164, 1, 1, 2, 127, 2, 64, 32, 1, 40, 2, 0, 65, 33, 71, 13, 0, 32, 0, 32, 1, 16, 42, 2, 64, 2, 64, 32, 1, 40, 2, 0, 34, 4, 16, 43, 13, 0, 32, 4, 65, 60, 70, 4, 64, 32, 0, 32, 1, 16, 42, 32, 0, 32, 1, 16, 116, 65, 1, 71, 13, 3, 3, 64, 2, 64, 32, 0, 32, 1, 16, 116, 65, 1, 106, 14, 2, 5, 0, 1, 11, 11, 32, 1, 40, 2, 0, 65, 62, 71, 13, 3, 32, 0, 32, 1, 16, 42, 12, 1, 11, 32, 0, 32, 1, 16, 114, 4, 64, 32, 0, 32, 1, 16, 115, 65, 1, 71, 13, 3, 11, 3, 64, 32, 0, 32, 1, 16, 115, 65, 1, 106, 14, 2, 2, 1, 0, 11, 0, 11, 32, 0, 32, 1, 16, 25, 11, 32, 0, 16, 36, 32, 1, 32, 2, 59, 1, 4, 65, 1, 33, 3, 11, 32, 3, 11, 37, 0, 32, 0, 32, 0, 47, 1, 42, 65, 1, 106, 59, 1, 42, 32, 0, 32, 1, 40, 2, 0, 54, 2, 44, 32, 1, 65, 0, 32, 1, 40, 2, 8, 17, 2, 0, 11, 21, 0, 32, 0, 16, 51, 69, 4, 64, 32, 0, 16, 33, 32, 0, 69, 114, 15, 11, 65, 1, 11, 58, 1, 1, 127, 35, 0, 65, 16, 107, 34, 3, 36, 0, 32, 3, 32, 2, 59, 1, 12, 32, 3, 32, 1, 59, 1, 14, 32, 0, 65, 24, 106, 32, 3, 65, 12, 106, 16, 120, 32, 0, 65, 12, 106, 32, 3, 65, 14, 106, 16, 120, 32, 3, 65, 16, 106, 36, 0, 11, 189, 2, 1, 3, 127, 2, 64, 2, 64, 2, 64, 2, 64, 2, 64, 32, 1, 40, 2, 0, 34, 3, 65, 219, 0, 76, 4, 64, 32, 3, 65, 203, 0, 76, 4, 64, 2, 64, 32, 3, 65, 32, 107, 14, 3, 5, 7, 5, 0, 11, 32, 3, 65, 47, 107, 65, 2, 73, 13, 4, 32, 3, 65, 9, 71, 13, 6, 12, 4, 11, 32, 3, 65, 204, 0, 107, 14, 10, 3, 5, 3, 5, 3, 5, 5, 5, 5, 1, 5, 11, 32, 3, 65, 220, 0, 107, 34, 3, 65, 28, 75, 13, 4, 65, 1, 32, 3, 116, 65, 233, 132, 144, 42, 113, 13, 2, 32, 3, 65, 25, 70, 13, 1, 32, 3, 65, 28, 71, 13, 4, 32, 0, 32, 1, 16, 42, 65, 1, 33, 3, 3, 64, 32, 1, 40, 2, 0, 16, 121, 69, 13, 5, 32, 0, 32, 1, 16, 42, 32, 3, 65, 1, 113, 33, 4, 65, 0, 33, 3, 32, 4, 13, 0, 11, 12, 3, 11, 32, 0, 32, 1, 16, 42, 65, 0, 33, 3, 3, 64, 32, 1, 40, 2, 0, 16, 121, 69, 13, 4, 32, 0, 32, 1, 16, 42, 32, 3, 65, 255, 255, 3, 113, 33, 4, 32, 3, 65, 1, 106, 33, 3, 32, 4, 65, 7, 73, 13, 0, 11, 12, 2, 11, 32, 0, 32, 1, 16, 42, 65, 0, 33, 3, 3, 64, 32, 1, 40, 2, 0, 16, 121, 69, 13, 3, 32, 0, 32, 1, 16, 42, 32, 3, 65, 255, 255, 3, 113, 33, 4, 32, 3, 65, 1, 106, 33, 3, 32, 4, 65, 3, 73, 13, 0, 11, 12, 1, 11, 32, 0, 32, 1, 16, 42, 11, 32, 0, 32, 1, 16, 25, 32, 0, 16, 36, 32, 1, 32, 2, 59, 1, 4, 65, 1, 33, 5, 11, 32, 5, 11, 163, 3, 1, 4, 127, 2, 64, 32, 1, 40, 2, 0, 34, 3, 65, 252, 0, 71, 65, 0, 32, 3, 65, 62, 71, 27, 13, 0, 32, 0, 32, 1, 16, 42, 32, 0, 65, 24, 106, 16, 31, 47, 1, 0, 33, 5, 2, 64, 32, 1, 40, 2, 0, 34, 6, 65, 49, 107, 34, 3, 65, 8, 77, 4, 64, 32, 0, 32, 1, 16, 42, 2, 64, 32, 1, 40, 2, 0, 65, 43, 107, 14, 3, 0, 2, 0, 2, 11, 32, 0, 32, 1, 16, 42, 12, 1, 11, 65, 127, 33, 3, 2, 64, 32, 6, 65, 43, 107, 14, 3, 0, 1, 0, 1, 11, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 65, 49, 107, 34, 6, 65, 8, 75, 13, 0, 32, 0, 32, 1, 16, 42, 32, 6, 33, 3, 11, 32, 1, 40, 2, 0, 16, 43, 69, 13, 0, 32, 0, 32, 1, 16, 25, 2, 64, 32, 3, 65, 255, 255, 3, 113, 65, 255, 255, 3, 70, 4, 64, 32, 1, 40, 2, 0, 34, 4, 16, 51, 4, 64, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 34, 4, 16, 51, 13, 0, 11, 11, 2, 64, 32, 4, 65, 35, 71, 13, 0, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 34, 4, 16, 33, 32, 4, 69, 114, 13, 0, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 34, 4, 16, 33, 13, 1, 32, 4, 13, 0, 11, 11, 32, 4, 16, 33, 4, 64, 32, 0, 32, 1, 16, 50, 11, 3, 64, 32, 1, 40, 2, 0, 34, 6, 65, 32, 71, 4, 64, 32, 6, 69, 13, 3, 32, 0, 46, 1, 42, 33, 3, 32, 6, 16, 33, 4, 64, 32, 3, 32, 5, 65, 16, 116, 65, 16, 117, 76, 13, 4, 32, 0, 32, 1, 16, 50, 32, 3, 65, 1, 107, 33, 5, 12, 2, 11, 32, 3, 65, 1, 107, 34, 3, 32, 5, 32, 3, 32, 5, 65, 16, 116, 65, 16, 117, 74, 27, 33, 5, 12, 3, 5, 32, 0, 32, 1, 16, 42, 12, 1, 11, 0, 11, 0, 11, 32, 3, 32, 5, 106, 33, 5, 11, 32, 0, 65, 243, 0, 32, 5, 65, 16, 116, 65, 16, 117, 16, 44, 32, 0, 16, 36, 32, 1, 32, 2, 59, 1, 4, 65, 1, 33, 4, 11, 32, 4, 11, 23, 0, 65, 0, 33, 0, 32, 1, 16, 49, 4, 127, 32, 1, 16, 122, 65, 1, 115, 5, 32, 0, 11, 11, 6, 0, 32, 1, 16, 49, 11, 81, 1, 1, 127, 65, 1, 33, 1, 32, 0, 65, 128, 254, 3, 107, 65, 254, 1, 73, 32, 0, 65, 128, 192, 3, 107, 65, 255, 61, 73, 114, 32, 0, 65, 133, 1, 70, 32, 0, 65, 160, 1, 107, 65, 224, 174, 3, 73, 114, 114, 32, 0, 65, 33, 107, 65, 222, 0, 73, 114, 69, 4, 64, 32, 0, 65, 128, 128, 4, 107, 65, 128, 128, 192, 0, 73, 33, 1, 11, 32, 1, 11, 44, 0, 32, 0, 65, 0, 59, 1, 42, 32, 0, 32, 0, 47, 1, 40, 65, 1, 106, 59, 1, 40, 32, 0, 32, 1, 40, 2, 0, 54, 2, 44, 32, 1, 65, 0, 32, 1, 40, 2, 8, 17, 2, 0, 11, 13, 0, 32, 0, 65, 32, 70, 32, 0, 65, 9, 70, 114, 11, 86, 1, 1, 127, 2, 127, 65, 0, 32, 1, 40, 2, 0, 34, 2, 65, 45, 107, 65, 1, 75, 13, 0, 26, 32, 0, 32, 1, 16, 42, 2, 64, 32, 1, 40, 2, 0, 32, 2, 71, 13, 0, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 32, 2, 71, 13, 0, 32, 0, 32, 1, 16, 42, 65, 1, 32, 1, 40, 2, 0, 16, 43, 13, 1, 26, 11, 32, 0, 32, 1, 16, 25, 65, 0, 11, 11, 54, 1, 1, 127, 35, 0, 65, 16, 107, 34, 1, 36, 0, 32, 0, 66, 0, 55, 2, 0, 32, 1, 65, 0, 54, 2, 12, 32, 0, 65, 8, 106, 32, 1, 65, 12, 106, 32, 1, 65, 8, 106, 16, 55, 26, 32, 1, 65, 16, 106, 36, 0, 32, 0, 11, 4, 0, 32, 0, 11, 11, 0, 32, 0, 32, 1, 16, 56, 26, 32, 0, 11, 11, 0, 32, 0, 65, 0, 54, 2, 0, 32, 0, 11, 50, 0, 32, 0, 40, 2, 0, 26, 32, 0, 40, 2, 0, 32, 0, 16, 63, 65, 1, 116, 106, 26, 32, 0, 40, 2, 0, 32, 0, 16, 34, 65, 1, 116, 106, 26, 32, 0, 40, 2, 0, 32, 0, 16, 63, 65, 1, 116, 106, 26, 11, 39, 1, 1, 127, 32, 0, 40, 2, 0, 4, 64, 32, 0, 16, 61, 32, 0, 16, 62, 26, 32, 0, 40, 2, 0, 33, 1, 32, 0, 16, 63, 26, 32, 1, 16, 2, 11, 32, 0, 11, 6, 0, 32, 0, 16, 63, 11, 3, 0, 1, 11, 11, 0, 32, 0, 32, 0, 40, 2, 0, 16, 65, 11, 7, 0, 32, 0, 65, 8, 106, 11, 18, 0, 32, 0, 16, 62, 40, 2, 0, 32, 0, 40, 2, 0, 107, 65, 1, 117, 11, 6, 0, 32, 1, 16, 2, 11, 44, 1, 1, 127, 32, 1, 32, 0, 40, 2, 4, 34, 2, 71, 4, 64, 3, 64, 32, 0, 16, 62, 26, 32, 2, 65, 2, 107, 34, 2, 32, 1, 71, 13, 0, 11, 11, 32, 0, 32, 1, 54, 2, 4, 11, 3, 0, 1, 11, 6, 0, 32, 0, 16, 2, 11, 6, 0, 32, 0, 16, 2, 11, 6, 0, 32, 0, 16, 2, 11, 34, 0, 35, 0, 65, 16, 107, 34, 0, 36, 0, 32, 0, 65, 8, 106, 32, 1, 16, 73, 40, 2, 0, 33, 1, 32, 0, 65, 16, 106, 36, 0, 32, 1, 11, 20, 0, 32, 0, 32, 0, 40, 2, 0, 32, 1, 65, 1, 116, 106, 54, 2, 0, 32, 0, 11, 13, 0, 32, 0, 40, 2, 0, 32, 1, 40, 2, 0, 70, 11, 11, 0, 32, 0, 32, 1, 54, 2, 0, 32, 0, 11, 42, 0, 32, 0, 40, 2, 0, 26, 32, 0, 40, 2, 0, 32, 0, 16, 63, 65, 1, 116, 106, 26, 32, 0, 40, 2, 0, 26, 32, 0, 40, 2, 0, 32, 0, 16, 34, 65, 1, 116, 106, 26, 11, 3, 0, 1, 11, 61, 1, 2, 127, 35, 0, 65, 16, 107, 34, 3, 36, 0, 32, 3, 32, 0, 65, 1, 16, 78, 33, 2, 32, 0, 16, 62, 32, 2, 40, 2, 4, 32, 1, 16, 79, 32, 2, 32, 2, 40, 2, 4, 65, 2, 106, 54, 2, 4, 32, 2, 16, 80, 26, 32, 3, 65, 16, 106, 36, 0, 11, 83, 1, 2, 127, 35, 0, 65, 32, 107, 34, 3, 36, 0, 32, 0, 16, 62, 34, 2, 32, 3, 65, 8, 106, 32, 0, 32, 0, 16, 34, 65, 1, 106, 16, 81, 32, 0, 16, 34, 32, 2, 16, 82, 34, 2, 40, 2, 8, 32, 1, 16, 79, 32, 2, 32, 2, 40, 2, 8, 65, 2, 106, 54, 2, 8, 32, 0, 32, 2, 16, 83, 32, 2, 16, 84, 26, 32, 3, 65, 32, 106, 36, 0, 11, 36, 0, 32, 0, 32, 1, 54, 2, 0, 32, 0, 32, 1, 40, 2, 4, 34, 1, 54, 2, 4, 32, 0, 32, 1, 32, 2, 65, 1, 116, 106, 54, 2, 8, 32, 0, 11, 10, 0, 32, 0, 32, 1, 32, 2, 16, 85, 11, 17, 0, 32, 0, 40, 2, 0, 32, 0, 40, 2, 4, 54, 2, 4, 32, 0, 11, 89, 1, 2, 127, 35, 0, 65, 16, 107, 34, 2, 36, 0, 32, 2, 32, 1, 54, 2, 12, 32, 1, 32, 0, 16, 87, 34, 3, 77, 4, 64, 32, 0, 16, 63, 34, 0, 32, 3, 65, 1, 118, 73, 4, 64, 32, 2, 32, 0, 65, 1, 116, 54, 2, 8, 32, 2, 65, 8, 106, 32, 2, 65, 12, 106, 16, 88, 40, 2, 0, 33, 3, 11, 32, 2, 65, 16, 106, 36, 0, 32, 3, 15, 11, 32, 0, 16, 3, 0, 11, 104, 1, 2, 127, 35, 0, 65, 16, 107, 34, 4, 36, 0, 32, 4, 65, 0, 54, 2, 12, 32, 0, 65, 12, 106, 32, 4, 65, 12, 106, 32, 3, 16, 89, 26, 32, 1, 4, 64, 32, 0, 40, 2, 16, 32, 1, 16, 91, 33, 5, 11, 32, 0, 32, 5, 54, 2, 0, 32, 0, 32, 5, 32, 2, 65, 1, 116, 106, 34, 2, 54, 2, 8, 32, 0, 32, 2, 54, 2, 4, 32, 0, 16, 92, 32, 5, 32, 1, 65, 1, 116, 106, 54, 2, 0, 32, 4, 65, 16, 106, 36, 0, 32, 0, 11, 77, 1, 1, 127, 32, 0, 16, 57, 32, 0, 16, 62, 32, 0, 40, 2, 0, 32, 0, 40, 2, 4, 32, 1, 65, 4, 106, 34, 2, 16, 93, 32, 0, 32, 2, 16, 94, 32, 0, 65, 4, 106, 32, 1, 65, 8, 106, 16, 94, 32, 0, 16, 62, 32, 1, 16, 92, 16, 94, 32, 1, 32, 1, 40, 2, 4, 54, 2, 0, 32, 0, 32, 0, 16, 34, 16, 95, 11, 40, 1, 1, 127, 32, 0, 16, 96, 32, 0, 40, 2, 0, 4, 64, 32, 0, 40, 2, 16, 26, 32, 0, 40, 2, 0, 33, 1, 32, 0, 16, 97, 26, 32, 1, 16, 2, 11, 32, 0, 11, 10, 0, 32, 0, 32, 1, 32, 2, 16, 86, 11, 12, 0, 32, 1, 32, 2, 47, 1, 0, 59, 1, 0, 11, 66, 1, 1, 127, 35, 0, 65, 16, 107, 34, 1, 36, 0, 32, 0, 16, 62, 26, 32, 1, 65, 255, 255, 255, 255, 7, 54, 2, 12, 32, 1, 65, 255, 255, 255, 255, 7, 54, 2, 8, 32, 1, 65, 12, 106, 32, 1, 65, 8, 106, 16, 100, 40, 2, 0, 33, 0, 32, 1, 65, 16, 106, 36, 0, 32, 0, 11, 8, 0, 32, 0, 32, 1, 16, 101, 11, 21, 0, 32, 0, 32, 1, 16, 56, 26, 32, 0, 65, 4, 106, 32, 2, 16, 73, 26, 32, 0, 11, 7, 0, 32, 0, 40, 2, 16, 11, 10, 0, 32, 0, 32, 1, 65, 0, 16, 104, 11, 7, 0, 32, 0, 65, 12, 106, 11, 39, 0, 32, 3, 32, 3, 40, 2, 0, 32, 2, 32, 1, 107, 34, 0, 107, 34, 2, 54, 2, 0, 32, 0, 65, 1, 78, 4, 64, 32, 2, 32, 1, 32, 0, 16, 5, 26, 11, 11, 53, 1, 1, 127, 35, 0, 65, 16, 107, 34, 2, 36, 0, 32, 2, 32, 0, 40, 2, 0, 54, 2, 12, 32, 0, 32, 1, 40, 2, 0, 54, 2, 0, 32, 1, 32, 2, 65, 12, 106, 40, 2, 0, 54, 2, 0, 32, 2, 65, 16, 106, 36, 0, 11, 42, 0, 32, 0, 40, 2, 0, 26, 32, 0, 40, 2, 0, 32, 0, 16, 63, 65, 1, 116, 106, 26, 32, 0, 40, 2, 0, 32, 0, 16, 63, 65, 1, 116, 106, 26, 32, 0, 40, 2, 0, 26, 11, 11, 0, 32, 0, 32, 0, 40, 2, 4, 16, 108, 11, 18, 0, 32, 0, 16, 92, 40, 2, 0, 32, 0, 40, 2, 0, 107, 65, 1, 117, 11, 8, 0, 65, 255, 255, 255, 255, 7, 11, 8, 0, 65, 255, 255, 255, 255, 7, 11, 8, 0, 32, 0, 32, 1, 16, 102, 11, 40, 1, 2, 127, 35, 0, 65, 16, 107, 34, 2, 36, 0, 32, 2, 65, 8, 106, 32, 0, 32, 1, 16, 103, 33, 3, 32, 2, 65, 16, 106, 36, 0, 32, 1, 32, 0, 32, 3, 27, 11, 40, 1, 2, 127, 35, 0, 65, 16, 107, 34, 2, 36, 0, 32, 2, 65, 8, 106, 32, 1, 32, 0, 16, 103, 33, 3, 32, 2, 65, 16, 106, 36, 0, 32, 1, 32, 0, 32, 3, 27, 11, 13, 0, 32, 1, 40, 2, 0, 32, 2, 40, 2, 0, 73, 11, 29, 0, 32, 1, 65, 255, 255, 255, 255, 7, 75, 4, 64, 35, 1, 65, 44, 106, 16, 106, 0, 11, 32, 1, 65, 1, 116, 16, 1, 11, 7, 0, 32, 0, 40, 2, 4, 11, 5, 0, 16, 4, 0, 11, 6, 0, 32, 0, 16, 1, 11, 8, 0, 32, 0, 32, 1, 16, 109, 11, 45, 0, 32, 1, 32, 0, 40, 2, 8, 71, 4, 64, 3, 64, 32, 0, 40, 2, 16, 26, 32, 0, 32, 0, 40, 2, 8, 65, 2, 107, 54, 2, 8, 32, 0, 40, 2, 8, 32, 1, 71, 13, 0, 11, 11, 11, 18, 0, 32, 0, 32, 1, 54, 2, 4, 32, 0, 32, 1, 54, 2, 0, 32, 0, 11, 17, 0, 32, 0, 32, 0, 40, 2, 0, 65, 2, 107, 54, 2, 0, 32, 0, 11, 14, 0, 32, 0, 32, 0, 40, 2, 4, 65, 2, 107, 16, 123, 11, 10, 0, 32, 0, 65, 48, 107, 65, 10, 73, 11, 95, 1, 2, 127, 2, 127, 32, 1, 40, 2, 0, 34, 2, 65, 33, 71, 4, 64, 65, 1, 32, 2, 16, 124, 69, 13, 1, 26, 65, 1, 33, 2, 3, 64, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 34, 3, 16, 124, 4, 64, 32, 2, 65, 1, 106, 33, 2, 12, 1, 11, 11, 65, 1, 32, 2, 65, 255, 255, 3, 113, 69, 13, 1, 26, 65, 0, 32, 3, 65, 33, 71, 13, 1, 26, 11, 32, 0, 32, 1, 16, 42, 65, 1, 11, 11, 86, 1, 1, 127, 2, 127, 2, 64, 32, 1, 40, 2, 0, 34, 2, 16, 124, 13, 0, 32, 2, 65, 223, 0, 70, 32, 2, 65, 254, 0, 70, 114, 32, 2, 65, 35, 107, 34, 2, 65, 29, 77, 65, 0, 65, 1, 32, 2, 116, 65, 251, 179, 128, 172, 3, 113, 27, 114, 13, 0, 65, 0, 12, 1, 11, 65, 1, 11, 4, 64, 32, 0, 32, 1, 16, 42, 65, 1, 15, 11, 32, 0, 32, 1, 16, 125, 11, 103, 1, 2, 127, 2, 127, 2, 64, 32, 1, 40, 2, 0, 34, 2, 16, 124, 13, 0, 32, 2, 65, 33, 107, 34, 3, 65, 31, 77, 65, 0, 65, 1, 32, 3, 116, 65, 237, 223, 129, 176, 125, 113, 27, 13, 0, 32, 2, 65, 254, 0, 70, 32, 2, 65, 219, 0, 107, 34, 2, 65, 4, 77, 65, 0, 65, 1, 32, 2, 116, 65, 21, 113, 27, 114, 13, 0, 65, 0, 12, 1, 11, 65, 1, 11, 4, 64, 32, 0, 32, 1, 16, 42, 65, 1, 15, 11, 32, 0, 32, 1, 16, 125, 11, 19, 0, 32, 0, 16, 126, 32, 0, 65, 220, 0, 71, 113, 32, 0, 65, 34, 71, 113, 11, 12, 0, 32, 0, 16, 126, 32, 0, 65, 39, 71, 113, 11, 21, 1, 1, 127, 32, 0, 16, 49, 4, 127, 32, 0, 16, 122, 65, 1, 115, 5, 32, 1, 11, 11, 31, 0, 32, 0, 40, 2, 4, 32, 0, 16, 62, 40, 2, 0, 71, 4, 64, 32, 0, 32, 1, 16, 76, 15, 11, 32, 0, 32, 1, 16, 77, 11, 34, 1, 1, 127, 65, 1, 33, 1, 32, 1, 32, 0, 65, 193, 0, 107, 65, 6, 73, 32, 0, 16, 113, 32, 0, 65, 225, 0, 107, 65, 6, 73, 114, 27, 11, 57, 1, 1, 127, 65, 1, 33, 1, 2, 64, 2, 64, 2, 64, 32, 0, 65, 219, 0, 107, 14, 3, 2, 1, 2, 0, 11, 2, 64, 32, 0, 65, 251, 0, 107, 14, 3, 2, 1, 2, 0, 11, 32, 0, 65, 44, 70, 13, 1, 11, 65, 0, 33, 1, 11, 32, 1, 11, 22, 1, 1, 127, 32, 0, 16, 34, 33, 2, 32, 0, 32, 1, 16, 65, 32, 0, 32, 2, 16, 74, 11, 44, 1, 1, 127, 65, 1, 33, 1, 32, 1, 32, 0, 65, 193, 0, 107, 65, 26, 73, 32, 0, 65, 45, 70, 32, 0, 65, 225, 0, 107, 65, 26, 73, 114, 32, 0, 65, 48, 107, 65, 10, 73, 114, 27, 11, 78, 1, 1, 127, 2, 64, 32, 1, 40, 2, 0, 65, 37, 71, 13, 0, 32, 0, 32, 1, 16, 25, 32, 0, 32, 1, 16, 42, 65, 255, 1, 33, 2, 32, 1, 40, 2, 0, 16, 121, 69, 13, 0, 32, 0, 32, 1, 16, 42, 32, 1, 40, 2, 0, 16, 121, 69, 13, 0, 32, 0, 32, 1, 16, 42, 65, 1, 33, 2, 11, 32, 2, 65, 24, 116, 65, 24, 117, 11, 19, 0, 32, 0, 65, 9, 70, 32, 0, 65, 32, 107, 65, 224, 255, 195, 0, 73, 114, 11, 8, 0, 35, 1, 65, 208, 23, 106, 11, 109, 1, 2, 127, 2, 64, 3, 64, 2, 64, 32, 0, 32, 0, 40, 2, 24, 17, 0, 0, 33, 3, 32, 1, 65, 255, 255, 3, 113, 34, 1, 4, 64, 32, 1, 65, 1, 71, 13, 3, 32, 0, 65, 0, 59, 1, 4, 32, 0, 32, 0, 40, 2, 12, 17, 3, 0, 12, 1, 11, 32, 0, 65, 0, 59, 1, 4, 32, 0, 32, 0, 40, 2, 12, 17, 3, 0, 32, 3, 69, 13, 0, 32, 0, 65, 0, 32, 0, 40, 2, 8, 17, 2, 0, 65, 1, 33, 1, 12, 1, 11, 11, 65, 1, 33, 2, 11, 32, 2, 11, 11, 184, 201, 9, 1, 0, 35, 1, 11, 176, 201, 9, 102, 97, 108, 115, 101, 0, 115, 114, 99, 47, 46, 47, 115, 99, 104, 101, 109, 97, 46, 103, 101, 110, 101, 114, 97, 116, 101, 100, 46, 99, 99, 0, 97, 100, 118, 95, 115, 99, 104, 95, 115, 116, 116, 0, 97, 108, 108, 111, 99, 97, 116, 111, 114, 60, 84, 62, 58, 58, 97, 108, 108, 111, 99, 97, 116, 101, 40, 115, 105, 122, 101, 95, 116, 32, 110, 41, 32, 39, 110, 39, 32, 101, 120, 99, 101, 101, 100, 115, 32, 109, 97, 120, 105, 109, 117, 109, 32, 115, 117, 112, 112, 111, 114, 116, 101, 100, 32, 115, 105, 122, 101, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 1, 0, 3, 0, 1, 0, 4, 0, 1, 0, 5, 0, 1, 0, 0, 0, 2, 0, 3, 0, 1, 0, 0, 0, 0, 0, 6, 0, 2, 0, 8, 0, 2, 0, 10, 0, 2, 0, 1, 0, 0, 1, 2, 0, 0, 1, 1, 0, 0, 1, 2, 0, 0, 1, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 0, 0, 2, 0, 1, 1, 1, 0, 0, 1, 2, 0, 1, 1, 1, 0, 1, 1, 2, 0, 1, 1, 101, 110, 100, 0, 95, 101, 111, 102, 0, 95, 115, 95, 100, 105, 114, 95, 121, 109, 108, 95, 98, 103, 110, 0, 121, 97, 109, 108, 95, 118, 101, 114, 115, 105, 111, 110, 0, 95, 115, 95, 100, 105, 114, 95, 116, 97, 103, 95, 98, 103, 110, 0, 116, 97, 103, 95, 104, 97, 110, 100, 108, 101, 0, 116, 97, 103, 95, 112, 114, 101, 102, 105, 120, 0, 100, 105, 114, 101, 99, 116, 105, 118, 101, 95, 110, 97, 109, 101, 0, 100, 105, 114, 101, 99, 116, 105, 118, 101, 95, 112, 97, 114, 97, 109, 101, 116, 101, 114, 0, 45, 45, 45, 0, 46, 46, 46, 0, 45, 0, 63, 0, 58, 0, 124, 0, 62, 0, 95, 98, 114, 95, 98, 108, 107, 95, 115, 116, 114, 95, 99, 116, 110, 0, 91, 0, 93, 0, 123, 0, 125, 0, 44, 0, 34, 0, 95, 114, 95, 100, 113, 116, 95, 115, 116, 114, 95, 99, 116, 110, 0, 95, 98, 114, 95, 100, 113, 116, 95, 115, 116, 114, 95, 99, 116, 110, 0, 101, 115, 99, 97, 112, 101, 95, 115, 101, 113, 117, 101, 110, 99, 101, 0, 39, 0, 95, 114, 95, 115, 113, 116, 95, 115, 116, 114, 95, 99, 116, 110, 0, 95, 98, 114, 95, 115, 113, 116, 95, 115, 116, 114, 95, 99, 116, 110, 0, 110, 117, 108, 108, 95, 115, 99, 97, 108, 97, 114, 0, 98, 111, 111, 108, 101, 97, 110, 95, 115, 99, 97, 108, 97, 114, 0, 105, 110, 116, 101, 103, 101, 114, 95, 115, 99, 97, 108, 97, 114, 0, 102, 108, 111, 97, 116, 95, 115, 99, 97, 108, 97, 114, 0, 115, 116, 114, 105, 110, 103, 95, 115, 99, 97, 108, 97, 114, 0, 116, 97, 103, 0, 38, 0, 97, 110, 99, 104, 111, 114, 95, 110, 97, 109, 101, 0, 42, 0, 97, 108, 105, 97, 115, 95, 110, 97, 109, 101, 0, 95, 98, 108, 0, 99, 111, 109, 109, 101, 110, 116, 0, 115, 116, 114, 101, 97, 109, 0, 95, 100, 111, 99, 95, 119, 95, 98, 103, 110, 95, 119, 95, 101, 110, 100, 95, 115, 101, 113, 0, 95, 100, 111, 99, 95, 119, 95, 98, 103, 110, 95, 119, 111, 95, 101, 110, 100, 95, 115, 101, 113, 0, 95, 100, 111, 99, 95, 119, 111, 95, 98, 103, 110, 95, 119, 95, 101, 110, 100, 95, 115, 101, 113, 0, 95, 100, 111, 99, 95, 119, 111, 95, 98, 103, 110, 95, 119, 111, 95, 101, 110, 100, 95, 115, 101, 113, 0, 95, 100, 111, 99, 95, 119, 95, 98, 103, 110, 95, 119, 95, 101, 110, 100, 0, 95, 100, 111, 99, 95, 119, 95, 98, 103, 110, 95, 119, 111, 95, 101, 110, 100, 0, 95, 100, 111, 99, 95, 119, 111, 95, 98, 103, 110, 95, 119, 95, 101, 110, 100, 0, 95, 100, 111, 99, 95, 119, 111, 95, 98, 103, 110, 95, 119, 111, 95, 101, 110, 100, 0, 95, 98, 103, 110, 95, 105, 109, 112, 95, 100, 111, 99, 0, 95, 100, 114, 115, 95, 100, 111, 99, 0, 95, 101, 120, 112, 95, 100, 111, 99, 0, 95, 105, 109, 112, 95, 100, 111, 99, 0, 100, 111, 99, 117, 109, 101, 110, 116, 0, 95, 101, 120, 112, 95, 100, 111, 99, 95, 116, 97, 108, 0, 95, 115, 95, 100, 105, 114, 0, 121, 97, 109, 108, 95, 100, 105, 114, 101, 99, 116, 105, 118, 101, 0, 116, 97, 103, 95, 100, 105, 114, 101, 99, 116, 105, 118, 101, 0, 114, 101, 115, 101, 114, 118, 101, 100, 95, 100, 105, 114, 101, 99, 116, 105, 118, 101, 0, 102, 108, 111, 119, 95, 110, 111, 100, 101, 0, 95, 114, 95, 112, 114, 112, 0, 95, 98, 114, 95, 112, 114, 112, 0, 95, 114, 95, 115, 103, 108, 95, 112, 114, 112, 0, 95, 98, 114, 95, 115, 103, 108, 95, 112, 114, 112, 0, 95, 98, 95, 115, 103, 108, 95, 112, 114, 112, 0, 98, 108, 111, 99, 107, 95, 110, 111, 100, 101, 0, 98, 108, 111, 99, 107, 95, 115, 101, 113, 117, 101, 110, 99, 101, 0, 98, 108, 111, 99, 107, 95, 115, 101, 113, 117, 101, 110, 99, 101, 95, 105, 116, 101, 109, 0, 95, 98, 108, 107, 95, 115, 101, 113, 95, 105, 116, 109, 95, 116, 97, 108, 0, 98, 108, 111, 99, 107, 95, 109, 97, 112, 112, 105, 110, 103, 0, 95, 114, 95, 98, 108, 107, 95, 109, 97, 112, 95, 105, 116, 109, 0, 95, 98, 114, 95, 98, 108, 107, 95, 109, 97, 112, 95, 105, 116, 109, 0, 95, 98, 95, 98, 108, 107, 95, 109, 97, 112, 95, 105, 116, 109, 0, 98, 108, 111, 99, 107, 95, 109, 97, 112, 112, 105, 110, 103, 95, 112, 97, 105, 114, 0, 95, 114, 95, 98, 108, 107, 95, 107, 101, 121, 95, 105, 116, 109, 0, 95, 98, 114, 95, 98, 108, 107, 95, 107, 101, 121, 95, 105, 116, 109, 0, 95, 98, 95, 98, 108, 107, 95, 107, 101, 121, 95, 105, 116, 109, 0, 95, 114, 95, 98, 108, 107, 95, 118, 97, 108, 95, 105, 116, 109, 0, 95, 98, 114, 95, 98, 108, 107, 95, 118, 97, 108, 95, 105, 116, 109, 0, 95, 98, 95, 98, 108, 107, 95, 118, 97, 108, 95, 105, 116, 109, 0, 95, 98, 108, 107, 95, 101, 120, 112, 95, 105, 116, 109, 95, 116, 97, 108, 0, 95, 98, 108, 107, 95, 105, 109, 112, 95, 105, 116, 109, 95, 116, 97, 108, 0, 98, 108, 111, 99, 107, 95, 115, 99, 97, 108, 97, 114, 0, 102, 108, 111, 119, 95, 115, 101, 113, 117, 101, 110, 99, 101, 0, 95, 102, 108, 119, 95, 115, 101, 113, 95, 116, 97, 108, 0, 95, 115, 103, 108, 95, 102, 108, 119, 95, 115, 101, 113, 95, 116, 97, 108, 0, 102, 108, 111, 119, 95, 109, 97, 112, 112, 105, 110, 103, 0, 95, 102, 108, 119, 95, 109, 97, 112, 95, 116, 97, 108, 0, 95, 115, 103, 108, 95, 102, 108, 119, 95, 109, 97, 112, 95, 116, 97, 108, 0, 95, 114, 95, 102, 108, 119, 95, 115, 101, 113, 95, 100, 97, 116, 0, 95, 98, 114, 95, 102, 108, 119, 95, 115, 101, 113, 95, 100, 97, 116, 0, 95, 114, 95, 102, 108, 119, 95, 109, 97, 112, 95, 100, 97, 116, 0, 95, 98, 114, 95, 102, 108, 119, 95, 109, 97, 112, 95, 100, 97, 116, 0, 95, 114, 95, 115, 103, 108, 95, 102, 108, 119, 95, 99, 111, 108, 95, 100, 97, 116, 0, 95, 102, 108, 119, 95, 115, 101, 113, 95, 100, 97, 116, 95, 114, 112, 116, 0, 95, 102, 108, 119, 95, 109, 97, 112, 95, 100, 97, 116, 95, 114, 112, 116, 0, 95, 115, 103, 108, 95, 102, 108, 119, 95, 99, 111, 108, 95, 100, 97, 116, 95, 114, 112, 116, 0, 95, 114, 95, 102, 108, 119, 95, 115, 101, 113, 95, 105, 116, 109, 0, 95, 98, 114, 95, 102, 108, 119, 95, 115, 101, 113, 95, 105, 116, 109, 0, 95, 114, 95, 102, 108, 119, 95, 109, 97, 112, 95, 105, 116, 109, 0, 95, 98, 114, 95, 102, 108, 119, 95, 109, 97, 112, 95, 105, 116, 109, 0, 95, 114, 95, 115, 103, 108, 95, 102, 108, 119, 95, 99, 111, 108, 95, 105, 116, 109, 0, 102, 108, 111, 119, 95, 112, 97, 105, 114, 0, 95, 114, 95, 102, 108, 119, 95, 105, 109, 112, 95, 114, 95, 112, 97, 114, 0, 95, 114, 95, 102, 108, 119, 95, 105, 109, 112, 95, 98, 114, 95, 112, 97, 114, 0, 95, 98, 114, 95, 102, 108, 119, 95, 105, 109, 112, 95, 114, 95, 112, 97, 114, 0, 95, 98, 114, 95, 102, 108, 119, 95, 105, 109, 112, 95, 98, 114, 95, 112, 97, 114, 0, 95, 114, 95, 115, 103, 108, 95, 102, 108, 119, 95, 105, 109, 112, 95, 112, 97, 114, 0, 95, 114, 95, 102, 108, 119, 95, 106, 115, 108, 95, 97, 110, 110, 95, 112, 97, 114, 0, 95, 98, 114, 95, 102, 108, 119, 95, 106, 115, 108, 95, 97, 110, 110, 95, 112, 97, 114, 0, 95, 114, 95, 115, 103, 108, 95, 102, 108, 119, 95, 106, 115, 108, 95, 97, 110, 110, 95, 112, 97, 114, 0, 95, 114, 95, 102, 108, 119, 95, 110, 106, 108, 95, 97, 110, 110, 95, 112, 97, 114, 0, 95, 98, 114, 95, 102, 108, 119, 95, 110, 106, 108, 95, 97, 110, 110, 95, 112, 97, 114, 0, 95, 114, 95, 115, 103, 108, 95, 102, 108, 119, 95, 110, 106, 108, 95, 97, 110, 110, 95, 112, 97, 114, 0, 95, 102, 108, 119, 95, 97, 110, 110, 95, 112, 97, 114, 95, 116, 97, 108, 0, 95, 115, 103, 108, 95, 102, 108, 119, 95, 97, 110, 110, 95, 112, 97, 114, 95, 116, 97, 108, 0, 100, 111, 117, 98, 108, 101, 95, 113, 117, 111, 116, 101, 95, 115, 99, 97, 108, 97, 114, 0, 95, 114, 95, 115, 103, 108, 95, 100, 113, 116, 95, 99, 116, 110, 0, 95, 98, 114, 95, 109, 116, 108, 95, 100, 113, 116, 95, 99, 116, 110, 0, 115, 105, 110, 103, 108, 101, 95, 113, 117, 111, 116, 101, 95, 115, 99, 97, 108, 97, 114, 0, 95, 114, 95, 115, 103, 108, 95, 115, 113, 116, 95, 99, 116, 110, 0, 95, 98, 114, 95, 109, 116, 108, 95, 115, 113, 116, 95, 99, 116, 110, 0, 112, 108, 97, 105, 110, 95, 115, 99, 97, 108, 97, 114, 0, 97, 108, 105, 97, 115, 0, 97, 110, 99, 104, 111, 114, 0, 95, 100, 114, 115, 95, 100, 111, 99, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 115, 95, 100, 105, 114, 95, 114, 115, 118, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 114, 95, 98, 108, 107, 95, 115, 101, 113, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 114, 95, 98, 108, 107, 95, 109, 97, 112, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 114, 95, 98, 108, 107, 95, 115, 116, 114, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 114, 95, 102, 108, 119, 95, 115, 101, 113, 95, 100, 97, 116, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 114, 95, 102, 108, 119, 95, 109, 97, 112, 95, 100, 97, 116, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 114, 95, 115, 103, 108, 95, 102, 108, 119, 95, 99, 111, 108, 95, 100, 97, 116, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 114, 95, 100, 113, 116, 95, 115, 116, 114, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 98, 114, 95, 109, 116, 108, 95, 100, 113, 116, 95, 99, 116, 110, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 114, 95, 115, 113, 116, 95, 115, 116, 114, 95, 114, 101, 112, 101, 97, 116, 49, 0, 95, 98, 114, 95, 109, 116, 108, 95, 115, 113, 116, 95, 99, 116, 110, 95, 114, 101, 112, 101, 97, 116, 49, 0, 107, 101, 121, 0, 118, 97, 108, 117, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 37, 1, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 105, 0, 0, 0, 43, 6, 0, 0, 88, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 208, 73, 1, 0, 96, 12, 0, 0, 240, 227, 0, 0, 64, 19, 2, 0, 64, 251, 0, 0, 212, 255, 0, 0, 112, 0, 0, 0, 160, 0, 0, 0, 96, 8, 0, 0, 224, 255, 0, 0, 48, 2, 1, 0, 160, 2, 1, 0, 32, 3, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 27, 1, 0, 240, 72, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 3, 0, 1, 0, 105, 0, 5, 2, 1, 0, 27, 0, 9, 2, 1, 0, 32, 0, 13, 2, 1, 0, 45, 0, 17, 2, 1, 0, 56, 0, 23, 2, 1, 0, 91, 0, 25, 2, 1, 0, 92, 0, 29, 2, 1, 0, 94, 0, 31, 2, 1, 0, 96, 0, 33, 2, 1, 0, 97, 0, 35, 2, 1, 0, 100, 0, 37, 2, 1, 0, 101, 0, 77, 2, 1, 0, 26, 0, 79, 2, 1, 0, 31, 0, 81, 2, 1, 0, 44, 0, 83, 2, 1, 0, 55, 0, 85, 2, 1, 0, 93, 0, 134, 0, 1, 0, 134, 0, 135, 0, 1, 0, 135, 0, 221, 0, 1, 0, 22, 1, 228, 0, 1, 0, 23, 1, 153, 3, 1, 0, 20, 1, 154, 3, 1, 0, 19, 1, 9, 4, 1, 0, 249, 0, 10, 4, 1, 0, 248, 0, 11, 4, 1, 0, 237, 0, 12, 4, 1, 0, 236, 0, 13, 4, 1, 0, 196, 0, 14, 4, 1, 0, 195, 0, 15, 4, 1, 0, 184, 0, 16, 4, 1, 0, 183, 0, 58, 3, 2, 0, 11, 1, 15, 1, 59, 3, 2, 0, 10, 1, 14, 1, 227, 1, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 19, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 21, 2, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 83, 3, 15, 0, 129, 0, 130, 0, 178, 0, 179, 0, 190, 0, 191, 0, 229, 0, 231, 0, 232, 0, 243, 0, 244, 0, 4, 1, 5, 1, 16, 1, 17, 1, 37, 0, 3, 0, 1, 0, 105, 0, 218, 1, 1, 0, 27, 0, 222, 1, 1, 0, 32, 0, 231, 1, 1, 0, 45, 0, 235, 1, 1, 0, 56, 0, 241, 1, 1, 0, 91, 0, 243, 1, 1, 0, 92, 0, 247, 1, 1, 0, 94, 0, 249, 1, 1, 0, 96, 0, 251, 1, 1, 0, 97, 0, 253, 1, 1, 0, 100, 0, 255, 1, 1, 0, 101, 0, 87, 2, 1, 0, 26, 0, 89, 2, 1, 0, 31, 0, 93, 2, 1, 0, 44, 0, 95, 2, 1, 0, 55, 0, 97, 2, 1, 0, 93, 0, 149, 0, 1, 0, 134, 0, 150, 0, 1, 0, 135, 0, 212, 0, 1, 0, 22, 1, 220, 0, 1, 0, 23, 1, 60, 3, 1, 0, 20, 1, 61, 3, 1, 0, 19, 1, 158, 3, 1, 0, 249, 0, 159, 3, 1, 0, 248, 0, 162, 3, 1, 0, 237, 0, 167, 3, 1, 0, 236, 0, 169, 3, 1, 0, 196, 0, 170, 3, 1, 0, 195, 0, 173, 3, 1, 0, 184, 0, 181, 3, 1, 0, 183, 0, 149, 3, 2, 0, 11, 1, 15, 1, 150, 3, 2, 0, 10, 1, 14, 1, 91, 2, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 237, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 239, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 199, 3, 15, 0, 129, 0, 130, 0, 178, 0, 179, 0, 190, 0, 191, 0, 229, 0, 231, 0, 232, 0, 243, 0, 244, 0, 4, 1, 5, 1, 16, 1, 17, 1, 37, 0, 3, 0, 1, 0, 105, 0, 5, 2, 1, 0, 27, 0, 9, 2, 1, 0, 32, 0, 13, 2, 1, 0, 45, 0, 17, 2, 1, 0, 56, 0, 23, 2, 1, 0, 91, 0, 25, 2, 1, 0, 92, 0, 29, 2, 1, 0, 94, 0, 31, 2, 1, 0, 96, 0, 33, 2, 1, 0, 97, 0, 35, 2, 1, 0, 100, 0, 37, 2, 1, 0, 101, 0, 77, 2, 1, 0, 26, 0, 79, 2, 1, 0, 31, 0, 81, 2, 1, 0, 44, 0, 83, 2, 1, 0, 55, 0, 85, 2, 1, 0, 93, 0, 134, 0, 1, 0, 134, 0, 135, 0, 1, 0, 135, 0, 221, 0, 1, 0, 22, 1, 228, 0, 1, 0, 23, 1, 153, 3, 1, 0, 20, 1, 154, 3, 1, 0, 19, 1, 9, 4, 1, 0, 249, 0, 10, 4, 1, 0, 248, 0, 11, 4, 1, 0, 237, 0, 12, 4, 1, 0, 236, 0, 13, 4, 1, 0, 196, 0, 14, 4, 1, 0, 195, 0, 15, 4, 1, 0, 184, 0, 16, 4, 1, 0, 183, 0, 58, 3, 2, 0, 11, 1, 15, 1, 59, 3, 2, 0, 10, 1, 14, 1, 91, 2, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 19, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 21, 2, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 123, 3, 15, 0, 129, 0, 130, 0, 178, 0, 179, 0, 190, 0, 191, 0, 229, 0, 231, 0, 232, 0, 243, 0, 244, 0, 4, 1, 5, 1, 16, 1, 17, 1, 37, 0, 3, 0, 1, 0, 105, 0, 5, 2, 1, 0, 27, 0, 9, 2, 1, 0, 32, 0, 13, 2, 1, 0, 45, 0, 17, 2, 1, 0, 56, 0, 23, 2, 1, 0, 91, 0, 25, 2, 1, 0, 92, 0, 29, 2, 1, 0, 94, 0, 31, 2, 1, 0, 96, 0, 33, 2, 1, 0, 97, 0, 35, 2, 1, 0, 100, 0, 37, 2, 1, 0, 101, 0, 77, 2, 1, 0, 26, 0, 79, 2, 1, 0, 31, 0, 81, 2, 1, 0, 44, 0, 83, 2, 1, 0, 55, 0, 85, 2, 1, 0, 93, 0, 134, 0, 1, 0, 134, 0, 135, 0, 1, 0, 135, 0, 221, 0, 1, 0, 22, 1, 228, 0, 1, 0, 23, 1, 153, 3, 1, 0, 20, 1, 154, 3, 1, 0, 19, 1, 9, 4, 1, 0, 249, 0, 10, 4, 1, 0, 248, 0, 11, 4, 1, 0, 237, 0, 12, 4, 1, 0, 236, 0, 13, 4, 1, 0, 196, 0, 14, 4, 1, 0, 195, 0, 15, 4, 1, 0, 184, 0, 16, 4, 1, 0, 183, 0, 58, 3, 2, 0, 11, 1, 15, 1, 59, 3, 2, 0, 10, 1, 14, 1, 99, 2, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 19, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 21, 2, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 188, 3, 15, 0, 129, 0, 130, 0, 178, 0, 179, 0, 190, 0, 191, 0, 229, 0, 231, 0, 232, 0, 243, 0, 244, 0, 4, 1, 5, 1, 16, 1, 17, 1, 37, 0, 3, 0, 1, 0, 105, 0, 218, 1, 1, 0, 27, 0, 222, 1, 1, 0, 32, 0, 231, 1, 1, 0, 45, 0, 235, 1, 1, 0, 56, 0, 241, 1, 1, 0, 91, 0, 243, 1, 1, 0, 92, 0, 247, 1, 1, 0, 94, 0, 249, 1, 1, 0, 96, 0, 251, 1, 1, 0, 97, 0, 253, 1, 1, 0, 100, 0, 255, 1, 1, 0, 101, 0, 87, 2, 1, 0, 26, 0, 89, 2, 1, 0, 31, 0, 93, 2, 1, 0, 44, 0, 95, 2, 1, 0, 55, 0, 97, 2, 1, 0, 93, 0, 149, 0, 1, 0, 134, 0, 150, 0, 1, 0, 135, 0, 212, 0, 1, 0, 22, 1, 220, 0, 1, 0, 23, 1, 60, 3, 1, 0, 20, 1, 61, 3, 1, 0, 19, 1, 158, 3, 1, 0, 249, 0, 159, 3, 1, 0, 248, 0, 162, 3, 1, 0, 237, 0, 167, 3, 1, 0, 236, 0, 169, 3, 1, 0, 196, 0, 170, 3, 1, 0, 195, 0, 173, 3, 1, 0, 184, 0, 181, 3, 1, 0, 183, 0, 149, 3, 2, 0, 11, 1, 15, 1, 150, 3, 2, 0, 10, 1, 14, 1, 99, 2, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 237, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 239, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 130, 3, 15, 0, 129, 0, 130, 0, 178, 0, 179, 0, 190, 0, 191, 0, 229, 0, 231, 0, 232, 0, 243, 0, 244, 0, 4, 1, 5, 1, 16, 1, 17, 1, 37, 0, 3, 0, 1, 0, 105, 0, 218, 1, 1, 0, 27, 0, 222, 1, 1, 0, 32, 0, 231, 1, 1, 0, 45, 0, 235, 1, 1, 0, 56, 0, 241, 1, 1, 0, 91, 0, 243, 1, 1, 0, 92, 0, 247, 1, 1, 0, 94, 0, 249, 1, 1, 0, 96, 0, 251, 1, 1, 0, 97, 0, 253, 1, 1, 0, 100, 0, 255, 1, 1, 0, 101, 0, 87, 2, 1, 0, 26, 0, 89, 2, 1, 0, 31, 0, 93, 2, 1, 0, 44, 0, 95, 2, 1, 0, 55, 0, 97, 2, 1, 0, 93, 0, 149, 0, 1, 0, 134, 0, 150, 0, 1, 0, 135, 0, 212, 0, 1, 0, 22, 1, 220, 0, 1, 0, 23, 1, 60, 3, 1, 0, 20, 1, 61, 3, 1, 0, 19, 1, 158, 3, 1, 0, 249, 0, 159, 3, 1, 0, 248, 0, 162, 3, 1, 0, 237, 0, 167, 3, 1, 0, 236, 0, 169, 3, 1, 0, 196, 0, 170, 3, 1, 0, 195, 0, 173, 3, 1, 0, 184, 0, 181, 3, 1, 0, 183, 0, 149, 3, 2, 0, 11, 1, 15, 1, 150, 3, 2, 0, 10, 1, 14, 1, 227, 1, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 237, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 239, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 203, 3, 15, 0, 129, 0, 130, 0, 178, 0, 179, 0, 190, 0, 191, 0, 229, 0, 231, 0, 232, 0, 243, 0, 244, 0, 4, 1, 5, 1, 16, 1, 17, 1, 37, 0, 3, 0, 1, 0, 105, 0, 5, 2, 1, 0, 27, 0, 9, 2, 1, 0, 32, 0, 13, 2, 1, 0, 45, 0, 17, 2, 1, 0, 56, 0, 23, 2, 1, 0, 91, 0, 25, 2, 1, 0, 92, 0, 29, 2, 1, 0, 94, 0, 31, 2, 1, 0, 96, 0, 33, 2, 1, 0, 97, 0, 35, 2, 1, 0, 100, 0, 37, 2, 1, 0, 101, 0, 77, 2, 1, 0, 26, 0, 79, 2, 1, 0, 31, 0, 81, 2, 1, 0, 44, 0, 83, 2, 1, 0, 55, 0, 85, 2, 1, 0, 93, 0, 134, 0, 1, 0, 134, 0, 135, 0, 1, 0, 135, 0, 221, 0, 1, 0, 22, 1, 228, 0, 1, 0, 23, 1, 153, 3, 1, 0, 20, 1, 154, 3, 1, 0, 19, 1, 9, 4, 1, 0, 249, 0, 10, 4, 1, 0, 248, 0, 11, 4, 1, 0, 237, 0, 12, 4, 1, 0, 236, 0, 13, 4, 1, 0, 196, 0, 14, 4, 1, 0, 195, 0, 15, 4, 1, 0, 184, 0, 16, 4, 1, 0, 183, 0, 58, 3, 2, 0, 11, 1, 15, 1, 59, 3, 2, 0, 10, 1, 14, 1, 101, 2, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 19, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 21, 2, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 87, 3, 15, 0, 129, 0, 130, 0, 178, 0, 179, 0, 190, 0, 191, 0, 229, 0, 231, 0, 232, 0, 243, 0, 244, 0, 4, 1, 5, 1, 16, 1, 17, 1, 37, 0, 3, 0, 1, 0, 105, 0, 218, 1, 1, 0, 27, 0, 222, 1, 1, 0, 32, 0, 231, 1, 1, 0, 45, 0, 235, 1, 1, 0, 56, 0, 241, 1, 1, 0, 91, 0, 243, 1, 1, 0, 92, 0, 247, 1, 1, 0, 94, 0, 249, 1, 1, 0, 96, 0, 251, 1, 1, 0, 97, 0, 253, 1, 1, 0, 100, 0, 255, 1, 1, 0, 101, 0, 87, 2, 1, 0, 26, 0, 89, 2, 1, 0, 31, 0, 93, 2, 1, 0, 44, 0, 95, 2, 1, 0, 55, 0, 97, 2, 1, 0, 93, 0, 149, 0, 1, 0, 134, 0, 150, 0, 1, 0, 135, 0, 212, 0, 1, 0, 22, 1, 220, 0, 1, 0, 23, 1, 60, 3, 1, 0, 20, 1, 61, 3, 1, 0, 19, 1, 158, 3, 1, 0, 249, 0, 159, 3, 1, 0, 248, 0, 162, 3, 1, 0, 237, 0, 167, 3, 1, 0, 236, 0, 169, 3, 1, 0, 196, 0, 170, 3, 1, 0, 195, 0, 173, 3, 1, 0, 184, 0, 181, 3, 1, 0, 183, 0, 149, 3, 2, 0, 11, 1, 15, 1, 150, 3, 2, 0, 10, 1, 14, 1, 101, 2, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 237, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 239, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 200, 3, 15, 0, 129, 0, 130, 0, 178, 0, 179, 0, 190, 0, 191, 0, 229, 0, 231, 0, 232, 0, 243, 0, 244, 0, 4, 1, 5, 1, 16, 1, 17, 1, 8, 0, 3, 0, 1, 0, 105, 0, 105, 2, 1, 0, 20, 0, 110, 2, 1, 0, 96, 0, 112, 2, 1, 0, 97, 0, 103, 0, 1, 0, 22, 1, 110, 0, 1, 0, 23, 1, 107, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 103, 2, 36, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 28, 0, 32, 0, 33, 0, 45, 0, 46, 0, 56, 0, 57, 0, 65, 0, 66, 0, 70, 0, 71, 0, 75, 0, 76, 0, 80, 0, 81, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 98, 0, 101, 0, 102, 0, 104, 0, 8, 0, 3, 0, 1, 0, 105, 0, 110, 2, 1, 0, 96, 0, 117, 2, 1, 0, 20, 0, 122, 2, 1, 0, 97, 0, 104, 0, 1, 0, 22, 1, 108, 0, 1, 0, 23, 1, 119, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 115, 2, 36, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 28, 0, 32, 0, 33, 0, 45, 0, 46, 0, 56, 0, 57, 0, 65, 0, 66, 0, 70, 0, 71, 0, 75, 0, 76, 0, 80, 0, 81, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 98, 0, 101, 0, 102, 0, 104, 0, 5, 0, 3, 0, 1, 0, 105, 0, 112, 2, 1, 0, 97, 0, 125, 2, 1, 0, 96, 0, 110, 0, 2, 0, 22, 1, 23, 1, 103, 2, 45, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 98, 0, 101, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 48, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 93, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 6, 0, 3, 0, 1, 0, 105, 0, 105, 2, 1, 0, 20, 0, 129, 2, 1, 0, 93, 0, 131, 2, 1, 0, 94, 0, 107, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 103, 2, 36, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 28, 0, 32, 0, 33, 0, 45, 0, 46, 0, 56, 0, 57, 0, 65, 0, 66, 0, 70, 0, 71, 0, 75, 0, 76, 0, 80, 0, 81, 0, 85, 0, 86, 0, 89, 0, 90, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 6, 0, 3, 0, 1, 0, 105, 0, 117, 2, 1, 0, 20, 0, 134, 2, 1, 0, 93, 0, 136, 2, 1, 0, 94, 0, 119, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 115, 2, 36, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 28, 0, 32, 0, 33, 0, 45, 0, 46, 0, 56, 0, 57, 0, 65, 0, 66, 0, 70, 0, 71, 0, 75, 0, 76, 0, 80, 0, 81, 0, 85, 0, 86, 0, 89, 0, 90, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 48, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 93, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 143, 2, 1, 0, 20, 0, 145, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 141, 2, 37, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 28, 0, 32, 0, 33, 0, 45, 0, 46, 0, 56, 0, 57, 0, 65, 0, 66, 0, 70, 0, 71, 0, 75, 0, 76, 0, 80, 0, 81, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 150, 2, 1, 0, 20, 0, 152, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 148, 2, 37, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 28, 0, 32, 0, 33, 0, 45, 0, 46, 0, 56, 0, 57, 0, 65, 0, 66, 0, 70, 0, 71, 0, 75, 0, 76, 0, 80, 0, 81, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 47, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 93, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 47, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 131, 2, 1, 0, 94, 0, 155, 2, 1, 0, 93, 0, 103, 2, 45, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 148, 2, 46, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 46, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 141, 2, 46, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 46, 0, 12, 0, 13, 0, 15, 0, 16, 0, 18, 0, 19, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 28, 0, 31, 0, 32, 0, 33, 0, 44, 0, 45, 0, 46, 0, 55, 0, 56, 0, 57, 0, 64, 0, 65, 0, 66, 0, 69, 0, 70, 0, 71, 0, 74, 0, 75, 0, 76, 0, 79, 0, 80, 0, 81, 0, 84, 0, 85, 0, 86, 0, 89, 0, 90, 0, 94, 0, 95, 0, 97, 0, 98, 0, 101, 0, 102, 0, 104, 0, 19, 0, 3, 0, 1, 0, 105, 0, 207, 0, 1, 0, 27, 0, 211, 0, 1, 0, 32, 0, 227, 0, 1, 0, 45, 0, 231, 0, 1, 0, 56, 0, 237, 0, 1, 0, 91, 0, 239, 0, 1, 0, 92, 0, 170, 1, 1, 0, 26, 0, 172, 1, 1, 0, 31, 0, 178, 1, 1, 0, 44, 0, 180, 1, 1, 0, 55, 0, 151, 2, 2, 0, 183, 0, 184, 0, 156, 2, 2, 0, 195, 0, 196, 0, 158, 2, 2, 0, 236, 0, 237, 0, 159, 2, 2, 0, 248, 0, 249, 0, 169, 2, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 233, 0, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 235, 0, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 121, 1, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 19, 0, 3, 0, 1, 0, 105, 0, 207, 0, 1, 0, 27, 0, 211, 0, 1, 0, 32, 0, 227, 0, 1, 0, 45, 0, 231, 0, 1, 0, 56, 0, 237, 0, 1, 0, 91, 0, 239, 0, 1, 0, 92, 0, 170, 1, 1, 0, 26, 0, 172, 1, 1, 0, 31, 0, 178, 1, 1, 0, 44, 0, 180, 1, 1, 0, 55, 0, 114, 2, 2, 0, 236, 0, 237, 0, 115, 2, 2, 0, 195, 0, 196, 0, 116, 2, 2, 0, 183, 0, 184, 0, 195, 2, 2, 0, 248, 0, 249, 0, 171, 2, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 233, 0, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 235, 0, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 113, 1, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 8, 0, 3, 0, 1, 0, 105, 0, 105, 2, 1, 0, 20, 0, 157, 2, 1, 0, 96, 0, 159, 2, 1, 0, 97, 0, 167, 0, 1, 0, 22, 1, 171, 0, 1, 0, 23, 1, 107, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 103, 2, 23, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 94, 0, 101, 0, 8, 0, 3, 0, 1, 0, 105, 0, 117, 2, 1, 0, 20, 0, 157, 2, 1, 0, 96, 0, 162, 2, 1, 0, 97, 0, 162, 0, 1, 0, 22, 1, 176, 0, 1, 0, 23, 1, 119, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 115, 2, 23, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 94, 0, 101, 0, 19, 0, 3, 0, 1, 0, 105, 0, 33, 1, 1, 0, 27, 0, 41, 1, 1, 0, 32, 0, 53, 1, 1, 0, 45, 0, 57, 1, 1, 0, 56, 0, 63, 1, 1, 0, 91, 0, 65, 1, 1, 0, 92, 0, 194, 1, 1, 0, 26, 0, 196, 1, 1, 0, 31, 0, 202, 1, 1, 0, 44, 0, 204, 1, 1, 0, 55, 0, 237, 2, 2, 0, 183, 0, 184, 0, 238, 2, 2, 0, 195, 0, 196, 0, 241, 2, 2, 0, 236, 0, 237, 0, 243, 2, 2, 0, 248, 0, 249, 0, 226, 2, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 59, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 61, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 113, 1, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 19, 0, 3, 0, 1, 0, 105, 0, 33, 1, 1, 0, 27, 0, 41, 1, 1, 0, 32, 0, 53, 1, 1, 0, 45, 0, 57, 1, 1, 0, 56, 0, 63, 1, 1, 0, 91, 0, 65, 1, 1, 0, 92, 0, 194, 1, 1, 0, 26, 0, 196, 1, 1, 0, 31, 0, 202, 1, 1, 0, 44, 0, 204, 1, 1, 0, 55, 0, 217, 2, 2, 0, 195, 0, 196, 0, 218, 2, 2, 0, 248, 0, 249, 0, 246, 2, 2, 0, 183, 0, 184, 0, 0, 3, 2, 0, 236, 0, 237, 0, 225, 2, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 59, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 61, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 121, 1, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 185, 2, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 143, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 187, 2, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 131, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 28, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 193, 2, 1, 0, 34, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 21, 4, 1, 0, 214, 0, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 46, 5, 1, 0, 201, 0, 170, 5, 1, 0, 206, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 28, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 213, 2, 1, 0, 29, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 166, 3, 1, 0, 214, 0, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 146, 4, 1, 0, 19, 1, 52, 5, 1, 0, 189, 0, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 113, 5, 1, 0, 217, 0, 168, 5, 1, 0, 206, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 5, 0, 3, 0, 1, 0, 105, 0, 159, 2, 1, 0, 97, 0, 233, 2, 1, 0, 96, 0, 171, 0, 2, 0, 22, 1, 23, 1, 103, 2, 32, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 101, 0, 28, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 235, 2, 1, 0, 34, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 21, 4, 1, 0, 214, 0, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 177, 5, 1, 0, 206, 0, 237, 5, 1, 0, 201, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 237, 2, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 131, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 28, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 239, 2, 1, 0, 34, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 21, 4, 1, 0, 214, 0, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 145, 5, 1, 0, 201, 0, 247, 5, 1, 0, 206, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 28, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 241, 2, 1, 0, 29, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 166, 3, 1, 0, 214, 0, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 146, 4, 1, 0, 19, 1, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 113, 5, 1, 0, 217, 0, 146, 5, 1, 0, 189, 0, 189, 5, 1, 0, 206, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 28, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 243, 2, 1, 0, 34, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 21, 4, 1, 0, 214, 0, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 98, 5, 1, 0, 201, 0, 130, 5, 1, 0, 206, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 245, 2, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 119, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 28, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 247, 2, 1, 0, 29, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 166, 3, 1, 0, 214, 0, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 146, 4, 1, 0, 19, 1, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 113, 5, 1, 0, 217, 0, 178, 5, 1, 0, 206, 0, 241, 5, 1, 0, 189, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 249, 2, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 131, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 26, 0, 3, 0, 1, 0, 105, 0, 251, 2, 1, 0, 16, 0, 254, 2, 1, 0, 19, 0, 1, 3, 1, 0, 28, 0, 4, 3, 1, 0, 33, 0, 7, 3, 1, 0, 46, 0, 10, 3, 1, 0, 57, 0, 16, 3, 1, 0, 95, 0, 19, 3, 1, 0, 98, 0, 22, 3, 1, 0, 102, 0, 25, 3, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 131, 0, 2, 0, 159, 0, 28, 1, 13, 3, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 27, 3, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 131, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 28, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 29, 3, 1, 0, 29, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 166, 3, 1, 0, 214, 0, 27, 4, 1, 0, 189, 0, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 146, 4, 1, 0, 19, 1, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 113, 5, 1, 0, 217, 0, 225, 5, 1, 0, 206, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 19, 0, 3, 0, 1, 0, 105, 0, 5, 2, 1, 0, 27, 0, 9, 2, 1, 0, 32, 0, 13, 2, 1, 0, 45, 0, 17, 2, 1, 0, 56, 0, 23, 2, 1, 0, 91, 0, 25, 2, 1, 0, 92, 0, 77, 2, 1, 0, 26, 0, 79, 2, 1, 0, 31, 0, 81, 2, 1, 0, 44, 0, 83, 2, 1, 0, 55, 0, 231, 3, 2, 0, 248, 0, 249, 0, 232, 3, 2, 0, 236, 0, 237, 0, 233, 3, 2, 0, 195, 0, 196, 0, 238, 3, 2, 0, 183, 0, 184, 0, 113, 1, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 91, 3, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 19, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 21, 2, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 19, 0, 3, 0, 1, 0, 105, 0, 5, 2, 1, 0, 27, 0, 9, 2, 1, 0, 32, 0, 13, 2, 1, 0, 45, 0, 17, 2, 1, 0, 56, 0, 23, 2, 1, 0, 91, 0, 25, 2, 1, 0, 92, 0, 77, 2, 1, 0, 26, 0, 79, 2, 1, 0, 31, 0, 81, 2, 1, 0, 44, 0, 83, 2, 1, 0, 55, 0, 223, 3, 2, 0, 248, 0, 249, 0, 228, 3, 2, 0, 236, 0, 237, 0, 229, 3, 2, 0, 195, 0, 196, 0, 230, 3, 2, 0, 183, 0, 184, 0, 121, 1, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 92, 3, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 19, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 21, 2, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 31, 3, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 131, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 28, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 33, 3, 1, 0, 34, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 21, 4, 1, 0, 214, 0, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 131, 4, 1, 0, 201, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 203, 5, 1, 0, 206, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 28, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 35, 3, 1, 0, 34, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 21, 4, 1, 0, 214, 0, 57, 4, 1, 0, 201, 0, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 224, 5, 1, 0, 206, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 37, 3, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 136, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 39, 3, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 124, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 28, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 41, 3, 1, 0, 29, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 166, 3, 1, 0, 214, 0, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 128, 4, 1, 0, 189, 0, 146, 4, 1, 0, 19, 1, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 113, 5, 1, 0, 217, 0, 204, 5, 1, 0, 206, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 28, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 43, 3, 1, 0, 29, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 166, 3, 1, 0, 214, 0, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 146, 4, 1, 0, 19, 1, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 96, 5, 1, 0, 189, 0, 113, 5, 1, 0, 217, 0, 139, 5, 1, 0, 206, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 45, 3, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 131, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 8, 0, 3, 0, 1, 0, 105, 0, 105, 2, 1, 0, 20, 0, 47, 3, 1, 0, 96, 0, 49, 3, 1, 0, 97, 0, 177, 0, 1, 0, 22, 1, 180, 0, 1, 0, 23, 1, 107, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 103, 2, 22, 0, 12, 0, 13, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 94, 0, 101, 0, 104, 0, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 52, 3, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 132, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 8, 0, 3, 0, 1, 0, 105, 0, 117, 2, 1, 0, 20, 0, 47, 3, 1, 0, 96, 0, 54, 3, 1, 0, 97, 0, 173, 0, 1, 0, 22, 1, 181, 0, 1, 0, 23, 1, 119, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 115, 2, 22, 0, 12, 0, 13, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 94, 0, 101, 0, 104, 0, 26, 0, 3, 0, 1, 0, 105, 0, 165, 2, 1, 0, 16, 0, 167, 2, 1, 0, 19, 0, 169, 2, 1, 0, 28, 0, 171, 2, 1, 0, 33, 0, 173, 2, 1, 0, 46, 0, 175, 2, 1, 0, 57, 0, 179, 2, 1, 0, 95, 0, 181, 2, 1, 0, 98, 0, 183, 2, 1, 0, 102, 0, 57, 3, 1, 0, 104, 0, 27, 1, 1, 0, 165, 0, 37, 1, 1, 0, 138, 0, 38, 1, 1, 0, 162, 0, 39, 1, 1, 0, 168, 0, 40, 1, 1, 0, 171, 0, 182, 1, 1, 0, 24, 1, 135, 5, 1, 0, 187, 0, 254, 5, 1, 0, 21, 1, 255, 5, 1, 0, 9, 1, 0, 6, 1, 0, 252, 0, 1, 6, 1, 0, 240, 0, 2, 6, 1, 0, 199, 0, 130, 0, 2, 0, 159, 0, 28, 1, 177, 2, 5, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 232, 4, 7, 0, 133, 0, 182, 0, 194, 0, 235, 0, 247, 0, 3, 1, 18, 1, 28, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 59, 3, 1, 0, 29, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 166, 3, 1, 0, 214, 0, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 146, 4, 1, 0, 19, 1, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 113, 5, 1, 0, 217, 0, 189, 5, 1, 0, 206, 0, 191, 5, 1, 0, 189, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 19, 0, 3, 0, 1, 0, 105, 0, 218, 1, 1, 0, 27, 0, 222, 1, 1, 0, 32, 0, 231, 1, 1, 0, 45, 0, 235, 1, 1, 0, 56, 0, 241, 1, 1, 0, 91, 0, 243, 1, 1, 0, 92, 0, 87, 2, 1, 0, 26, 0, 89, 2, 1, 0, 31, 0, 93, 2, 1, 0, 44, 0, 95, 2, 1, 0, 55, 0, 106, 3, 2, 0, 248, 0, 249, 0, 109, 3, 2, 0, 236, 0, 237, 0, 111, 3, 2, 0, 195, 0, 196, 0, 112, 3, 2, 0, 183, 0, 184, 0, 113, 1, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 182, 3, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 237, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 239, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 19, 0, 3, 0, 1, 0, 105, 0, 218, 1, 1, 0, 27, 0, 222, 1, 1, 0, 32, 0, 231, 1, 1, 0, 45, 0, 235, 1, 1, 0, 56, 0, 241, 1, 1, 0, 91, 0, 243, 1, 1, 0, 92, 0, 87, 2, 1, 0, 26, 0, 89, 2, 1, 0, 31, 0, 93, 2, 1, 0, 44, 0, 95, 2, 1, 0, 55, 0, 100, 3, 2, 0, 248, 0, 249, 0, 102, 3, 2, 0, 236, 0, 237, 0, 103, 3, 2, 0, 195, 0, 196, 0, 104, 3, 2, 0, 183, 0, 184, 0, 121, 1, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 183, 3, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 237, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 239, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 28, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 61, 3, 1, 0, 34, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 21, 4, 1, 0, 214, 0, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 244, 5, 1, 0, 201, 0, 247, 5, 1, 0, 206, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 6, 0, 3, 0, 1, 0, 105, 0, 105, 2, 1, 0, 20, 0, 63, 3, 1, 0, 93, 0, 65, 3, 1, 0, 94, 0, 107, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 103, 2, 23, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 97, 0, 101, 0, 6, 0, 3, 0, 1, 0, 105, 0, 117, 2, 1, 0, 20, 0, 68, 3, 1, 0, 93, 0, 70, 3, 1, 0, 94, 0, 119, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 115, 2, 23, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 35, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 93, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 35, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 93, 0, 94, 0, 97, 0, 101, 0, 26, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 73, 3, 1, 0, 34, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 71, 5, 1, 0, 214, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 34, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 93, 0, 94, 0, 97, 0, 101, 0, 6, 0, 3, 0, 1, 0, 105, 0, 105, 2, 1, 0, 20, 0, 75, 3, 1, 0, 93, 0, 77, 3, 1, 0, 94, 0, 107, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 103, 2, 22, 0, 12, 0, 13, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 97, 0, 101, 0, 104, 0, 26, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 80, 3, 1, 0, 29, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 146, 4, 1, 0, 19, 1, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 112, 5, 1, 0, 214, 0, 113, 5, 1, 0, 217, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 34, 0, 12, 0, 13, 0, 15, 0, 18, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 93, 0, 94, 0, 97, 0, 101, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 65, 3, 1, 0, 94, 0, 82, 3, 1, 0, 93, 0, 103, 2, 32, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 97, 0, 101, 0, 4, 0, 3, 0, 1, 0, 105, 0, 150, 2, 1, 0, 20, 0, 152, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 148, 2, 24, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 26, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 73, 3, 1, 0, 29, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 146, 4, 1, 0, 19, 1, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 112, 5, 1, 0, 214, 0, 113, 5, 1, 0, 217, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 26, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 80, 3, 1, 0, 34, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 71, 5, 1, 0, 214, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 19, 0, 3, 0, 1, 0, 105, 0, 131, 1, 1, 0, 27, 0, 135, 1, 1, 0, 32, 0, 144, 1, 1, 0, 45, 0, 148, 1, 1, 0, 56, 0, 154, 1, 1, 0, 91, 0, 156, 1, 1, 0, 92, 0, 65, 2, 1, 0, 26, 0, 67, 2, 1, 0, 31, 0, 69, 2, 1, 0, 44, 0, 71, 2, 1, 0, 55, 0, 113, 1, 2, 0, 42, 0, 43, 0, 25, 5, 2, 0, 248, 0, 249, 0, 26, 5, 2, 0, 236, 0, 237, 0, 31, 5, 2, 0, 195, 0, 196, 0, 33, 5, 2, 0, 183, 0, 184, 0, 197, 4, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 150, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 152, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 19, 0, 3, 0, 1, 0, 105, 0, 131, 1, 1, 0, 27, 0, 135, 1, 1, 0, 32, 0, 144, 1, 1, 0, 45, 0, 148, 1, 1, 0, 56, 0, 154, 1, 1, 0, 91, 0, 156, 1, 1, 0, 92, 0, 65, 2, 1, 0, 26, 0, 67, 2, 1, 0, 31, 0, 69, 2, 1, 0, 44, 0, 71, 2, 1, 0, 55, 0, 121, 1, 2, 0, 42, 0, 43, 0, 19, 5, 2, 0, 248, 0, 249, 0, 21, 5, 2, 0, 236, 0, 237, 0, 22, 5, 2, 0, 195, 0, 196, 0, 24, 5, 2, 0, 183, 0, 184, 0, 192, 4, 4, 0, 10, 1, 11, 1, 14, 1, 15, 1, 150, 1, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 152, 1, 5, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 4, 0, 3, 0, 1, 0, 105, 0, 143, 2, 1, 0, 20, 0, 145, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 141, 2, 24, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 34, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 6, 0, 3, 0, 1, 0, 105, 0, 117, 2, 1, 0, 20, 0, 84, 3, 1, 0, 93, 0, 86, 3, 1, 0, 94, 0, 119, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 115, 2, 22, 0, 12, 0, 13, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 97, 0, 101, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 34, 0, 12, 0, 13, 0, 15, 0, 18, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 93, 0, 94, 0, 97, 0, 101, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 141, 2, 33, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 33, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 4, 0, 3, 0, 1, 0, 105, 0, 150, 2, 1, 0, 20, 0, 152, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 148, 2, 23, 0, 12, 0, 13, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 104, 0, 25, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 195, 2, 1, 0, 38, 0, 197, 2, 1, 0, 42, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 205, 2, 1, 0, 93, 0, 207, 2, 1, 0, 96, 0, 209, 2, 1, 0, 100, 0, 8, 1, 1, 0, 136, 0, 139, 1, 1, 0, 22, 1, 95, 4, 1, 0, 10, 1, 120, 4, 1, 0, 185, 0, 121, 4, 1, 0, 197, 0, 122, 4, 1, 0, 250, 0, 149, 4, 1, 0, 19, 1, 155, 4, 1, 0, 238, 0, 244, 4, 1, 0, 228, 0, 245, 4, 1, 0, 222, 0, 246, 4, 1, 0, 217, 0, 71, 5, 1, 0, 214, 0, 36, 3, 3, 0, 131, 0, 6, 1, 16, 1, 19, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 25, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 217, 2, 1, 0, 38, 0, 219, 2, 1, 0, 42, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 227, 2, 1, 0, 93, 0, 229, 2, 1, 0, 96, 0, 231, 2, 1, 0, 100, 0, 9, 1, 1, 0, 136, 0, 142, 1, 1, 0, 22, 1, 61, 4, 1, 0, 250, 0, 64, 4, 1, 0, 238, 0, 65, 4, 1, 0, 197, 0, 67, 4, 1, 0, 185, 0, 97, 4, 1, 0, 10, 1, 146, 4, 1, 0, 19, 1, 90, 5, 1, 0, 228, 0, 95, 5, 1, 0, 222, 0, 112, 5, 1, 0, 214, 0, 113, 5, 1, 0, 217, 0, 247, 3, 3, 0, 131, 0, 6, 1, 16, 1, 244, 3, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 148, 2, 33, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 4, 0, 3, 0, 1, 0, 105, 0, 143, 2, 1, 0, 20, 0, 145, 2, 9, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 141, 2, 23, 0, 12, 0, 13, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 33, 0, 1, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 33, 0, 12, 0, 13, 0, 15, 0, 18, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 141, 2, 32, 0, 12, 0, 13, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 148, 2, 32, 0, 12, 0, 13, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 32, 0, 12, 0, 13, 0, 15, 0, 18, 0, 21, 0, 22, 0, 23, 0, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 44, 0, 45, 0, 55, 0, 56, 0, 64, 0, 65, 0, 69, 0, 70, 0, 74, 0, 75, 0, 79, 0, 80, 0, 84, 0, 85, 0, 89, 0, 90, 0, 94, 0, 97, 0, 101, 0, 104, 0, 5, 0, 3, 0, 1, 0, 105, 0, 89, 3, 1, 0, 96, 0, 91, 3, 1, 0, 97, 0, 216, 0, 2, 0, 22, 1, 23, 1, 103, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 19, 0, 3, 0, 1, 0, 105, 0, 93, 3, 1, 0, 26, 0, 95, 3, 1, 0, 31, 0, 99, 3, 1, 0, 44, 0, 101, 3, 1, 0, 55, 0, 105, 3, 1, 0, 93, 0, 107, 3, 1, 0, 96, 0, 109, 3, 1, 0, 100, 0, 20, 1, 1, 0, 136, 0, 146, 1, 1, 0, 22, 1, 188, 4, 1, 0, 19, 1, 28, 5, 1, 0, 10, 1, 84, 5, 1, 0, 250, 0, 86, 5, 1, 0, 238, 0, 94, 5, 1, 0, 197, 0, 101, 5, 1, 0, 185, 0, 97, 3, 2, 0, 34, 0, 36, 0, 103, 3, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 75, 5, 8, 0, 131, 0, 180, 0, 192, 0, 230, 0, 233, 0, 245, 0, 6, 1, 16, 1, 19, 0, 3, 0, 1, 0, 105, 0, 111, 3, 1, 0, 26, 0, 115, 3, 1, 0, 31, 0, 117, 3, 1, 0, 44, 0, 119, 3, 1, 0, 55, 0, 123, 3, 1, 0, 93, 0, 125, 3, 1, 0, 96, 0, 127, 3, 1, 0, 100, 0, 14, 1, 1, 0, 136, 0, 145, 1, 1, 0, 22, 1, 178, 4, 1, 0, 19, 1, 69, 5, 1, 0, 185, 0, 70, 5, 1, 0, 197, 0, 74, 5, 1, 0, 238, 0, 76, 5, 1, 0, 250, 0, 97, 5, 1, 0, 10, 1, 113, 3, 2, 0, 29, 0, 36, 0, 121, 3, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 230, 4, 8, 0, 131, 0, 180, 0, 192, 0, 230, 0, 233, 0, 245, 0, 6, 1, 16, 1, 5, 0, 3, 0, 1, 0, 105, 0, 89, 3, 1, 0, 96, 0, 91, 3, 1, 0, 97, 0, 215, 0, 2, 0, 22, 1, 23, 1, 115, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 21, 0, 3, 0, 1, 0, 105, 0, 129, 3, 1, 0, 26, 0, 133, 3, 1, 0, 31, 0, 135, 3, 1, 0, 44, 0, 137, 3, 1, 0, 55, 0, 141, 3, 1, 0, 93, 0, 143, 3, 1, 0, 96, 0, 145, 3, 1, 0, 100, 0, 111, 1, 1, 0, 136, 0, 184, 1, 1, 0, 22, 1, 206, 4, 1, 0, 222, 0, 143, 5, 1, 0, 10, 1, 245, 5, 1, 0, 19, 1, 249, 5, 1, 0, 250, 0, 251, 5, 1, 0, 238, 0, 252, 5, 1, 0, 197, 0, 253, 5, 1, 0, 185, 0, 131, 3, 2, 0, 29, 0, 36, 0, 195, 4, 3, 0, 131, 0, 6, 1, 16, 1, 200, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 139, 3, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 19, 0, 3, 0, 1, 0, 105, 0, 111, 3, 1, 0, 26, 0, 115, 3, 1, 0, 31, 0, 117, 3, 1, 0, 44, 0, 119, 3, 1, 0, 55, 0, 123, 3, 1, 0, 93, 0, 125, 3, 1, 0, 96, 0, 127, 3, 1, 0, 100, 0, 14, 1, 1, 0, 136, 0, 145, 1, 1, 0, 22, 1, 178, 4, 1, 0, 19, 1, 69, 5, 1, 0, 185, 0, 70, 5, 1, 0, 197, 0, 74, 5, 1, 0, 238, 0, 76, 5, 1, 0, 250, 0, 97, 5, 1, 0, 10, 1, 97, 3, 2, 0, 29, 0, 36, 0, 121, 3, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 120, 5, 8, 0, 131, 0, 180, 0, 192, 0, 230, 0, 233, 0, 245, 0, 6, 1, 16, 1, 19, 0, 3, 0, 1, 0, 105, 0, 93, 3, 1, 0, 26, 0, 95, 3, 1, 0, 31, 0, 99, 3, 1, 0, 44, 0, 101, 3, 1, 0, 55, 0, 105, 3, 1, 0, 93, 0, 107, 3, 1, 0, 96, 0, 109, 3, 1, 0, 100, 0, 20, 1, 1, 0, 136, 0, 146, 1, 1, 0, 22, 1, 188, 4, 1, 0, 19, 1, 28, 5, 1, 0, 10, 1, 84, 5, 1, 0, 250, 0, 86, 5, 1, 0, 238, 0, 94, 5, 1, 0, 197, 0, 101, 5, 1, 0, 185, 0, 113, 3, 2, 0, 34, 0, 36, 0, 103, 3, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 108, 5, 8, 0, 131, 0, 180, 0, 192, 0, 230, 0, 233, 0, 245, 0, 6, 1, 16, 1, 21, 0, 3, 0, 1, 0, 105, 0, 129, 3, 1, 0, 26, 0, 133, 3, 1, 0, 31, 0, 135, 3, 1, 0, 44, 0, 137, 3, 1, 0, 55, 0, 141, 3, 1, 0, 93, 0, 143, 3, 1, 0, 96, 0, 145, 3, 1, 0, 100, 0, 111, 1, 1, 0, 136, 0, 184, 1, 1, 0, 22, 1, 72, 5, 1, 0, 222, 0, 143, 5, 1, 0, 10, 1, 245, 5, 1, 0, 19, 1, 249, 5, 1, 0, 250, 0, 251, 5, 1, 0, 238, 0, 252, 5, 1, 0, 197, 0, 253, 5, 1, 0, 185, 0, 131, 3, 2, 0, 34, 0, 36, 0, 239, 4, 3, 0, 131, 0, 6, 1, 16, 1, 242, 4, 4, 0, 180, 0, 192, 0, 233, 0, 245, 0, 139, 3, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 7, 0, 3, 0, 1, 0, 105, 0, 89, 3, 1, 0, 96, 0, 91, 3, 1, 0, 97, 0, 216, 0, 1, 0, 23, 1, 217, 0, 1, 0, 22, 1, 107, 2, 12, 0, 26, 0, 31, 0, 34, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 14, 0, 27, 0, 32, 0, 35, 0, 37, 0, 43, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 5, 0, 3, 0, 1, 0, 105, 0, 147, 3, 1, 0, 96, 0, 149, 3, 1, 0, 97, 0, 231, 0, 2, 0, 22, 1, 23, 1, 115, 2, 25, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 7, 0, 3, 0, 1, 0, 105, 0, 147, 3, 1, 0, 96, 0, 149, 3, 1, 0, 97, 0, 229, 0, 1, 0, 23, 1, 230, 0, 1, 0, 22, 1, 107, 2, 12, 0, 26, 0, 29, 0, 31, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 13, 0, 27, 0, 30, 0, 32, 0, 37, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 5, 0, 3, 0, 1, 0, 105, 0, 147, 3, 1, 0, 96, 0, 149, 3, 1, 0, 97, 0, 229, 0, 2, 0, 22, 1, 23, 1, 103, 2, 25, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 7, 0, 3, 0, 1, 0, 105, 0, 151, 3, 1, 0, 96, 0, 153, 3, 1, 0, 97, 0, 240, 0, 1, 0, 23, 1, 241, 0, 1, 0, 22, 1, 107, 2, 11, 0, 26, 0, 29, 0, 31, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 13, 0, 27, 0, 30, 0, 32, 0, 37, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 5, 0, 3, 0, 1, 0, 105, 0, 151, 3, 1, 0, 96, 0, 153, 3, 1, 0, 97, 0, 236, 0, 2, 0, 22, 1, 23, 1, 115, 2, 24, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 5, 0, 3, 0, 1, 0, 105, 0, 155, 3, 1, 0, 93, 0, 157, 3, 1, 0, 94, 0, 107, 2, 12, 0, 26, 0, 31, 0, 34, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 14, 0, 27, 0, 32, 0, 35, 0, 37, 0, 43, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 157, 3, 2, 0, 93, 0, 94, 0, 103, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 28, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 7, 0, 3, 0, 1, 0, 105, 0, 159, 3, 1, 0, 96, 0, 161, 3, 1, 0, 97, 0, 238, 0, 1, 0, 22, 1, 245, 0, 1, 0, 23, 1, 107, 2, 11, 0, 26, 0, 31, 0, 34, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 13, 0, 27, 0, 32, 0, 35, 0, 37, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 5, 0, 3, 0, 1, 0, 105, 0, 159, 3, 1, 0, 96, 0, 161, 3, 1, 0, 97, 0, 246, 0, 2, 0, 22, 1, 23, 1, 115, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 5, 0, 3, 0, 1, 0, 105, 0, 151, 3, 1, 0, 96, 0, 153, 3, 1, 0, 97, 0, 240, 0, 2, 0, 22, 1, 23, 1, 103, 2, 24, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 163, 3, 2, 0, 93, 0, 94, 0, 115, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 28, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 5, 0, 3, 0, 1, 0, 105, 0, 159, 3, 1, 0, 96, 0, 161, 3, 1, 0, 97, 0, 245, 0, 2, 0, 22, 1, 23, 1, 103, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 27, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 3, 0, 3, 0, 1, 0, 105, 0, 165, 3, 2, 0, 93, 0, 94, 0, 103, 2, 25, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 5, 0, 3, 0, 1, 0, 105, 0, 165, 3, 1, 0, 94, 0, 167, 3, 1, 0, 93, 0, 107, 2, 12, 0, 26, 0, 29, 0, 31, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 13, 0, 27, 0, 30, 0, 32, 0, 37, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 169, 3, 2, 0, 93, 0, 94, 0, 115, 2, 25, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 27, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 5, 0, 3, 0, 1, 0, 105, 0, 171, 3, 1, 0, 93, 0, 173, 3, 1, 0, 94, 0, 107, 2, 11, 0, 26, 0, 29, 0, 31, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 13, 0, 27, 0, 30, 0, 32, 0, 37, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 175, 3, 2, 0, 93, 0, 94, 0, 103, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 2, 0, 3, 0, 1, 0, 105, 0, 148, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 141, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 145, 2, 12, 0, 26, 0, 31, 0, 34, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 141, 2, 14, 0, 27, 0, 32, 0, 35, 0, 37, 0, 43, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 5, 0, 3, 0, 1, 0, 105, 0, 177, 3, 1, 0, 96, 0, 179, 3, 1, 0, 97, 0, 1, 1, 2, 0, 22, 1, 23, 1, 103, 2, 22, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 181, 3, 2, 0, 93, 0, 94, 0, 115, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 173, 3, 2, 0, 93, 0, 94, 0, 103, 2, 24, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 26, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 26, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 26, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 5, 0, 3, 0, 1, 0, 105, 0, 175, 3, 1, 0, 94, 0, 183, 3, 1, 0, 93, 0, 107, 2, 11, 0, 26, 0, 31, 0, 34, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 13, 0, 27, 0, 32, 0, 35, 0, 37, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 7, 0, 3, 0, 1, 0, 105, 0, 177, 3, 1, 0, 96, 0, 179, 3, 1, 0, 97, 0, 1, 1, 1, 0, 23, 1, 4, 1, 1, 0, 22, 1, 107, 2, 10, 0, 26, 0, 31, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 12, 0, 27, 0, 32, 0, 43, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 5, 0, 3, 0, 1, 0, 105, 0, 177, 3, 1, 0, 96, 0, 179, 3, 1, 0, 97, 0, 2, 1, 2, 0, 22, 1, 23, 1, 115, 2, 22, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 185, 3, 2, 0, 93, 0, 94, 0, 115, 2, 24, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 141, 2, 25, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 145, 2, 12, 0, 26, 0, 29, 0, 31, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 141, 2, 13, 0, 27, 0, 30, 0, 32, 0, 37, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 148, 2, 25, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 25, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 25, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 42, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 3, 24, 0, 1, 0, 2, 0, 4, 0, 7, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 22, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 2, 0, 3, 0, 1, 0, 105, 0, 148, 2, 24, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 189, 3, 2, 0, 93, 0, 94, 0, 115, 2, 22, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 145, 2, 11, 0, 26, 0, 31, 0, 34, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 141, 2, 13, 0, 27, 0, 32, 0, 35, 0, 37, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 191, 3, 2, 0, 93, 0, 94, 0, 103, 2, 22, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 141, 2, 24, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 145, 2, 11, 0, 26, 0, 29, 0, 31, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 141, 2, 13, 0, 27, 0, 30, 0, 32, 0, 37, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 193, 3, 24, 0, 1, 0, 2, 0, 4, 0, 7, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 22, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 3, 24, 0, 1, 0, 2, 0, 4, 0, 7, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 22, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 195, 3, 24, 0, 1, 0, 2, 0, 4, 0, 7, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 22, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 141, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 148, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 197, 3, 24, 0, 1, 0, 2, 0, 4, 0, 7, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 22, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 93, 0, 94, 0, 5, 0, 3, 0, 1, 0, 105, 0, 191, 3, 1, 0, 94, 0, 199, 3, 1, 0, 93, 0, 107, 2, 10, 0, 26, 0, 31, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 103, 2, 12, 0, 27, 0, 32, 0, 43, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 24, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 195, 3, 24, 0, 1, 0, 2, 0, 4, 0, 7, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 22, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 201, 3, 24, 0, 1, 0, 2, 0, 4, 0, 7, 0, 9, 0, 10, 0, 12, 0, 15, 0, 18, 0, 22, 0, 24, 0, 27, 0, 32, 0, 45, 0, 56, 0, 65, 0, 70, 0, 75, 0, 80, 0, 85, 0, 90, 0, 94, 0, 97, 0, 101, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 24, 0, 26, 0, 27, 0, 29, 0, 30, 0, 31, 0, 32, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 24, 0, 26, 0, 27, 0, 31, 0, 32, 0, 34, 0, 35, 0, 36, 0, 37, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 22, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 141, 2, 22, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 148, 2, 22, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 22, 0, 26, 0, 27, 0, 31, 0, 32, 0, 42, 0, 43, 0, 44, 0, 45, 0, 55, 0, 56, 0, 67, 0, 68, 0, 72, 0, 73, 0, 77, 0, 78, 0, 82, 0, 83, 0, 87, 0, 88, 0, 91, 0, 92, 0, 3, 0, 3, 0, 1, 0, 105, 0, 145, 2, 10, 0, 26, 0, 31, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 141, 2, 12, 0, 27, 0, 32, 0, 43, 0, 45, 0, 56, 0, 68, 0, 73, 0, 78, 0, 83, 0, 88, 0, 91, 0, 92, 0, 4, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 52, 1, 1, 0, 173, 0, 203, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 51, 1, 1, 0, 173, 0, 203, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 52, 1, 1, 0, 173, 0, 207, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 12, 0, 3, 0, 1, 0, 105, 0, 189, 2, 1, 0, 26, 0, 191, 2, 1, 0, 31, 0, 199, 2, 1, 0, 44, 0, 201, 2, 1, 0, 55, 0, 99, 4, 1, 0, 10, 1, 136, 4, 1, 0, 185, 0, 137, 4, 1, 0, 197, 0, 138, 4, 1, 0, 238, 0, 140, 4, 1, 0, 250, 0, 209, 3, 3, 0, 34, 0, 36, 0, 42, 0, 203, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 12, 0, 3, 0, 1, 0, 105, 0, 211, 2, 1, 0, 26, 0, 215, 2, 1, 0, 31, 0, 221, 2, 1, 0, 44, 0, 223, 2, 1, 0, 55, 0, 100, 4, 1, 0, 238, 0, 112, 4, 1, 0, 250, 0, 125, 4, 1, 0, 10, 1, 143, 4, 1, 0, 197, 0, 144, 4, 1, 0, 185, 0, 209, 3, 3, 0, 29, 0, 36, 0, 42, 0, 225, 2, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 3, 0, 3, 0, 1, 0, 105, 0, 213, 3, 1, 0, 20, 0, 211, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 217, 3, 1, 0, 20, 0, 215, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 219, 3, 16, 0, 16, 0, 19, 0, 20, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 223, 3, 1, 0, 20, 0, 221, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 12, 0, 3, 0, 1, 0, 105, 0, 111, 3, 1, 0, 26, 0, 115, 3, 1, 0, 31, 0, 117, 3, 1, 0, 44, 0, 119, 3, 1, 0, 55, 0, 5, 5, 1, 0, 10, 1, 117, 5, 1, 0, 185, 0, 121, 5, 1, 0, 197, 0, 122, 5, 1, 0, 238, 0, 126, 5, 1, 0, 250, 0, 209, 3, 2, 0, 29, 0, 36, 0, 121, 3, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 16, 0, 16, 0, 19, 0, 20, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 16, 0, 16, 0, 19, 0, 20, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 229, 3, 16, 0, 16, 0, 19, 0, 20, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 167, 2, 1, 0, 19, 0, 49, 1, 1, 0, 168, 0, 231, 3, 14, 0, 16, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 235, 3, 1, 0, 20, 0, 233, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 12, 0, 3, 0, 1, 0, 105, 0, 93, 3, 1, 0, 26, 0, 95, 3, 1, 0, 31, 0, 99, 3, 1, 0, 44, 0, 101, 3, 1, 0, 55, 0, 15, 5, 1, 0, 250, 0, 16, 5, 1, 0, 238, 0, 17, 5, 1, 0, 197, 0, 18, 5, 1, 0, 185, 0, 128, 5, 1, 0, 10, 1, 209, 3, 2, 0, 34, 0, 36, 0, 103, 3, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 3, 0, 3, 0, 1, 0, 105, 0, 239, 3, 1, 0, 20, 0, 237, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 243, 3, 1, 0, 20, 0, 241, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 167, 2, 1, 0, 19, 0, 50, 1, 1, 0, 168, 0, 245, 3, 14, 0, 16, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 217, 3, 1, 0, 20, 0, 247, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 249, 3, 16, 0, 16, 0, 19, 0, 20, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 253, 3, 1, 0, 20, 0, 251, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 167, 2, 1, 0, 19, 0, 72, 1, 1, 0, 168, 0, 255, 3, 14, 0, 16, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 3, 4, 1, 0, 20, 0, 1, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 7, 4, 1, 0, 20, 0, 5, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 11, 4, 1, 0, 20, 0, 9, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 13, 4, 16, 0, 16, 0, 19, 0, 20, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 17, 4, 1, 0, 20, 0, 15, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 21, 4, 1, 0, 20, 0, 19, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 217, 3, 1, 0, 20, 0, 23, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 25, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 27, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 12, 0, 3, 0, 1, 0, 105, 0, 29, 4, 1, 0, 20, 0, 31, 4, 1, 0, 26, 0, 33, 4, 1, 0, 31, 0, 35, 4, 1, 0, 44, 0, 37, 4, 1, 0, 55, 0, 131, 5, 1, 0, 185, 0, 132, 5, 1, 0, 250, 0, 133, 5, 1, 0, 238, 0, 134, 5, 1, 0, 197, 0, 214, 5, 1, 0, 7, 1, 39, 4, 5, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 2, 0, 3, 0, 1, 0, 105, 0, 41, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 43, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 41, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 45, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 47, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 49, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 51, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 53, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 55, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 57, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 59, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 61, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 63, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 65, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 67, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 69, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 71, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 73, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 12, 0, 3, 0, 1, 0, 105, 0, 31, 4, 1, 0, 26, 0, 33, 4, 1, 0, 31, 0, 35, 4, 1, 0, 44, 0, 37, 4, 1, 0, 55, 0, 75, 4, 1, 0, 20, 0, 153, 5, 1, 0, 7, 1, 164, 5, 1, 0, 250, 0, 167, 5, 1, 0, 238, 0, 169, 5, 1, 0, 197, 0, 179, 5, 1, 0, 185, 0, 39, 4, 5, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 12, 0, 3, 0, 1, 0, 105, 0, 209, 3, 1, 0, 20, 0, 31, 4, 1, 0, 26, 0, 33, 4, 1, 0, 31, 0, 35, 4, 1, 0, 44, 0, 37, 4, 1, 0, 55, 0, 180, 5, 1, 0, 7, 1, 181, 5, 1, 0, 197, 0, 182, 5, 1, 0, 238, 0, 190, 5, 1, 0, 250, 0, 196, 5, 1, 0, 185, 0, 39, 4, 5, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 2, 0, 3, 0, 1, 0, 105, 0, 77, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 79, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 81, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 83, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 85, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 233, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 211, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 237, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 241, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 87, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 89, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 77, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 91, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 93, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 95, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 97, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 99, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 101, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 103, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 215, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 105, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 107, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 109, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 111, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 113, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 115, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 117, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 119, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 121, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 247, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 123, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 125, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 129, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 131, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 133, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 135, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 137, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 251, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 1, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 9, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 141, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 143, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 145, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 147, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 149, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 155, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 12, 0, 3, 0, 1, 0, 105, 0, 129, 3, 1, 0, 26, 0, 133, 3, 1, 0, 31, 0, 135, 3, 1, 0, 44, 0, 137, 3, 1, 0, 55, 0, 209, 3, 1, 0, 42, 0, 216, 5, 1, 0, 250, 0, 217, 5, 1, 0, 238, 0, 218, 5, 1, 0, 197, 0, 219, 5, 1, 0, 185, 0, 248, 5, 1, 0, 10, 1, 139, 3, 5, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 157, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 159, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 23, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 19, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 163, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 165, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 167, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 169, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 171, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 173, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 175, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 177, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 179, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 181, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 229, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 183, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 185, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 79, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 67, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 189, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 207, 3, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 65, 4, 15, 0, 16, 0, 19, 0, 28, 0, 33, 0, 46, 0, 57, 0, 66, 0, 71, 0, 76, 0, 81, 0, 86, 0, 95, 0, 98, 0, 102, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 191, 4, 1, 0, 96, 0, 144, 1, 1, 0, 22, 1, 105, 2, 12, 0, 26, 0, 31, 0, 34, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 4, 0, 3, 0, 1, 0, 105, 0, 193, 4, 1, 0, 96, 0, 147, 1, 1, 0, 22, 1, 105, 2, 12, 0, 26, 0, 29, 0, 31, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 13, 0, 26, 0, 29, 0, 31, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 93, 0, 3, 0, 3, 0, 1, 0, 105, 0, 195, 4, 1, 0, 93, 0, 105, 2, 12, 0, 26, 0, 31, 0, 34, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 4, 0, 3, 0, 1, 0, 105, 0, 197, 4, 1, 0, 96, 0, 180, 1, 1, 0, 22, 1, 105, 2, 11, 0, 26, 0, 29, 0, 31, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 4, 0, 3, 0, 1, 0, 105, 0, 199, 4, 1, 0, 96, 0, 179, 1, 1, 0, 22, 1, 105, 2, 11, 0, 26, 0, 31, 0, 34, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 3, 0, 3, 0, 1, 0, 105, 0, 201, 4, 1, 0, 93, 0, 105, 2, 12, 0, 26, 0, 29, 0, 31, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 13, 0, 26, 0, 31, 0, 34, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 93, 0, 2, 0, 3, 0, 1, 0, 105, 0, 143, 2, 12, 0, 26, 0, 31, 0, 34, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 3, 0, 3, 0, 1, 0, 105, 0, 203, 4, 1, 0, 93, 0, 105, 2, 11, 0, 26, 0, 29, 0, 31, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 3, 0, 3, 0, 1, 0, 105, 0, 205, 4, 1, 0, 93, 0, 105, 2, 11, 0, 26, 0, 31, 0, 34, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 143, 2, 12, 0, 26, 0, 29, 0, 31, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 4, 0, 3, 0, 1, 0, 105, 0, 209, 4, 1, 0, 96, 0, 223, 1, 1, 0, 22, 1, 207, 4, 10, 0, 20, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 12, 0, 26, 0, 31, 0, 34, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 12, 0, 26, 0, 29, 0, 31, 0, 36, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 12, 0, 26, 0, 31, 0, 34, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 93, 0, 4, 0, 3, 0, 1, 0, 105, 0, 209, 4, 1, 0, 96, 0, 215, 1, 1, 0, 22, 1, 117, 2, 10, 0, 20, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 4, 0, 3, 0, 1, 0, 105, 0, 211, 4, 1, 0, 96, 0, 217, 1, 1, 0, 22, 1, 105, 2, 10, 0, 26, 0, 31, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 12, 0, 26, 0, 29, 0, 31, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 93, 0, 8, 0, 3, 0, 1, 0, 105, 0, 217, 4, 1, 0, 49, 0, 219, 4, 1, 0, 50, 0, 165, 1, 1, 0, 241, 0, 213, 4, 2, 0, 47, 0, 51, 0, 215, 4, 2, 0, 48, 0, 52, 0, 221, 4, 2, 0, 53, 0, 54, 0, 56, 2, 2, 0, 242, 0, 33, 1, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 11, 0, 26, 0, 31, 0, 34, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 8, 0, 3, 0, 1, 0, 105, 0, 225, 4, 1, 0, 49, 0, 227, 4, 1, 0, 50, 0, 170, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 223, 4, 2, 0, 47, 0, 51, 0, 229, 4, 2, 0, 53, 0, 54, 0, 103, 2, 2, 0, 242, 0, 33, 1, 2, 0, 3, 0, 1, 0, 105, 0, 127, 2, 11, 0, 20, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 93, 0, 9, 0, 3, 0, 1, 0, 105, 0, 233, 4, 1, 0, 49, 0, 235, 4, 1, 0, 50, 0, 237, 4, 1, 0, 53, 0, 239, 4, 1, 0, 54, 0, 161, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 231, 4, 2, 0, 47, 0, 51, 0, 81, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 243, 4, 1, 0, 49, 0, 245, 4, 1, 0, 50, 0, 247, 4, 1, 0, 53, 0, 249, 4, 1, 0, 54, 0, 166, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 241, 4, 2, 0, 47, 0, 51, 0, 69, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 253, 4, 1, 0, 49, 0, 255, 4, 1, 0, 50, 0, 1, 5, 1, 0, 53, 0, 3, 5, 1, 0, 54, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 100, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 7, 5, 1, 0, 49, 0, 9, 5, 1, 0, 50, 0, 11, 5, 1, 0, 53, 0, 13, 5, 1, 0, 54, 0, 169, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 5, 5, 2, 0, 47, 0, 51, 0, 73, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 15, 5, 1, 0, 49, 0, 17, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 19, 5, 2, 0, 53, 0, 54, 0, 85, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 243, 4, 1, 0, 49, 0, 245, 4, 1, 0, 50, 0, 171, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 249, 4, 2, 0, 53, 0, 54, 0, 21, 5, 2, 0, 47, 0, 51, 0, 69, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 23, 5, 1, 0, 49, 0, 25, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 27, 5, 2, 0, 53, 0, 54, 0, 68, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 29, 5, 1, 0, 49, 0, 31, 5, 1, 0, 50, 0, 33, 5, 1, 0, 53, 0, 35, 5, 1, 0, 54, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 51, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 39, 5, 1, 0, 49, 0, 41, 5, 1, 0, 50, 0, 211, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 37, 5, 2, 0, 47, 0, 51, 0, 43, 5, 2, 0, 53, 0, 54, 0, 57, 2, 2, 0, 242, 0, 33, 1, 2, 0, 3, 0, 1, 0, 105, 0, 45, 5, 11, 0, 20, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 93, 0, 9, 0, 3, 0, 1, 0, 105, 0, 47, 5, 1, 0, 49, 0, 49, 5, 1, 0, 50, 0, 51, 5, 1, 0, 53, 0, 53, 5, 1, 0, 54, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 92, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 55, 5, 1, 0, 49, 0, 57, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 59, 5, 2, 0, 53, 0, 54, 0, 42, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 29, 5, 1, 0, 49, 0, 31, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 35, 5, 2, 0, 53, 0, 54, 0, 51, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 63, 5, 1, 0, 49, 0, 65, 5, 1, 0, 50, 0, 67, 5, 1, 0, 53, 0, 69, 5, 1, 0, 54, 0, 201, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 61, 5, 2, 0, 47, 0, 51, 0, 41, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 7, 5, 1, 0, 49, 0, 9, 5, 1, 0, 50, 0, 186, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 13, 5, 2, 0, 53, 0, 54, 0, 71, 5, 2, 0, 47, 0, 51, 0, 73, 2, 2, 0, 242, 0, 33, 1, 3, 0, 3, 0, 1, 0, 105, 0, 73, 5, 1, 0, 93, 0, 117, 2, 10, 0, 20, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 9, 0, 3, 0, 1, 0, 105, 0, 75, 5, 1, 0, 49, 0, 77, 5, 1, 0, 50, 0, 79, 5, 1, 0, 53, 0, 81, 5, 1, 0, 54, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 66, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 63, 5, 1, 0, 49, 0, 65, 5, 1, 0, 50, 0, 202, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 69, 5, 2, 0, 53, 0, 54, 0, 83, 5, 2, 0, 47, 0, 51, 0, 41, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 87, 5, 1, 0, 49, 0, 89, 5, 1, 0, 50, 0, 91, 5, 1, 0, 53, 0, 93, 5, 1, 0, 54, 0, 212, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 85, 5, 2, 0, 47, 0, 51, 0, 98, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 97, 5, 1, 0, 49, 0, 99, 5, 1, 0, 50, 0, 163, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 95, 5, 2, 0, 47, 0, 51, 0, 101, 5, 2, 0, 53, 0, 54, 0, 53, 2, 2, 0, 242, 0, 33, 1, 2, 0, 3, 0, 1, 0, 105, 0, 143, 2, 11, 0, 26, 0, 31, 0, 34, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 143, 2, 11, 0, 26, 0, 29, 0, 31, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 8, 0, 3, 0, 1, 0, 105, 0, 105, 5, 1, 0, 49, 0, 107, 5, 1, 0, 50, 0, 205, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 103, 5, 2, 0, 47, 0, 51, 0, 109, 5, 2, 0, 53, 0, 54, 0, 33, 2, 2, 0, 242, 0, 33, 1, 3, 0, 3, 0, 1, 0, 105, 0, 111, 5, 1, 0, 93, 0, 207, 4, 10, 0, 20, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 9, 0, 3, 0, 1, 0, 105, 0, 113, 5, 1, 0, 49, 0, 115, 5, 1, 0, 50, 0, 117, 5, 1, 0, 53, 0, 119, 5, 1, 0, 54, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 94, 2, 2, 0, 242, 0, 33, 1, 3, 0, 3, 0, 1, 0, 105, 0, 121, 5, 1, 0, 93, 0, 105, 2, 10, 0, 26, 0, 31, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 9, 0, 3, 0, 1, 0, 105, 0, 39, 5, 1, 0, 49, 0, 41, 5, 1, 0, 50, 0, 43, 5, 1, 0, 54, 0, 125, 5, 1, 0, 53, 0, 175, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 123, 5, 2, 0, 47, 0, 51, 0, 57, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 47, 5, 1, 0, 49, 0, 49, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 53, 5, 2, 0, 53, 0, 54, 0, 92, 2, 2, 0, 242, 0, 33, 1, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 11, 0, 26, 0, 31, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 93, 0, 9, 0, 3, 0, 1, 0, 105, 0, 129, 5, 1, 0, 49, 0, 131, 5, 1, 0, 50, 0, 133, 5, 1, 0, 53, 0, 135, 5, 1, 0, 54, 0, 183, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 127, 5, 2, 0, 47, 0, 51, 0, 108, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 139, 5, 1, 0, 49, 0, 141, 5, 1, 0, 50, 0, 203, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 137, 5, 2, 0, 47, 0, 51, 0, 143, 5, 2, 0, 53, 0, 54, 0, 63, 2, 2, 0, 242, 0, 33, 1, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 11, 0, 26, 0, 29, 0, 31, 0, 36, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 8, 0, 3, 0, 1, 0, 105, 0, 113, 5, 1, 0, 49, 0, 115, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 119, 5, 2, 0, 53, 0, 54, 0, 94, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 129, 5, 1, 0, 49, 0, 131, 5, 1, 0, 50, 0, 191, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 135, 5, 2, 0, 53, 0, 54, 0, 145, 5, 2, 0, 47, 0, 51, 0, 108, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 105, 5, 1, 0, 49, 0, 107, 5, 1, 0, 50, 0, 109, 5, 1, 0, 54, 0, 149, 5, 1, 0, 53, 0, 197, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 147, 5, 2, 0, 47, 0, 51, 0, 33, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 153, 5, 1, 0, 49, 0, 155, 5, 1, 0, 50, 0, 157, 5, 1, 0, 53, 0, 159, 5, 1, 0, 54, 0, 198, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 151, 5, 2, 0, 47, 0, 51, 0, 30, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 87, 5, 1, 0, 49, 0, 89, 5, 1, 0, 50, 0, 199, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 93, 5, 2, 0, 53, 0, 54, 0, 161, 5, 2, 0, 47, 0, 51, 0, 98, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 165, 5, 1, 0, 49, 0, 167, 5, 1, 0, 50, 0, 207, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 163, 5, 2, 0, 47, 0, 51, 0, 169, 5, 2, 0, 53, 0, 54, 0, 60, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 171, 5, 1, 0, 49, 0, 173, 5, 1, 0, 50, 0, 175, 5, 1, 0, 53, 0, 177, 5, 1, 0, 54, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 29, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 179, 5, 1, 0, 49, 0, 181, 5, 1, 0, 50, 0, 183, 5, 1, 0, 53, 0, 185, 5, 1, 0, 54, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 38, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 187, 5, 1, 0, 49, 0, 189, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 191, 5, 2, 0, 53, 0, 54, 0, 110, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 193, 5, 1, 0, 49, 0, 195, 5, 1, 0, 50, 0, 197, 5, 1, 0, 53, 0, 199, 5, 1, 0, 54, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 75, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 201, 5, 1, 0, 49, 0, 203, 5, 1, 0, 50, 0, 205, 5, 1, 0, 53, 0, 207, 5, 1, 0, 54, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 64, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 201, 5, 1, 0, 49, 0, 203, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 207, 5, 2, 0, 53, 0, 54, 0, 64, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 209, 5, 1, 0, 49, 0, 211, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 213, 5, 2, 0, 53, 0, 54, 0, 46, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 217, 4, 1, 0, 49, 0, 219, 4, 1, 0, 50, 0, 221, 4, 1, 0, 54, 0, 217, 5, 1, 0, 53, 0, 206, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 215, 5, 2, 0, 47, 0, 51, 0, 56, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 171, 5, 1, 0, 49, 0, 173, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 177, 5, 2, 0, 53, 0, 54, 0, 29, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 23, 5, 1, 0, 49, 0, 25, 5, 1, 0, 50, 0, 27, 5, 1, 0, 54, 0, 219, 5, 1, 0, 53, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 68, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 221, 5, 1, 0, 49, 0, 223, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 225, 5, 2, 0, 53, 0, 54, 0, 74, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 229, 5, 1, 0, 49, 0, 231, 5, 1, 0, 50, 0, 233, 5, 1, 0, 53, 0, 235, 5, 1, 0, 54, 0, 200, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 227, 5, 2, 0, 47, 0, 51, 0, 62, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 237, 5, 1, 0, 49, 0, 239, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 241, 5, 2, 0, 53, 0, 54, 0, 88, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 245, 5, 1, 0, 49, 0, 247, 5, 1, 0, 50, 0, 209, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 243, 5, 2, 0, 47, 0, 51, 0, 249, 5, 2, 0, 53, 0, 54, 0, 61, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 75, 5, 1, 0, 49, 0, 77, 5, 1, 0, 50, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 81, 5, 2, 0, 53, 0, 54, 0, 66, 2, 2, 0, 242, 0, 33, 1, 9, 0, 3, 0, 1, 0, 105, 0, 187, 5, 1, 0, 49, 0, 189, 5, 1, 0, 50, 0, 191, 5, 1, 0, 54, 0, 251, 5, 1, 0, 53, 0, 234, 1, 1, 0, 241, 0, 215, 4, 2, 0, 48, 0, 52, 0, 251, 4, 2, 0, 47, 0, 51, 0, 110, 2, 2, 0, 242, 0, 33, 1, 8, 0, 3, 0, 1, 0, 105, 0, 13, 0, 1, 0, 9, 0, 15, 0, 1, 0, 10, 0, 253, 5, 1, 0, 1, 0, 213, 1, 1, 0, 112, 0, 118, 4, 1, 0, 117, 0, 174, 5, 2, 0, 107, 0, 108, 0, 37, 0, 3, 0, 111, 0, 120, 0, 123, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 10, 0, 26, 0, 31, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 2, 0, 3, 0, 1, 0, 105, 0, 150, 2, 10, 0, 20, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 8, 0, 3, 0, 1, 0, 105, 0, 13, 0, 1, 0, 9, 0, 127, 1, 1, 0, 1, 0, 255, 5, 1, 0, 10, 0, 213, 1, 1, 0, 112, 0, 118, 4, 1, 0, 117, 0, 205, 5, 2, 0, 107, 0, 108, 0, 37, 0, 3, 0, 111, 0, 120, 0, 123, 0, 2, 0, 3, 0, 1, 0, 105, 0, 143, 2, 10, 0, 26, 0, 31, 0, 42, 0, 44, 0, 55, 0, 67, 0, 72, 0, 77, 0, 82, 0, 87, 0, 8, 0, 3, 0, 1, 0, 105, 0, 13, 0, 1, 0, 9, 0, 127, 1, 1, 0, 1, 0, 1, 6, 1, 0, 10, 0, 213, 1, 1, 0, 112, 0, 118, 4, 1, 0, 117, 0, 205, 5, 2, 0, 107, 0, 108, 0, 37, 0, 3, 0, 111, 0, 120, 0, 123, 0, 8, 0, 3, 0, 1, 0, 105, 0, 13, 0, 1, 0, 9, 0, 127, 1, 1, 0, 1, 0, 3, 6, 1, 0, 10, 0, 213, 1, 1, 0, 112, 0, 118, 4, 1, 0, 117, 0, 205, 5, 2, 0, 107, 0, 108, 0, 37, 0, 3, 0, 111, 0, 120, 0, 123, 0, 8, 0, 3, 0, 1, 0, 105, 0, 13, 0, 1, 0, 9, 0, 15, 0, 1, 0, 10, 0, 5, 6, 1, 0, 1, 0, 213, 1, 1, 0, 112, 0, 118, 4, 1, 0, 117, 0, 171, 5, 2, 0, 107, 0, 108, 0, 37, 0, 3, 0, 111, 0, 120, 0, 123, 0, 2, 0, 3, 0, 1, 0, 105, 0, 139, 2, 10, 0, 20, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 7, 0, 3, 0, 1, 0, 105, 0, 7, 0, 1, 0, 2, 0, 9, 0, 1, 0, 4, 0, 11, 0, 1, 0, 7, 0, 13, 0, 1, 0, 9, 0, 162, 4, 1, 0, 117, 0, 250, 1, 5, 0, 125, 0, 126, 0, 127, 0, 128, 0, 25, 1, 2, 0, 3, 0, 1, 0, 105, 0, 7, 6, 10, 0, 20, 0, 26, 0, 31, 0, 44, 0, 55, 0, 64, 0, 69, 0, 74, 0, 79, 0, 84, 0, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 13, 6, 2, 0, 62, 0, 63, 0, 131, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 17, 6, 1, 0, 62, 0, 19, 6, 1, 0, 63, 0, 252, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 15, 6, 2, 0, 58, 0, 60, 0, 208, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 21, 6, 2, 0, 62, 0, 63, 0, 190, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 23, 6, 2, 0, 62, 0, 63, 0, 173, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 232, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 25, 6, 2, 0, 58, 0, 60, 0, 27, 6, 2, 0, 62, 0, 63, 0, 152, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 29, 6, 1, 0, 62, 0, 31, 6, 1, 0, 63, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 113, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 33, 6, 1, 0, 62, 0, 35, 6, 1, 0, 63, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 189, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 39, 6, 1, 0, 62, 0, 41, 6, 1, 0, 63, 0, 239, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 37, 6, 2, 0, 58, 0, 60, 0, 180, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 31, 6, 2, 0, 62, 0, 63, 0, 113, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 27, 6, 1, 0, 63, 0, 45, 6, 1, 0, 62, 0, 229, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 43, 6, 2, 0, 58, 0, 60, 0, 152, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 234, 1, 1, 0, 241, 0, 47, 6, 2, 0, 47, 0, 51, 0, 50, 6, 6, 0, 48, 0, 49, 0, 50, 0, 52, 0, 53, 0, 54, 0, 6, 0, 3, 0, 1, 0, 105, 0, 226, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 52, 6, 2, 0, 58, 0, 60, 0, 54, 6, 2, 0, 62, 0, 63, 0, 207, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 227, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 56, 6, 2, 0, 58, 0, 60, 0, 58, 6, 2, 0, 62, 0, 63, 0, 187, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 62, 6, 1, 0, 62, 0, 64, 6, 1, 0, 63, 0, 230, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 60, 6, 2, 0, 58, 0, 60, 0, 118, 2, 2, 0, 254, 0, 35, 1, 5, 0, 3, 0, 1, 0, 105, 0, 70, 6, 1, 0, 49, 0, 10, 2, 1, 0, 34, 1, 66, 6, 2, 0, 47, 0, 51, 0, 68, 6, 5, 0, 48, 0, 50, 0, 52, 0, 53, 0, 54, 0, 7, 0, 3, 0, 1, 0, 105, 0, 72, 6, 1, 0, 62, 0, 74, 6, 1, 0, 63, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 150, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 76, 6, 1, 0, 62, 0, 78, 6, 1, 0, 63, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 154, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 82, 6, 1, 0, 62, 0, 84, 6, 1, 0, 63, 0, 240, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 80, 6, 2, 0, 58, 0, 60, 0, 186, 2, 2, 0, 254, 0, 35, 1, 8, 0, 3, 0, 1, 0, 105, 0, 221, 0, 1, 0, 42, 0, 223, 0, 1, 0, 43, 0, 117, 3, 1, 0, 227, 0, 177, 3, 1, 0, 226, 0, 116, 5, 1, 0, 228, 0, 86, 6, 2, 0, 34, 0, 36, 0, 89, 6, 2, 0, 35, 0, 37, 0, 6, 0, 3, 0, 1, 0, 105, 0, 8, 2, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 19, 6, 2, 0, 62, 0, 63, 0, 91, 6, 2, 0, 58, 0, 60, 0, 208, 2, 2, 0, 254, 0, 35, 1, 5, 0, 3, 0, 1, 0, 105, 0, 97, 6, 1, 0, 49, 0, 238, 1, 1, 0, 34, 1, 93, 6, 2, 0, 47, 0, 51, 0, 95, 6, 5, 0, 48, 0, 50, 0, 52, 0, 53, 0, 54, 0, 6, 0, 3, 0, 1, 0, 105, 0, 254, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 99, 6, 2, 0, 58, 0, 60, 0, 101, 6, 2, 0, 62, 0, 63, 0, 162, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 103, 6, 2, 0, 62, 0, 63, 0, 201, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 105, 6, 2, 0, 62, 0, 63, 0, 185, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 107, 6, 2, 0, 62, 0, 63, 0, 143, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 109, 6, 1, 0, 62, 0, 111, 6, 1, 0, 63, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 134, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 113, 6, 1, 0, 2, 0, 116, 6, 1, 0, 4, 0, 119, 6, 1, 0, 7, 0, 122, 6, 1, 0, 9, 0, 250, 1, 5, 0, 125, 0, 126, 0, 127, 0, 128, 0, 25, 1, 7, 0, 3, 0, 1, 0, 105, 0, 107, 6, 1, 0, 63, 0, 124, 6, 1, 0, 62, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 143, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 126, 6, 1, 0, 62, 0, 128, 6, 1, 0, 63, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 192, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 5, 2, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 84, 6, 2, 0, 62, 0, 63, 0, 130, 6, 2, 0, 58, 0, 60, 0, 186, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 132, 6, 2, 0, 62, 0, 63, 0, 193, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 224, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 134, 6, 2, 0, 58, 0, 60, 0, 136, 6, 2, 0, 62, 0, 63, 0, 160, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 246, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 138, 6, 2, 0, 58, 0, 60, 0, 140, 6, 2, 0, 62, 0, 63, 0, 157, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 247, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 142, 6, 2, 0, 58, 0, 60, 0, 144, 6, 2, 0, 62, 0, 63, 0, 204, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 148, 6, 1, 0, 62, 0, 150, 6, 1, 0, 63, 0, 249, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 146, 6, 2, 0, 58, 0, 60, 0, 144, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 154, 6, 1, 0, 62, 0, 156, 6, 1, 0, 63, 0, 251, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 152, 6, 2, 0, 58, 0, 60, 0, 145, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 158, 6, 2, 0, 62, 0, 63, 0, 132, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 78, 6, 2, 0, 62, 0, 63, 0, 154, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 158, 6, 1, 0, 63, 0, 160, 6, 1, 0, 62, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 132, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 248, 1, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 156, 6, 2, 0, 62, 0, 63, 0, 162, 6, 2, 0, 58, 0, 60, 0, 145, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 128, 6, 2, 0, 62, 0, 63, 0, 192, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 144, 6, 1, 0, 63, 0, 166, 6, 1, 0, 62, 0, 21, 2, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 164, 6, 2, 0, 58, 0, 60, 0, 204, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 10, 2, 1, 0, 34, 1, 168, 6, 2, 0, 47, 0, 51, 0, 171, 6, 6, 0, 48, 0, 49, 0, 50, 0, 52, 0, 53, 0, 54, 0, 7, 0, 3, 0, 1, 0, 105, 0, 58, 6, 1, 0, 63, 0, 175, 6, 1, 0, 62, 0, 15, 2, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 173, 6, 2, 0, 58, 0, 60, 0, 187, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 179, 6, 1, 0, 62, 0, 181, 6, 1, 0, 63, 0, 17, 2, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 177, 6, 2, 0, 58, 0, 60, 0, 182, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 20, 2, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 64, 6, 2, 0, 62, 0, 63, 0, 183, 6, 2, 0, 58, 0, 60, 0, 118, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 16, 2, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 185, 6, 2, 0, 58, 0, 60, 0, 187, 6, 2, 0, 62, 0, 63, 0, 210, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 23, 6, 1, 0, 63, 0, 189, 6, 1, 0, 62, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 173, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 191, 6, 2, 0, 62, 0, 63, 0, 181, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 193, 6, 1, 0, 62, 0, 195, 6, 1, 0, 63, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 170, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 4, 2, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 197, 6, 2, 0, 58, 0, 60, 0, 199, 6, 2, 0, 62, 0, 63, 0, 164, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 199, 6, 1, 0, 63, 0, 203, 6, 1, 0, 62, 0, 6, 2, 1, 0, 253, 0, 11, 6, 2, 0, 59, 0, 61, 0, 201, 6, 2, 0, 58, 0, 60, 0, 164, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 35, 6, 2, 0, 62, 0, 63, 0, 189, 2, 2, 0, 254, 0, 35, 1, 7, 0, 3, 0, 1, 0, 105, 0, 105, 6, 1, 0, 63, 0, 205, 6, 1, 0, 62, 0, 104, 2, 1, 0, 253, 0, 9, 6, 2, 0, 58, 0, 60, 0, 11, 6, 2, 0, 59, 0, 61, 0, 185, 2, 2, 0, 254, 0, 35, 1, 6, 0, 3, 0, 1, 0, 105, 0, 209, 6, 1, 0, 40, 0, 211, 6, 1, 0, 41, 0, 110, 3, 1, 0, 224, 0, 191, 3, 1, 0, 223, 0, 207, 6, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 6, 0, 3, 0, 1, 0, 105, 0, 209, 6, 1, 0, 40, 0, 211, 6, 1, 0, 41, 0, 108, 3, 1, 0, 224, 0, 192, 3, 1, 0, 223, 0, 89, 6, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 6, 0, 3, 0, 1, 0, 105, 0, 223, 0, 1, 0, 43, 0, 176, 1, 1, 0, 42, 0, 107, 3, 1, 0, 227, 0, 195, 3, 1, 0, 226, 0, 207, 6, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 6, 0, 3, 0, 1, 0, 105, 0, 223, 0, 1, 0, 43, 0, 176, 1, 1, 0, 42, 0, 105, 3, 1, 0, 227, 0, 197, 3, 1, 0, 226, 0, 89, 6, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 215, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 203, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 207, 5, 2, 0, 53, 0, 54, 0, 64, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 217, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 219, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 185, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 4, 0, 3, 0, 1, 0, 105, 0, 31, 2, 1, 0, 36, 1, 221, 6, 2, 0, 58, 0, 60, 0, 224, 6, 4, 0, 59, 0, 61, 0, 62, 0, 63, 0, 5, 0, 3, 0, 1, 0, 105, 0, 181, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 185, 5, 2, 0, 53, 0, 54, 0, 38, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 177, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 226, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 173, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 177, 5, 2, 0, 53, 0, 54, 0, 29, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 228, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 219, 6, 2, 0, 53, 0, 54, 0, 49, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 230, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 232, 6, 2, 0, 53, 0, 54, 0, 47, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 234, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 236, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 238, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 234, 6, 2, 0, 53, 0, 54, 0, 52, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 207, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 240, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 17, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 19, 5, 2, 0, 53, 0, 54, 0, 85, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 242, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 240, 6, 2, 0, 53, 0, 54, 0, 48, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 244, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 246, 6, 2, 0, 53, 0, 54, 0, 26, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 246, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 248, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 250, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 252, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 254, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 0, 7, 2, 0, 53, 0, 54, 0, 28, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 0, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 2, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 19, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 25, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 27, 5, 2, 0, 53, 0, 54, 0, 68, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 77, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 81, 5, 2, 0, 53, 0, 54, 0, 66, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 27, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 81, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 195, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 199, 5, 2, 0, 53, 0, 54, 0, 75, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 223, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 225, 5, 2, 0, 53, 0, 54, 0, 74, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 225, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 241, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 199, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 213, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 4, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 211, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 213, 5, 2, 0, 53, 0, 54, 0, 46, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 6, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 8, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 6, 7, 2, 0, 53, 0, 54, 0, 90, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 10, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 35, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 12, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 10, 7, 2, 0, 53, 0, 54, 0, 87, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 49, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 53, 5, 2, 0, 53, 0, 54, 0, 92, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 31, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 35, 5, 2, 0, 53, 0, 54, 0, 51, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 53, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 14, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 16, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 255, 4, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 3, 5, 2, 0, 53, 0, 54, 0, 100, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 18, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 16, 7, 2, 0, 53, 0, 54, 0, 89, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 20, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 4, 7, 2, 0, 53, 0, 54, 0, 107, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 22, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 24, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 3, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 4, 0, 3, 0, 1, 0, 105, 0, 102, 2, 1, 0, 36, 1, 26, 7, 2, 0, 58, 0, 60, 0, 28, 7, 4, 0, 59, 0, 61, 0, 62, 0, 63, 0, 5, 0, 3, 0, 1, 0, 105, 0, 30, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 14, 7, 2, 0, 53, 0, 54, 0, 95, 2, 2, 0, 242, 0, 33, 1, 6, 0, 3, 0, 1, 0, 105, 0, 47, 1, 1, 0, 42, 0, 101, 3, 1, 0, 226, 0, 30, 5, 1, 0, 228, 0, 32, 7, 2, 0, 29, 0, 36, 0, 35, 7, 2, 0, 30, 0, 37, 0, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 37, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 39, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 41, 7, 2, 0, 53, 0, 54, 0, 79, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 43, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 41, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 45, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 47, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 49, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 51, 7, 2, 0, 53, 0, 54, 0, 80, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 53, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 55, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 53, 7, 2, 0, 53, 0, 54, 0, 39, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 51, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 57, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 189, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 191, 5, 2, 0, 53, 0, 54, 0, 110, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 62, 7, 1, 0, 50, 0, 59, 7, 2, 0, 48, 0, 52, 0, 65, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 191, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 57, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 59, 5, 2, 0, 53, 0, 54, 0, 42, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 67, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 69, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 67, 7, 2, 0, 53, 0, 54, 0, 34, 2, 2, 0, 242, 0, 33, 1, 4, 0, 3, 0, 1, 0, 105, 0, 31, 2, 1, 0, 36, 1, 71, 7, 2, 0, 58, 0, 60, 0, 73, 7, 4, 0, 59, 0, 61, 0, 62, 0, 63, 0, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 59, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 4, 0, 3, 0, 1, 0, 105, 0, 104, 2, 1, 0, 253, 0, 75, 7, 2, 0, 58, 0, 60, 0, 78, 7, 4, 0, 59, 0, 61, 0, 62, 0, 63, 0, 5, 0, 3, 0, 1, 0, 105, 0, 80, 7, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 37, 7, 2, 0, 53, 0, 54, 0, 106, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 82, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 84, 7, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 119, 5, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 115, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 119, 5, 2, 0, 53, 0, 54, 0, 94, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 213, 6, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 232, 6, 2, 0, 53, 0, 54, 0, 97, 2, 2, 0, 242, 0, 33, 1, 5, 0, 3, 0, 1, 0, 105, 0, 239, 5, 1, 0, 50, 0, 215, 4, 2, 0, 48, 0, 52, 0, 241, 5, 2, 0, 53, 0, 54, 0, 88, 2, 2, 0, 242, 0, 33, 1, 3, 0, 3, 0, 1, 0, 105, 0, 15, 4, 3, 0, 35, 0, 37, 0, 41, 0, 86, 7, 3, 0, 34, 0, 36, 0, 40, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 89, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 125, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 129, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 249, 3, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 35, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 91, 7, 2, 0, 29, 0, 30, 0, 93, 7, 2, 0, 36, 0, 37, 0, 209, 2, 2, 0, 207, 0, 30, 1, 2, 0, 3, 0, 1, 0, 105, 0, 251, 3, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 1, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 3, 0, 3, 0, 1, 0, 105, 0, 1, 4, 3, 0, 35, 0, 37, 0, 41, 0, 95, 7, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 9, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 3, 0, 3, 0, 1, 0, 105, 0, 9, 4, 3, 0, 35, 0, 37, 0, 41, 0, 98, 7, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 149, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 155, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 3, 0, 3, 0, 1, 0, 105, 0, 221, 3, 3, 0, 35, 0, 37, 0, 41, 0, 101, 7, 3, 0, 34, 0, 36, 0, 40, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 104, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 106, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 219, 3, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 108, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 161, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 163, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 165, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 167, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 169, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 171, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 173, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 175, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 110, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 111, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 107, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 87, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 114, 7, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 4, 0, 3, 0, 1, 0, 105, 0, 118, 7, 1, 0, 8, 0, 149, 2, 1, 0, 26, 1, 116, 7, 4, 0, 2, 0, 4, 0, 7, 0, 9, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 121, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 111, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 31, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 123, 7, 2, 0, 59, 0, 61, 0, 126, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 128, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 130, 7, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 109, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 103, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 107, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 105, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 13, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 89, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 132, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 241, 3, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 158, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 3, 0, 3, 0, 1, 0, 105, 0, 241, 3, 3, 0, 35, 0, 37, 0, 41, 0, 132, 7, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 237, 3, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 135, 7, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 3, 0, 3, 0, 1, 0, 105, 0, 211, 3, 3, 0, 35, 0, 37, 0, 41, 0, 137, 7, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 140, 7, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 142, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 144, 7, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 211, 3, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 146, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 3, 0, 3, 0, 1, 0, 105, 0, 148, 7, 3, 0, 34, 0, 36, 0, 42, 0, 151, 7, 3, 0, 35, 0, 37, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 7, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 4, 0, 3, 0, 1, 0, 105, 0, 155, 7, 2, 0, 34, 0, 35, 0, 157, 7, 2, 0, 36, 0, 37, 0, 184, 2, 2, 0, 208, 0, 31, 1, 2, 0, 3, 0, 1, 0, 105, 0, 233, 3, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 159, 7, 2, 0, 34, 0, 35, 0, 161, 7, 2, 0, 36, 0, 37, 0, 194, 2, 2, 0, 208, 0, 31, 1, 2, 0, 3, 0, 1, 0, 105, 0, 151, 7, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 74, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 163, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 195, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 167, 7, 1, 0, 8, 0, 203, 2, 1, 0, 26, 1, 165, 7, 4, 0, 2, 0, 4, 0, 7, 0, 9, 0, 4, 0, 3, 0, 1, 0, 105, 0, 39, 2, 2, 0, 34, 0, 35, 0, 169, 7, 2, 0, 36, 0, 37, 0, 188, 2, 2, 0, 208, 0, 31, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 171, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 78, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 23, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 173, 7, 2, 0, 34, 0, 35, 0, 175, 7, 2, 0, 36, 0, 37, 0, 188, 2, 2, 0, 208, 0, 31, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 178, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 180, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 55, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 182, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 184, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 43, 2, 2, 0, 34, 0, 35, 0, 186, 7, 2, 0, 36, 0, 37, 0, 188, 2, 2, 0, 208, 0, 31, 1, 2, 0, 3, 0, 1, 0, 105, 0, 123, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 53, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 25, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 51, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 188, 7, 2, 0, 29, 0, 30, 0, 190, 7, 2, 0, 36, 0, 37, 0, 199, 2, 2, 0, 207, 0, 30, 1, 2, 0, 3, 0, 1, 0, 105, 0, 47, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 193, 7, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 2, 0, 3, 0, 1, 0, 105, 0, 45, 4, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 40, 0, 41, 0, 4, 0, 3, 0, 1, 0, 105, 0, 197, 7, 1, 0, 8, 0, 149, 2, 1, 0, 26, 1, 195, 7, 4, 0, 2, 0, 4, 0, 7, 0, 9, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 105, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 199, 7, 2, 0, 29, 0, 30, 0, 201, 7, 2, 0, 36, 0, 37, 0, 211, 2, 2, 0, 207, 0, 30, 1, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 21, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 128, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 53, 2, 2, 0, 29, 0, 30, 0, 203, 7, 2, 0, 36, 0, 37, 0, 199, 2, 2, 0, 207, 0, 30, 1, 4, 0, 3, 0, 1, 0, 105, 0, 11, 6, 2, 0, 59, 0, 61, 0, 191, 6, 2, 0, 62, 0, 63, 0, 153, 2, 2, 0, 254, 0, 35, 1, 4, 0, 3, 0, 1, 0, 105, 0, 51, 2, 2, 0, 29, 0, 30, 0, 205, 7, 2, 0, 36, 0, 37, 0, 199, 2, 2, 0, 207, 0, 30, 1, 4, 0, 3, 0, 1, 0, 105, 0, 209, 7, 1, 0, 40, 0, 95, 3, 1, 0, 223, 0, 207, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 209, 7, 1, 0, 40, 0, 93, 3, 1, 0, 223, 0, 35, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 6, 0, 34, 0, 35, 0, 36, 0, 37, 0, 42, 0, 43, 0, 4, 0, 3, 0, 1, 0, 105, 0, 200, 1, 1, 0, 42, 0, 89, 3, 1, 0, 226, 0, 207, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 200, 1, 1, 0, 42, 0, 88, 3, 1, 0, 226, 0, 35, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 109, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 105, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 130, 7, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 149, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 114, 7, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 165, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 140, 7, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 144, 7, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 3, 0, 3, 0, 1, 0, 105, 0, 1, 4, 2, 0, 30, 0, 37, 0, 95, 7, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 135, 7, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 3, 0, 3, 0, 1, 0, 105, 0, 15, 4, 2, 0, 30, 0, 37, 0, 86, 7, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 1, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 6, 0, 3, 0, 1, 0, 105, 0, 221, 0, 1, 0, 42, 0, 223, 0, 1, 0, 43, 0, 117, 3, 1, 0, 227, 0, 177, 3, 1, 0, 226, 0, 116, 5, 1, 0, 228, 0, 2, 0, 3, 0, 1, 0, 105, 0, 251, 3, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 4, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 52, 1, 1, 0, 173, 0, 211, 7, 3, 0, 1, 0, 9, 0, 10, 0, 4, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 51, 1, 1, 0, 173, 0, 211, 7, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 249, 3, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 129, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 7, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 125, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 155, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 123, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 6, 0, 3, 0, 1, 0, 105, 0, 47, 1, 1, 0, 42, 0, 49, 1, 1, 0, 43, 0, 101, 3, 1, 0, 226, 0, 168, 3, 1, 0, 227, 0, 30, 5, 1, 0, 228, 0, 2, 0, 3, 0, 1, 0, 105, 0, 213, 7, 5, 0, 48, 0, 50, 0, 52, 0, 53, 0, 54, 0, 2, 0, 3, 0, 1, 0, 105, 0, 111, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 175, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 9, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 3, 0, 3, 0, 1, 0, 105, 0, 221, 3, 2, 0, 30, 0, 37, 0, 101, 7, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 89, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 68, 6, 5, 0, 48, 0, 50, 0, 52, 0, 53, 0, 54, 0, 2, 0, 3, 0, 1, 0, 105, 0, 87, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 219, 3, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 241, 3, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 107, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 3, 0, 3, 0, 1, 0, 105, 0, 241, 3, 2, 0, 30, 0, 37, 0, 132, 7, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 163, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 237, 3, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 3, 0, 3, 0, 1, 0, 105, 0, 211, 3, 2, 0, 30, 0, 37, 0, 137, 7, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 211, 3, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 4, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 52, 1, 1, 0, 173, 0, 215, 7, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 233, 3, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 55, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 53, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 25, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 51, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 47, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 45, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 7, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 3, 0, 3, 0, 1, 0, 105, 0, 151, 7, 2, 0, 30, 0, 37, 0, 148, 7, 3, 0, 29, 0, 36, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 42, 0, 3, 0, 3, 0, 1, 0, 105, 0, 9, 4, 2, 0, 30, 0, 37, 0, 98, 7, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 173, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 171, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 169, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 167, 4, 5, 0, 29, 0, 30, 0, 36, 0, 37, 0, 40, 0, 4, 0, 3, 0, 1, 0, 105, 0, 219, 7, 1, 0, 62, 0, 17, 4, 1, 0, 253, 0, 217, 7, 2, 0, 58, 0, 60, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 221, 7, 1, 0, 104, 0, 8, 4, 2, 0, 150, 0, 27, 1, 2, 0, 3, 0, 1, 0, 105, 0, 223, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 223, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 227, 7, 1, 0, 104, 0, 7, 4, 2, 0, 150, 0, 27, 1, 3, 0, 3, 0, 1, 0, 105, 0, 21, 4, 1, 0, 20, 0, 19, 4, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 217, 3, 1, 0, 20, 0, 23, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 223, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 229, 7, 4, 0, 2, 0, 4, 0, 7, 0, 9, 0, 2, 0, 3, 0, 1, 0, 105, 0, 231, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 197, 2, 1, 0, 42, 0, 118, 5, 1, 0, 228, 0, 233, 7, 2, 0, 34, 0, 36, 0, 4, 0, 3, 0, 1, 0, 105, 0, 235, 7, 1, 0, 13, 0, 238, 7, 1, 0, 104, 0, 37, 3, 2, 0, 150, 0, 27, 1, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 4, 0, 1, 0, 9, 0, 10, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 240, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 219, 3, 4, 0, 1, 0, 9, 0, 10, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 242, 7, 4, 0, 2, 0, 4, 0, 7, 0, 9, 0, 4, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 51, 1, 1, 0, 173, 0, 203, 3, 2, 0, 13, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 52, 1, 1, 0, 173, 0, 203, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 249, 3, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 5, 0, 3, 0, 1, 0, 105, 0, 49, 1, 1, 0, 43, 0, 200, 1, 1, 0, 42, 0, 88, 3, 1, 0, 226, 0, 175, 3, 1, 0, 227, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 114, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 130, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 135, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 5, 0, 3, 0, 1, 0, 105, 0, 49, 1, 1, 0, 43, 0, 200, 1, 1, 0, 42, 0, 89, 3, 1, 0, 226, 0, 174, 3, 1, 0, 227, 0, 5, 0, 3, 0, 1, 0, 105, 0, 209, 7, 1, 0, 40, 0, 244, 7, 1, 0, 41, 0, 93, 3, 1, 0, 223, 0, 172, 3, 1, 0, 224, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 5, 0, 3, 0, 1, 0, 105, 0, 209, 7, 1, 0, 40, 0, 244, 7, 1, 0, 41, 0, 95, 3, 1, 0, 223, 0, 171, 3, 1, 0, 224, 0, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 246, 7, 1, 0, 104, 0, 37, 3, 2, 0, 150, 0, 27, 1, 2, 0, 3, 0, 1, 0, 105, 0, 248, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 148, 7, 2, 0, 29, 0, 36, 0, 151, 7, 2, 0, 30, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 219, 3, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 45, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 47, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 248, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 248, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 51, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 11, 4, 1, 0, 20, 0, 9, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 25, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 7, 4, 1, 0, 20, 0, 5, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 53, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 55, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 248, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 233, 3, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 17, 4, 1, 0, 20, 0, 15, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 211, 3, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 211, 3, 2, 0, 35, 0, 37, 0, 137, 7, 2, 0, 34, 0, 36, 0, 3, 0, 3, 0, 1, 0, 105, 0, 3, 4, 1, 0, 20, 0, 1, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 237, 3, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 252, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 254, 7, 2, 0, 29, 0, 36, 0, 1, 8, 2, 0, 30, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 253, 3, 1, 0, 20, 0, 251, 3, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 241, 3, 2, 0, 35, 0, 37, 0, 132, 7, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 3, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 7, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 241, 3, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 144, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 140, 7, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 4, 0, 1, 0, 9, 0, 10, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 7, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 87, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 89, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 249, 3, 4, 0, 1, 0, 9, 0, 10, 0, 20, 0, 4, 0, 3, 0, 1, 0, 105, 0, 80, 3, 1, 0, 29, 0, 9, 8, 1, 0, 36, 0, 198, 3, 2, 0, 209, 0, 32, 1, 2, 0, 3, 0, 1, 0, 105, 0, 105, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 107, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 109, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 111, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 123, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 13, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 125, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 13, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 129, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 249, 3, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 17, 8, 1, 0, 62, 0, 156, 3, 1, 0, 253, 0, 15, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 21, 8, 1, 0, 53, 0, 161, 3, 1, 0, 241, 0, 19, 8, 2, 0, 47, 0, 51, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 251, 3, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 1, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 243, 3, 1, 0, 20, 0, 241, 3, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 1, 4, 2, 0, 35, 0, 37, 0, 95, 7, 2, 0, 34, 0, 36, 0, 3, 0, 3, 0, 1, 0, 105, 0, 239, 3, 1, 0, 20, 0, 237, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 23, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 25, 8, 1, 0, 34, 0, 27, 8, 1, 0, 36, 0, 124, 3, 2, 0, 209, 0, 32, 1, 3, 0, 3, 0, 1, 0, 105, 0, 213, 3, 1, 0, 20, 0, 211, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 32, 8, 1, 0, 62, 0, 114, 3, 1, 0, 253, 0, 30, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 36, 8, 1, 0, 53, 0, 115, 3, 1, 0, 241, 0, 34, 8, 2, 0, 47, 0, 51, 0, 2, 0, 3, 0, 1, 0, 105, 0, 9, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 38, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 229, 3, 4, 0, 1, 0, 9, 0, 10, 0, 20, 0, 5, 0, 3, 0, 1, 0, 105, 0, 223, 0, 1, 0, 43, 0, 176, 1, 1, 0, 42, 0, 107, 3, 1, 0, 227, 0, 195, 3, 1, 0, 226, 0, 3, 0, 3, 0, 1, 0, 105, 0, 235, 3, 1, 0, 20, 0, 233, 3, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 9, 4, 2, 0, 35, 0, 37, 0, 98, 7, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 13, 4, 4, 0, 1, 0, 9, 0, 10, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 149, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 15, 4, 2, 0, 35, 0, 37, 0, 86, 7, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 114, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 130, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 135, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 40, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 42, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 46, 8, 1, 0, 62, 0, 178, 3, 1, 0, 253, 0, 44, 8, 2, 0, 58, 0, 60, 0, 2, 0, 3, 0, 1, 0, 105, 0, 48, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 155, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 148, 7, 2, 0, 34, 0, 36, 0, 151, 7, 2, 0, 35, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 50, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 221, 3, 2, 0, 35, 0, 37, 0, 101, 7, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 219, 3, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 52, 8, 1, 0, 53, 0, 161, 3, 1, 0, 241, 0, 19, 8, 2, 0, 47, 0, 51, 0, 4, 0, 3, 0, 1, 0, 105, 0, 78, 7, 1, 0, 62, 0, 156, 3, 1, 0, 253, 0, 54, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 57, 8, 1, 0, 62, 0, 156, 3, 1, 0, 253, 0, 15, 8, 2, 0, 58, 0, 60, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 163, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 59, 8, 1, 0, 53, 0, 161, 3, 1, 0, 241, 0, 19, 8, 2, 0, 47, 0, 51, 0, 4, 0, 3, 0, 1, 0, 105, 0, 50, 6, 1, 0, 53, 0, 161, 3, 1, 0, 241, 0, 61, 8, 2, 0, 47, 0, 51, 0, 2, 0, 3, 0, 1, 0, 105, 0, 165, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 64, 8, 1, 0, 62, 0, 156, 3, 1, 0, 253, 0, 15, 8, 2, 0, 58, 0, 60, 0, 2, 0, 3, 0, 1, 0, 105, 0, 48, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 50, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 66, 8, 1, 0, 29, 0, 68, 8, 1, 0, 36, 0, 99, 3, 2, 0, 209, 0, 32, 1, 2, 0, 3, 0, 1, 0, 105, 0, 167, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 169, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 171, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 13, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 173, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 13, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 70, 8, 1, 0, 53, 0, 161, 3, 1, 0, 241, 0, 19, 8, 2, 0, 47, 0, 51, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 72, 8, 1, 0, 62, 0, 156, 3, 1, 0, 253, 0, 15, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 76, 8, 1, 0, 62, 0, 157, 3, 1, 0, 253, 0, 74, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 80, 8, 1, 0, 53, 0, 160, 3, 1, 0, 241, 0, 78, 8, 2, 0, 47, 0, 51, 0, 2, 0, 3, 0, 1, 0, 105, 0, 175, 4, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 144, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 140, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 84, 8, 1, 0, 53, 0, 176, 3, 1, 0, 241, 0, 82, 8, 2, 0, 47, 0, 51, 0, 4, 0, 3, 0, 1, 0, 105, 0, 80, 3, 1, 0, 34, 0, 86, 8, 1, 0, 36, 0, 124, 3, 2, 0, 209, 0, 32, 1, 3, 0, 3, 0, 1, 0, 105, 0, 223, 3, 1, 0, 20, 0, 221, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 45, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 38, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 88, 8, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 90, 8, 1, 0, 104, 0, 37, 3, 2, 0, 150, 0, 27, 1, 2, 0, 3, 0, 1, 0, 105, 0, 7, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 47, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 51, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 7, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 92, 8, 1, 0, 104, 0, 37, 3, 2, 0, 150, 0, 27, 1, 2, 0, 3, 0, 1, 0, 105, 0, 5, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 25, 8, 1, 0, 29, 0, 94, 8, 1, 0, 36, 0, 198, 3, 2, 0, 209, 0, 32, 1, 2, 0, 3, 0, 1, 0, 105, 0, 23, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 3, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 254, 7, 2, 0, 34, 0, 36, 0, 1, 8, 2, 0, 35, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 97, 8, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 252, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 99, 8, 1, 0, 62, 0, 156, 3, 1, 0, 253, 0, 15, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 101, 8, 1, 0, 53, 0, 161, 3, 1, 0, 241, 0, 19, 8, 2, 0, 47, 0, 51, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 25, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 53, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 55, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 233, 3, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 211, 3, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 105, 8, 1, 0, 62, 0, 205, 3, 1, 0, 253, 0, 103, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 109, 8, 1, 0, 53, 0, 206, 3, 1, 0, 241, 0, 107, 8, 2, 0, 47, 0, 51, 0, 3, 0, 3, 0, 1, 0, 105, 0, 211, 3, 2, 0, 30, 0, 37, 0, 137, 7, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 237, 3, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 241, 3, 2, 0, 30, 0, 37, 0, 132, 7, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 241, 3, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 87, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 89, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 105, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 111, 8, 1, 0, 104, 0, 196, 3, 2, 0, 150, 0, 27, 1, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 113, 8, 1, 0, 104, 0, 190, 3, 2, 0, 150, 0, 27, 1, 4, 0, 3, 0, 1, 0, 105, 0, 115, 8, 1, 0, 62, 0, 156, 3, 1, 0, 253, 0, 15, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 117, 8, 1, 0, 53, 0, 161, 3, 1, 0, 241, 0, 19, 8, 2, 0, 47, 0, 51, 0, 2, 0, 3, 0, 1, 0, 105, 0, 107, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 109, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 111, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 123, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 125, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 119, 8, 1, 0, 104, 0, 37, 3, 2, 0, 150, 0, 27, 1, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 121, 8, 1, 0, 104, 0, 37, 3, 2, 0, 150, 0, 27, 1, 4, 0, 3, 0, 1, 0, 105, 0, 125, 8, 1, 0, 62, 0, 226, 3, 1, 0, 253, 0, 123, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 129, 8, 1, 0, 53, 0, 227, 3, 1, 0, 241, 0, 127, 8, 2, 0, 47, 0, 51, 0, 2, 0, 3, 0, 1, 0, 105, 0, 129, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 133, 8, 1, 0, 53, 0, 18, 4, 1, 0, 241, 0, 131, 8, 2, 0, 47, 0, 51, 0, 2, 0, 3, 0, 1, 0, 105, 0, 251, 3, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 1, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 1, 4, 2, 0, 30, 0, 37, 0, 95, 7, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 248, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 135, 8, 1, 0, 40, 0, 9, 5, 1, 0, 225, 0, 233, 7, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 248, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 248, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 219, 2, 1, 0, 42, 0, 2, 5, 1, 0, 228, 0, 233, 7, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 248, 7, 4, 0, 34, 0, 35, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 139, 8, 1, 0, 62, 0, 163, 3, 1, 0, 253, 0, 137, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 143, 8, 1, 0, 53, 0, 155, 3, 1, 0, 241, 0, 141, 8, 2, 0, 47, 0, 51, 0, 3, 0, 3, 0, 1, 0, 105, 0, 217, 3, 1, 0, 20, 0, 215, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 9, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 9, 4, 2, 0, 30, 0, 37, 0, 98, 7, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 149, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 15, 4, 2, 0, 30, 0, 37, 0, 86, 7, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 155, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 3, 0, 3, 0, 1, 0, 105, 0, 221, 3, 2, 0, 30, 0, 37, 0, 101, 7, 2, 0, 29, 0, 36, 0, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 145, 8, 1, 0, 104, 0, 234, 3, 2, 0, 150, 0, 27, 1, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 147, 8, 1, 0, 104, 0, 235, 3, 2, 0, 150, 0, 27, 1, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 149, 8, 1, 0, 104, 0, 37, 3, 2, 0, 150, 0, 27, 1, 4, 0, 3, 0, 1, 0, 105, 0, 69, 0, 1, 0, 13, 0, 151, 8, 1, 0, 104, 0, 37, 3, 2, 0, 150, 0, 27, 1, 2, 0, 3, 0, 1, 0, 105, 0, 161, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 163, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 165, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 167, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 169, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 171, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 173, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 2, 0, 3, 0, 1, 0, 105, 0, 175, 4, 4, 0, 29, 0, 30, 0, 36, 0, 37, 0, 4, 0, 3, 0, 1, 0, 105, 0, 153, 8, 1, 0, 62, 0, 156, 3, 1, 0, 253, 0, 15, 8, 2, 0, 58, 0, 60, 0, 4, 0, 3, 0, 1, 0, 105, 0, 155, 8, 1, 0, 53, 0, 161, 3, 1, 0, 241, 0, 19, 8, 2, 0, 47, 0, 51, 0, 4, 0, 3, 0, 1, 0, 105, 0, 157, 8, 1, 0, 40, 0, 119, 5, 1, 0, 225, 0, 233, 7, 2, 0, 34, 0, 36, 0, 5, 0, 3, 0, 1, 0, 105, 0, 223, 0, 1, 0, 43, 0, 176, 1, 1, 0, 42, 0, 105, 3, 1, 0, 227, 0, 197, 3, 1, 0, 226, 0, 4, 0, 3, 0, 1, 0, 105, 0, 66, 8, 1, 0, 34, 0, 159, 8, 1, 0, 36, 0, 185, 3, 2, 0, 209, 0, 32, 1, 3, 0, 3, 0, 1, 0, 105, 0, 217, 3, 1, 0, 20, 0, 247, 3, 3, 0, 1, 0, 9, 0, 10, 0, 5, 0, 3, 0, 1, 0, 105, 0, 209, 6, 1, 0, 40, 0, 211, 6, 1, 0, 41, 0, 110, 3, 1, 0, 224, 0, 191, 3, 1, 0, 223, 0, 5, 0, 3, 0, 1, 0, 105, 0, 209, 6, 1, 0, 40, 0, 211, 6, 1, 0, 41, 0, 108, 3, 1, 0, 224, 0, 192, 3, 1, 0, 223, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 3, 0, 29, 0, 36, 0, 42, 0, 3, 0, 3, 0, 1, 0, 105, 0, 235, 3, 1, 0, 20, 0, 233, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 117, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 115, 4, 3, 0, 1, 0, 9, 0, 10, 0, 4, 0, 3, 0, 1, 0, 105, 0, 163, 8, 1, 0, 25, 0, 165, 8, 1, 0, 104, 0, 47, 4, 1, 0, 29, 1, 4, 0, 3, 0, 1, 0, 105, 0, 167, 8, 1, 0, 25, 0, 169, 8, 1, 0, 104, 0, 48, 4, 1, 0, 29, 1, 2, 0, 3, 0, 1, 0, 105, 0, 171, 8, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 173, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 175, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 113, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 171, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 169, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 111, 4, 3, 0, 1, 0, 9, 0, 10, 0, 4, 0, 3, 0, 1, 0, 105, 0, 173, 8, 1, 0, 25, 0, 175, 8, 1, 0, 104, 0, 147, 4, 1, 0, 29, 1, 2, 0, 3, 0, 1, 0, 105, 0, 109, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 177, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 3, 0, 34, 0, 36, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 179, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 107, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 105, 4, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 223, 3, 1, 0, 20, 0, 221, 3, 2, 0, 13, 0, 104, 0, 4, 0, 3, 0, 1, 0, 105, 0, 173, 8, 1, 0, 25, 0, 177, 8, 1, 0, 104, 0, 147, 4, 1, 0, 29, 1, 4, 0, 3, 0, 1, 0, 105, 0, 173, 8, 1, 0, 25, 0, 179, 8, 1, 0, 104, 0, 147, 4, 1, 0, 29, 1, 2, 0, 3, 0, 1, 0, 105, 0, 215, 3, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 183, 8, 1, 0, 10, 0, 181, 8, 2, 0, 1, 0, 9, 0, 2, 0, 3, 0, 1, 0, 105, 0, 219, 3, 3, 0, 13, 0, 20, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 217, 3, 1, 0, 20, 0, 23, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 135, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 133, 4, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 21, 4, 1, 0, 20, 0, 19, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 185, 8, 3, 0, 29, 0, 36, 0, 40, 0, 3, 0, 3, 0, 1, 0, 105, 0, 11, 4, 1, 0, 20, 0, 9, 4, 2, 0, 13, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 7, 4, 1, 0, 20, 0, 5, 4, 2, 0, 13, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 3, 4, 1, 0, 20, 0, 1, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 181, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 183, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 189, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 191, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 165, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 193, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 185, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 27, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 13, 4, 3, 0, 13, 0, 20, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 213, 3, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 229, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 45, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 47, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 51, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 25, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 53, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 55, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 103, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 101, 4, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 17, 4, 1, 0, 20, 0, 15, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 195, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 59, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 69, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 215, 7, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 71, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 197, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 73, 4, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 243, 3, 1, 0, 20, 0, 241, 3, 2, 0, 13, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 239, 3, 1, 0, 20, 0, 237, 3, 2, 0, 13, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 213, 3, 1, 0, 20, 0, 211, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 3, 4, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 4, 3, 0, 1, 0, 9, 0, 10, 0, 4, 0, 3, 0, 1, 0, 105, 0, 173, 8, 1, 0, 25, 0, 199, 8, 1, 0, 104, 0, 147, 4, 1, 0, 29, 1, 2, 0, 3, 0, 1, 0, 105, 0, 201, 8, 3, 0, 34, 0, 36, 0, 42, 0, 3, 0, 3, 0, 1, 0, 105, 0, 253, 3, 1, 0, 20, 0, 251, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 201, 8, 3, 0, 29, 0, 36, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 4, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 203, 8, 3, 0, 34, 0, 36, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 205, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 189, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 233, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 211, 3, 3, 0, 1, 0, 9, 0, 10, 0, 3, 0, 3, 0, 1, 0, 105, 0, 207, 8, 1, 0, 10, 0, 181, 8, 2, 0, 1, 0, 9, 0, 2, 0, 3, 0, 1, 0, 105, 0, 237, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 155, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 241, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 157, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 247, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 159, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 167, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 209, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 99, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 243, 3, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 213, 3, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 87, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 229, 3, 3, 0, 13, 0, 20, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 213, 8, 1, 0, 10, 0, 211, 8, 2, 0, 1, 0, 9, 0, 4, 0, 3, 0, 1, 0, 105, 0, 215, 8, 1, 0, 25, 0, 217, 8, 1, 0, 104, 0, 94, 4, 1, 0, 29, 1, 2, 0, 3, 0, 1, 0, 105, 0, 193, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 191, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 89, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 3, 0, 13, 0, 20, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 203, 8, 3, 0, 29, 0, 36, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 251, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 1, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 4, 3, 0, 1, 0, 9, 0, 10, 0, 4, 0, 3, 0, 1, 0, 105, 0, 219, 8, 1, 0, 25, 0, 221, 8, 1, 0, 104, 0, 39, 4, 1, 0, 29, 1, 2, 0, 3, 0, 1, 0, 105, 0, 185, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 9, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 3, 0, 13, 0, 20, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 149, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 223, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 205, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 249, 3, 3, 0, 13, 0, 20, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 209, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 91, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 8, 3, 0, 29, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 223, 8, 3, 0, 29, 0, 36, 0, 40, 0, 3, 0, 3, 0, 1, 0, 105, 0, 217, 3, 1, 0, 20, 0, 215, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 3, 0, 29, 0, 36, 0, 42, 0, 4, 0, 3, 0, 1, 0, 105, 0, 227, 8, 1, 0, 25, 0, 230, 8, 1, 0, 104, 0, 147, 4, 1, 0, 29, 1, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 3, 0, 29, 0, 36, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 3, 0, 34, 0, 36, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 195, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 3, 0, 34, 0, 36, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 232, 8, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 197, 8, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 93, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 189, 8, 3, 0, 34, 0, 36, 0, 40, 0, 3, 0, 3, 0, 1, 0, 105, 0, 217, 3, 1, 0, 20, 0, 247, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 23, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 19, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 243, 3, 3, 0, 34, 0, 36, 0, 40, 0, 4, 0, 3, 0, 1, 0, 105, 0, 234, 8, 1, 0, 25, 0, 236, 8, 1, 0, 104, 0, 174, 4, 1, 0, 29, 1, 4, 0, 3, 0, 1, 0, 105, 0, 238, 8, 1, 0, 25, 0, 240, 8, 1, 0, 104, 0, 175, 4, 1, 0, 29, 1, 2, 0, 3, 0, 1, 0, 105, 0, 242, 8, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 3, 4, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 131, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 129, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 4, 3, 0, 34, 0, 36, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 97, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 163, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 125, 4, 3, 0, 1, 0, 9, 0, 10, 0, 2, 0, 3, 0, 1, 0, 105, 0, 123, 4, 3, 0, 1, 0, 9, 0, 10, 0, 4, 0, 3, 0, 1, 0, 105, 0, 173, 8, 1, 0, 25, 0, 244, 8, 1, 0, 104, 0, 147, 4, 1, 0, 29, 1, 4, 0, 3, 0, 1, 0, 105, 0, 173, 8, 1, 0, 25, 0, 246, 8, 1, 0, 104, 0, 147, 4, 1, 0, 29, 1, 2, 0, 3, 0, 1, 0, 105, 0, 163, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 3, 4, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 125, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 215, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 129, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 131, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 133, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 135, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 105, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 107, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 109, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 248, 8, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 140, 7, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 8, 2, 0, 34, 0, 35, 0, 3, 0, 3, 0, 1, 0, 105, 0, 219, 2, 1, 0, 42, 0, 2, 5, 1, 0, 228, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 144, 7, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 252, 8, 2, 0, 34, 0, 35, 0, 2, 0, 3, 0, 1, 0, 105, 0, 254, 8, 2, 0, 29, 0, 30, 0, 3, 0, 3, 0, 1, 0, 105, 0, 135, 8, 1, 0, 40, 0, 9, 5, 1, 0, 225, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 7, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 111, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 0, 9, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 113, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 7, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 2, 9, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 4, 9, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 115, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 117, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 247, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 45, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 103, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 251, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 6, 9, 2, 0, 29, 0, 30, 0, 3, 0, 3, 0, 1, 0, 105, 0, 148, 7, 1, 0, 42, 0, 151, 7, 1, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 8, 9, 2, 0, 34, 0, 35, 0, 2, 0, 3, 0, 1, 0, 105, 0, 135, 7, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 130, 7, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 1, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 114, 7, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 249, 3, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 9, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 149, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 101, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 10, 9, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 99, 4, 2, 0, 13, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 87, 1, 1, 0, 173, 0, 2, 0, 3, 0, 1, 0, 105, 0, 97, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 93, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 91, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 219, 3, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 2, 0, 42, 0, 43, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 4, 2, 0, 13, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 197, 2, 1, 0, 42, 0, 118, 5, 1, 0, 228, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 4, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 47, 4, 2, 0, 40, 0, 41, 0, 3, 0, 3, 0, 1, 0, 105, 0, 157, 8, 1, 0, 40, 0, 119, 5, 1, 0, 225, 0, 2, 0, 3, 0, 1, 0, 105, 0, 213, 3, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 12, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 14, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 14, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 243, 3, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 51, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 155, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 25, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 53, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 55, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 3, 4, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 195, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 233, 3, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 211, 3, 2, 0, 40, 0, 41, 0, 3, 0, 3, 0, 1, 0, 105, 0, 211, 3, 1, 0, 41, 0, 137, 7, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 16, 9, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 237, 3, 2, 0, 40, 0, 41, 0, 3, 0, 3, 0, 1, 0, 105, 0, 241, 3, 1, 0, 41, 0, 132, 7, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 203, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 241, 3, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 197, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 87, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 16, 9, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 18, 9, 2, 0, 34, 0, 35, 0, 2, 0, 3, 0, 1, 0, 105, 0, 20, 9, 2, 0, 29, 0, 30, 0, 2, 0, 3, 0, 1, 0, 105, 0, 59, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 195, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 89, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 209, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 205, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 223, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 105, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 157, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 107, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 109, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 159, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 111, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 123, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 125, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 22, 9, 2, 0, 29, 0, 30, 0, 2, 0, 3, 0, 1, 0, 105, 0, 201, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 24, 9, 2, 0, 34, 0, 35, 0, 2, 0, 3, 0, 1, 0, 105, 0, 16, 9, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 127, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 45, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 129, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 47, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 251, 3, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 23, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 19, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 1, 4, 2, 0, 40, 0, 41, 0, 3, 0, 3, 0, 1, 0, 105, 0, 1, 4, 1, 0, 41, 0, 95, 7, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 5, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 163, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 9, 4, 2, 0, 40, 0, 41, 0, 3, 0, 3, 0, 1, 0, 105, 0, 9, 4, 1, 0, 41, 0, 98, 7, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 149, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 185, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 151, 4, 2, 0, 40, 0, 41, 0, 3, 0, 3, 0, 1, 0, 105, 0, 15, 4, 1, 0, 41, 0, 86, 7, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 153, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 165, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 167, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 169, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 171, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 155, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 173, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 175, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 177, 4, 2, 0, 13, 0, 104, 0, 3, 0, 3, 0, 1, 0, 105, 0, 221, 3, 1, 0, 41, 0, 101, 7, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 51, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 179, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 181, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 26, 9, 2, 0, 29, 0, 30, 0, 2, 0, 3, 0, 1, 0, 105, 0, 25, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 183, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 185, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 53, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 55, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 193, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 191, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 28, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 2, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 27, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 189, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 30, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 69, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 32, 9, 2, 0, 29, 0, 30, 0, 2, 0, 3, 0, 1, 0, 105, 0, 71, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 34, 9, 2, 0, 34, 0, 35, 0, 2, 0, 3, 0, 1, 0, 105, 0, 73, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 189, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 189, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 165, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 36, 9, 2, 0, 34, 0, 35, 0, 2, 0, 3, 0, 1, 0, 105, 0, 38, 9, 2, 0, 29, 0, 30, 0, 2, 0, 3, 0, 1, 0, 105, 0, 12, 9, 2, 0, 29, 0, 36, 0, 3, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 131, 1, 1, 0, 173, 0, 3, 0, 3, 0, 1, 0, 105, 0, 205, 3, 1, 0, 20, 0, 135, 1, 1, 0, 173, 0, 2, 0, 3, 0, 1, 0, 105, 0, 167, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 191, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 14, 9, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 201, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 185, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 169, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 171, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 193, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 173, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 211, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 175, 4, 2, 0, 40, 0, 41, 0, 2, 0, 3, 0, 1, 0, 105, 0, 229, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 213, 3, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 243, 3, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 10, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 237, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 123, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 4, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 28, 9, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 14, 9, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 241, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 87, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 16, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 223, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 16, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 16, 9, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 30, 9, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 205, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 89, 4, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 197, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 40, 9, 2, 0, 29, 0, 30, 0, 2, 0, 3, 0, 1, 0, 105, 0, 209, 8, 2, 0, 29, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 42, 9, 2, 0, 34, 0, 35, 0, 2, 0, 3, 0, 1, 0, 105, 0, 203, 8, 2, 0, 34, 0, 36, 0, 2, 0, 3, 0, 1, 0, 105, 0, 233, 3, 2, 0, 13, 0, 104, 0, 2, 0, 3, 0, 1, 0, 105, 0, 44, 9, 1, 0, 34, 0, 2, 0, 3, 0, 1, 0, 105, 0, 46, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 48, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 50, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 52, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 54, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 56, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 58, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 60, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 62, 9, 1, 0, 29, 0, 2, 0, 3, 0, 1, 0, 105, 0, 64, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 66, 9, 1, 0, 0, 0, 2, 0, 3, 0, 1, 0, 105, 0, 68, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 201, 8, 1, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 70, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 72, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 74, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 76, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 78, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 80, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 3, 4, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 82, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 84, 9, 1, 0, 0, 0, 2, 0, 3, 0, 1, 0, 105, 0, 86, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 4, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 88, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 243, 3, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 213, 3, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 90, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 92, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 94, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 96, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 98, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 100, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 102, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 104, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 106, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 108, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 110, 9, 1, 0, 29, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 114, 9, 1, 0, 34, 0, 2, 0, 3, 0, 1, 0, 105, 0, 116, 9, 1, 0, 1, 0, 2, 0, 3, 0, 1, 0, 105, 0, 118, 9, 1, 0, 1, 0, 2, 0, 3, 0, 1, 0, 105, 0, 120, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 122, 9, 1, 0, 1, 0, 2, 0, 3, 0, 1, 0, 105, 0, 124, 9, 1, 0, 1, 0, 2, 0, 3, 0, 1, 0, 105, 0, 126, 9, 1, 0, 0, 0, 2, 0, 3, 0, 1, 0, 105, 0, 128, 9, 1, 0, 34, 0, 2, 0, 3, 0, 1, 0, 105, 0, 130, 9, 1, 0, 29, 0, 2, 0, 3, 0, 1, 0, 105, 0, 132, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 134, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 205, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 219, 3, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 136, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 138, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 140, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 142, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 229, 3, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 144, 9, 1, 0, 29, 0, 2, 0, 3, 0, 1, 0, 105, 0, 209, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 213, 3, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 197, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 243, 3, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 249, 3, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 223, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 3, 4, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 11, 4, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 146, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 148, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 150, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 152, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 154, 9, 1, 0, 34, 0, 2, 0, 3, 0, 1, 0, 105, 0, 156, 9, 1, 0, 29, 0, 2, 0, 3, 0, 1, 0, 105, 0, 158, 9, 1, 0, 1, 0, 2, 0, 3, 0, 1, 0, 105, 0, 160, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 162, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 164, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 195, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 166, 9, 1, 0, 0, 0, 2, 0, 3, 0, 1, 0, 105, 0, 168, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 197, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 195, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 170, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 193, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 209, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 205, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 223, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 191, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 172, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 112, 7, 1, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 174, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 176, 9, 1, 0, 34, 0, 2, 0, 3, 0, 1, 0, 105, 0, 178, 9, 1, 0, 29, 0, 2, 0, 3, 0, 1, 0, 105, 0, 189, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 180, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 182, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 225, 3, 1, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 184, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 186, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 188, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 190, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 192, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 194, 9, 1, 0, 5, 0, 2, 0, 3, 0, 1, 0, 105, 0, 196, 9, 1, 0, 3, 0, 2, 0, 3, 0, 1, 0, 105, 0, 185, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 198, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 200, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 202, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 161, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 204, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 206, 9, 1, 0, 6, 0, 2, 0, 3, 0, 1, 0, 105, 0, 185, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 227, 3, 1, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 8, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 208, 9, 1, 0, 34, 0, 2, 0, 3, 0, 1, 0, 105, 0, 203, 8, 1, 0, 42, 0, 2, 0, 3, 0, 1, 0, 105, 0, 187, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 210, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 189, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 191, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 193, 8, 1, 0, 40, 0, 2, 0, 3, 0, 1, 0, 105, 0, 212, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 214, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 216, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 218, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 220, 9, 1, 0, 20, 0, 2, 0, 3, 0, 1, 0, 105, 0, 222, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 224, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 226, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 228, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 230, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 232, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 234, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 236, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 238, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 240, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 242, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 244, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 246, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 248, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 250, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 252, 9, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 254, 9, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 0, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 2, 10, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 4, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 6, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 8, 10, 1, 0, 103, 0, 2, 0, 3, 0, 1, 0, 105, 0, 10, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 12, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 14, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 16, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 18, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 20, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 22, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 24, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 26, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 28, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 30, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 32, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 34, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 36, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 38, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 40, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 42, 10, 1, 0, 99, 0, 2, 0, 3, 0, 1, 0, 105, 0, 44, 10, 1, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 22, 1, 0, 0, 161, 1, 0, 0, 44, 2, 0, 0, 183, 2, 0, 0, 66, 3, 0, 0, 205, 3, 0, 0, 88, 4, 0, 0, 156, 4, 0, 0, 224, 4, 0, 0, 29, 5, 0, 0, 83, 5, 0, 0, 145, 5, 0, 0, 207, 5, 0, 0, 5, 6, 0, 0, 62, 6, 0, 0, 119, 6, 0, 0, 172, 6, 0, 0, 225, 6, 0, 0, 26, 7, 0, 0, 78, 7, 0, 0, 130, 7, 0, 0, 182, 7, 0, 0, 234, 7, 0, 0, 56, 8, 0, 0, 134, 8, 0, 0, 189, 8, 0, 0, 244, 8, 0, 0, 65, 9, 0, 0, 142, 9, 0, 0, 232, 9, 0, 0, 66, 10, 0, 0, 160, 10, 0, 0, 254, 10, 0, 0, 46, 11, 0, 0, 140, 11, 0, 0, 230, 11, 0, 0, 68, 12, 0, 0, 162, 12, 0, 0, 0, 13, 0, 0, 90, 13, 0, 0, 184, 13, 0, 0, 18, 14, 0, 0, 108, 14, 0, 0, 198, 14, 0, 0, 36, 15, 0, 0, 112, 15, 0, 0, 188, 15, 0, 0, 22, 16, 0, 0, 116, 16, 0, 0, 210, 16, 0, 0, 44, 17, 0, 0, 134, 17, 0, 0, 228, 17, 0, 0, 66, 18, 0, 0, 156, 18, 0, 0, 210, 18, 0, 0, 44, 19, 0, 0, 98, 19, 0, 0, 188, 19, 0, 0, 26, 20, 0, 0, 102, 20, 0, 0, 178, 20, 0, 0, 16, 21, 0, 0, 65, 21, 0, 0, 114, 21, 0, 0, 155, 21, 0, 0, 196, 21, 0, 0, 28, 22, 0, 0, 68, 22, 0, 0, 116, 22, 0, 0, 204, 22, 0, 0, 244, 22, 0, 0, 32, 23, 0, 0, 76, 23, 0, 0, 164, 23, 0, 0, 252, 23, 0, 0, 70, 24, 0, 0, 144, 24, 0, 0, 188, 24, 0, 0, 228, 24, 0, 0, 20, 25, 0, 0, 60, 25, 0, 0, 99, 25, 0, 0, 138, 25, 0, 0, 181, 25, 0, 0, 10, 26, 0, 0, 95, 26, 0, 0, 134, 26, 0, 0, 177, 26, 0, 0, 216, 26, 0, 0, 255, 26, 0, 0, 37, 27, 0, 0, 75, 27, 0, 0, 113, 27, 0, 0, 155, 27, 0, 0, 225, 27, 0, 0, 39, 28, 0, 0, 81, 28, 0, 0, 155, 28, 0, 0, 225, 28, 0, 0, 39, 29, 0, 0, 113, 29, 0, 0, 159, 29, 0, 0, 200, 29, 0, 0, 245, 29, 0, 0, 30, 30, 0, 0, 74, 30, 0, 0, 114, 30, 0, 0, 154, 30, 0, 0, 190, 30, 0, 0, 224, 30, 0, 0, 12, 31, 0, 0, 52, 31, 0, 0, 92, 31, 0, 0, 128, 31, 0, 0, 162, 31, 0, 0, 202, 31, 0, 0, 235, 31, 0, 0, 14, 32, 0, 0, 53, 32, 0, 0, 88, 32, 0, 0, 121, 32, 0, 0, 159, 32, 0, 0, 193, 32, 0, 0, 225, 32, 0, 0, 1, 33, 0, 0, 33, 33, 0, 0, 65, 33, 0, 0, 99, 33, 0, 0, 131, 33, 0, 0, 169, 33, 0, 0, 203, 33, 0, 0, 237, 33, 0, 0, 13, 34, 0, 0, 45, 34, 0, 0, 77, 34, 0, 0, 115, 34, 0, 0, 157, 34, 0, 0, 195, 34, 0, 0, 229, 34, 0, 0, 4, 35, 0, 0, 37, 35, 0, 0, 68, 35, 0, 0, 99, 35, 0, 0, 130, 35, 0, 0, 160, 35, 0, 0, 190, 35, 0, 0, 220, 35, 0, 0, 252, 35, 0, 0, 28, 36, 0, 0, 60, 36, 0, 0, 90, 36, 0, 0, 122, 36, 0, 0, 152, 36, 0, 0, 182, 36, 0, 0, 212, 36, 0, 0, 242, 36, 0, 0, 16, 37, 0, 0, 46, 37, 0, 0, 76, 37, 0, 0, 112, 37, 0, 0, 142, 37, 0, 0, 172, 37, 0, 0, 202, 37, 0, 0, 232, 37, 0, 0, 6, 38, 0, 0, 36, 38, 0, 0, 64, 38, 0, 0, 92, 38, 0, 0, 120, 38, 0, 0, 148, 38, 0, 0, 178, 38, 0, 0, 205, 38, 0, 0, 232, 38, 0, 0, 3, 39, 0, 0, 46, 39, 0, 0, 89, 39, 0, 0, 113, 39, 0, 0, 137, 39, 0, 0, 159, 39, 0, 0, 183, 39, 0, 0, 225, 39, 0, 0, 247, 39, 0, 0, 13, 40, 0, 0, 35, 40, 0, 0, 61, 40, 0, 0, 85, 40, 0, 0, 127, 40, 0, 0, 151, 40, 0, 0, 175, 40, 0, 0, 201, 40, 0, 0, 225, 40, 0, 0, 247, 40, 0, 0, 15, 41, 0, 0, 41, 41, 0, 0, 65, 41, 0, 0, 89, 41, 0, 0, 113, 41, 0, 0, 135, 41, 0, 0, 159, 41, 0, 0, 183, 41, 0, 0, 207, 41, 0, 0, 228, 41, 0, 0, 249, 41, 0, 0, 34, 42, 0, 0, 55, 42, 0, 0, 76, 42, 0, 0, 97, 42, 0, 0, 118, 42, 0, 0, 139, 42, 0, 0, 160, 42, 0, 0, 181, 42, 0, 0, 202, 42, 0, 0, 223, 42, 0, 0, 244, 42, 0, 0, 9, 43, 0, 0, 30, 43, 0, 0, 51, 43, 0, 0, 72, 43, 0, 0, 93, 43, 0, 0, 114, 43, 0, 0, 135, 43, 0, 0, 156, 43, 0, 0, 197, 43, 0, 0, 238, 43, 0, 0, 3, 44, 0, 0, 24, 44, 0, 0, 45, 44, 0, 0, 66, 44, 0, 0, 87, 44, 0, 0, 108, 44, 0, 0, 129, 44, 0, 0, 150, 44, 0, 0, 171, 44, 0, 0, 192, 44, 0, 0, 213, 44, 0, 0, 234, 44, 0, 0, 255, 44, 0, 0, 20, 45, 0, 0, 41, 45, 0, 0, 62, 45, 0, 0, 83, 45, 0, 0, 104, 45, 0, 0, 125, 45, 0, 0, 146, 45, 0, 0, 167, 45, 0, 0, 188, 45, 0, 0, 209, 45, 0, 0, 230, 45, 0, 0, 251, 45, 0, 0, 16, 46, 0, 0, 37, 46, 0, 0, 58, 46, 0, 0, 79, 46, 0, 0, 100, 46, 0, 0, 121, 46, 0, 0, 142, 46, 0, 0, 163, 46, 0, 0, 184, 46, 0, 0, 205, 46, 0, 0, 226, 46, 0, 0, 247, 46, 0, 0, 12, 47, 0, 0, 33, 47, 0, 0, 54, 47, 0, 0, 75, 47, 0, 0, 96, 47, 0, 0, 117, 47, 0, 0, 138, 47, 0, 0, 159, 47, 0, 0, 180, 47, 0, 0, 201, 47, 0, 0, 222, 47, 0, 0, 243, 47, 0, 0, 8, 48, 0, 0, 29, 48, 0, 0, 50, 48, 0, 0, 71, 48, 0, 0, 112, 48, 0, 0, 133, 48, 0, 0, 154, 48, 0, 0, 175, 48, 0, 0, 196, 48, 0, 0, 217, 48, 0, 0, 238, 48, 0, 0, 3, 49, 0, 0, 24, 49, 0, 0, 45, 49, 0, 0, 66, 49, 0, 0, 87, 49, 0, 0, 108, 49, 0, 0, 129, 49, 0, 0, 150, 49, 0, 0, 171, 49, 0, 0, 192, 49, 0, 0, 213, 49, 0, 0, 234, 49, 0, 0, 255, 49, 0, 0, 20, 50, 0, 0, 41, 50, 0, 0, 62, 50, 0, 0, 83, 50, 0, 0, 104, 50, 0, 0, 128, 50, 0, 0, 152, 50, 0, 0, 171, 50, 0, 0, 192, 50, 0, 0, 215, 50, 0, 0, 238, 50, 0, 0, 3, 51, 0, 0, 22, 51, 0, 0, 40, 51, 0, 0, 60, 51, 0, 0, 80, 51, 0, 0, 98, 51, 0, 0, 120, 51, 0, 0, 138, 51, 0, 0, 156, 51, 0, 0, 174, 51, 0, 0, 196, 51, 0, 0, 218, 51, 0, 0, 236, 51, 0, 0, 9, 52, 0, 0, 26, 52, 0, 0, 55, 52, 0, 0, 72, 52, 0, 0, 103, 52, 0, 0, 134, 52, 0, 0, 165, 52, 0, 0, 196, 52, 0, 0, 225, 52, 0, 0, 254, 52, 0, 0, 27, 53, 0, 0, 58, 53, 0, 0, 87, 53, 0, 0, 104, 53, 0, 0, 135, 53, 0, 0, 164, 53, 0, 0, 193, 53, 0, 0, 224, 53, 0, 0, 253, 53, 0, 0, 16, 54, 0, 0, 47, 54, 0, 0, 76, 54, 0, 0, 107, 54, 0, 0, 136, 54, 0, 0, 153, 54, 0, 0, 170, 54, 0, 0, 199, 54, 0, 0, 218, 54, 0, 0, 249, 54, 0, 0, 12, 55, 0, 0, 43, 55, 0, 0, 72, 55, 0, 0, 89, 55, 0, 0, 120, 55, 0, 0, 149, 55, 0, 0, 166, 55, 0, 0, 195, 55, 0, 0, 224, 55, 0, 0, 255, 55, 0, 0, 30, 56, 0, 0, 59, 56, 0, 0, 88, 56, 0, 0, 119, 56, 0, 0, 150, 56, 0, 0, 179, 56, 0, 0, 210, 56, 0, 0, 241, 56, 0, 0, 14, 57, 0, 0, 43, 57, 0, 0, 74, 57, 0, 0, 103, 57, 0, 0, 134, 57, 0, 0, 163, 57, 0, 0, 194, 57, 0, 0, 223, 57, 0, 0, 252, 57, 0, 0, 25, 58, 0, 0, 56, 58, 0, 0, 84, 58, 0, 0, 100, 58, 0, 0, 116, 58, 0, 0, 144, 58, 0, 0, 160, 58, 0, 0, 188, 58, 0, 0, 216, 58, 0, 0, 244, 58, 0, 0, 4, 59, 0, 0, 30, 59, 0, 0, 46, 59, 0, 0, 69, 59, 0, 0, 94, 59, 0, 0, 117, 59, 0, 0, 140, 59, 0, 0, 163, 59, 0, 0, 188, 59, 0, 0, 213, 59, 0, 0, 238, 59, 0, 0, 5, 60, 0, 0, 30, 60, 0, 0, 49, 60, 0, 0, 72, 60, 0, 0, 95, 60, 0, 0, 120, 60, 0, 0, 141, 60, 0, 0, 166, 60, 0, 0, 191, 60, 0, 0, 216, 60, 0, 0, 243, 60, 0, 0, 10, 61, 0, 0, 31, 61, 0, 0, 54, 61, 0, 0, 77, 61, 0, 0, 100, 61, 0, 0, 123, 61, 0, 0, 148, 61, 0, 0, 171, 61, 0, 0, 196, 61, 0, 0, 221, 61, 0, 0, 244, 61, 0, 0, 11, 62, 0, 0, 34, 62, 0, 0, 57, 62, 0, 0, 80, 62, 0, 0, 105, 62, 0, 0, 130, 62, 0, 0, 153, 62, 0, 0, 176, 62, 0, 0, 201, 62, 0, 0, 224, 62, 0, 0, 247, 62, 0, 0, 16, 63, 0, 0, 35, 63, 0, 0, 60, 63, 0, 0, 85, 63, 0, 0, 108, 63, 0, 0, 131, 63, 0, 0, 156, 63, 0, 0, 179, 63, 0, 0, 204, 63, 0, 0, 227, 63, 0, 0, 252, 63, 0, 0, 19, 64, 0, 0, 44, 64, 0, 0, 66, 64, 0, 0, 88, 64, 0, 0, 110, 64, 0, 0, 132, 64, 0, 0, 151, 64, 0, 0, 170, 64, 0, 0, 189, 64, 0, 0, 208, 64, 0, 0, 227, 64, 0, 0, 244, 64, 0, 0, 7, 65, 0, 0, 26, 65, 0, 0, 45, 65, 0, 0, 64, 65, 0, 0, 83, 65, 0, 0, 102, 65, 0, 0, 121, 65, 0, 0, 140, 65, 0, 0, 159, 65, 0, 0, 178, 65, 0, 0, 197, 65, 0, 0, 216, 65, 0, 0, 235, 65, 0, 0, 254, 65, 0, 0, 17, 66, 0, 0, 36, 66, 0, 0, 55, 66, 0, 0, 74, 66, 0, 0, 93, 66, 0, 0, 112, 66, 0, 0, 131, 66, 0, 0, 150, 66, 0, 0, 169, 66, 0, 0, 188, 66, 0, 0, 207, 66, 0, 0, 226, 66, 0, 0, 245, 66, 0, 0, 8, 67, 0, 0, 27, 67, 0, 0, 46, 67, 0, 0, 65, 67, 0, 0, 84, 67, 0, 0, 103, 67, 0, 0, 122, 67, 0, 0, 141, 67, 0, 0, 160, 67, 0, 0, 179, 67, 0, 0, 198, 67, 0, 0, 217, 67, 0, 0, 236, 67, 0, 0, 255, 67, 0, 0, 18, 68, 0, 0, 37, 68, 0, 0, 56, 68, 0, 0, 75, 68, 0, 0, 94, 68, 0, 0, 113, 68, 0, 0, 132, 68, 0, 0, 151, 68, 0, 0, 170, 68, 0, 0, 187, 68, 0, 0, 206, 68, 0, 0, 227, 68, 0, 0, 246, 68, 0, 0, 9, 69, 0, 0, 28, 69, 0, 0, 47, 69, 0, 0, 66, 69, 0, 0, 85, 69, 0, 0, 104, 69, 0, 0, 123, 69, 0, 0, 142, 69, 0, 0, 161, 69, 0, 0, 180, 69, 0, 0, 199, 69, 0, 0, 218, 69, 0, 0, 237, 69, 0, 0, 0, 70, 0, 0, 19, 70, 0, 0, 38, 70, 0, 0, 55, 70, 0, 0, 74, 70, 0, 0, 91, 70, 0, 0, 110, 70, 0, 0, 129, 70, 0, 0, 148, 70, 0, 0, 167, 70, 0, 0, 186, 70, 0, 0, 205, 70, 0, 0, 224, 70, 0, 0, 238, 70, 0, 0, 254, 70, 0, 0, 10, 71, 0, 0, 22, 71, 0, 0, 34, 71, 0, 0, 46, 71, 0, 0, 62, 71, 0, 0, 78, 71, 0, 0, 90, 71, 0, 0, 102, 71, 0, 0, 116, 71, 0, 0, 128, 71, 0, 0, 140, 71, 0, 0, 154, 71, 0, 0, 166, 71, 0, 0, 178, 71, 0, 0, 190, 71, 0, 0, 202, 71, 0, 0, 216, 71, 0, 0, 232, 71, 0, 0, 248, 71, 0, 0, 4, 72, 0, 0, 20, 72, 0, 0, 32, 72, 0, 0, 44, 72, 0, 0, 56, 72, 0, 0, 68, 72, 0, 0, 80, 72, 0, 0, 92, 72, 0, 0, 104, 72, 0, 0, 116, 72, 0, 0, 132, 72, 0, 0, 148, 72, 0, 0, 164, 72, 0, 0, 176, 72, 0, 0, 188, 72, 0, 0, 200, 72, 0, 0, 216, 72, 0, 0, 232, 72, 0, 0, 244, 72, 0, 0, 4, 73, 0, 0, 20, 73, 0, 0, 36, 73, 0, 0, 48, 73, 0, 0, 60, 73, 0, 0, 76, 73, 0, 0, 88, 73, 0, 0, 100, 73, 0, 0, 116, 73, 0, 0, 128, 73, 0, 0, 144, 73, 0, 0, 156, 73, 0, 0, 172, 73, 0, 0, 186, 73, 0, 0, 198, 73, 0, 0, 210, 73, 0, 0, 224, 73, 0, 0, 236, 73, 0, 0, 252, 73, 0, 0, 8, 74, 0, 0, 20, 74, 0, 0, 36, 74, 0, 0, 50, 74, 0, 0, 62, 74, 0, 0, 78, 74, 0, 0, 90, 74, 0, 0, 106, 74, 0, 0, 118, 74, 0, 0, 134, 74, 0, 0, 150, 74, 0, 0, 166, 74, 0, 0, 182, 74, 0, 0, 198, 74, 0, 0, 214, 74, 0, 0, 230, 74, 0, 0, 246, 74, 0, 0, 6, 75, 0, 0, 22, 75, 0, 0, 38, 75, 0, 0, 50, 75, 0, 0, 66, 75, 0, 0, 82, 75, 0, 0, 98, 75, 0, 0, 110, 75, 0, 0, 122, 75, 0, 0, 134, 75, 0, 0, 146, 75, 0, 0, 162, 75, 0, 0, 174, 75, 0, 0, 190, 75, 0, 0, 202, 75, 0, 0, 218, 75, 0, 0, 234, 75, 0, 0, 250, 75, 0, 0, 6, 76, 0, 0, 22, 76, 0, 0, 38, 76, 0, 0, 54, 76, 0, 0, 70, 76, 0, 0, 86, 76, 0, 0, 102, 76, 0, 0, 118, 76, 0, 0, 130, 76, 0, 0, 146, 76, 0, 0, 162, 76, 0, 0, 173, 76, 0, 0, 184, 76, 0, 0, 195, 76, 0, 0, 206, 76, 0, 0, 217, 76, 0, 0, 228, 76, 0, 0, 239, 76, 0, 0, 250, 76, 0, 0, 5, 77, 0, 0, 16, 77, 0, 0, 27, 77, 0, 0, 40, 77, 0, 0, 51, 77, 0, 0, 64, 77, 0, 0, 75, 77, 0, 0, 94, 77, 0, 0, 105, 77, 0, 0, 120, 77, 0, 0, 135, 77, 0, 0, 146, 77, 0, 0, 157, 77, 0, 0, 168, 77, 0, 0, 179, 77, 0, 0, 190, 77, 0, 0, 201, 77, 0, 0, 212, 77, 0, 0, 223, 77, 0, 0, 242, 77, 0, 0, 253, 77, 0, 0, 8, 78, 0, 0, 19, 78, 0, 0, 30, 78, 0, 0, 41, 78, 0, 0, 54, 78, 0, 0, 65, 78, 0, 0, 76, 78, 0, 0, 87, 78, 0, 0, 98, 78, 0, 0, 109, 78, 0, 0, 120, 78, 0, 0, 133, 78, 0, 0, 144, 78, 0, 0, 155, 78, 0, 0, 168, 78, 0, 0, 179, 78, 0, 0, 194, 78, 0, 0, 205, 78, 0, 0, 216, 78, 0, 0, 227, 78, 0, 0, 238, 78, 0, 0, 249, 78, 0, 0, 4, 79, 0, 0, 15, 79, 0, 0, 26, 79, 0, 0, 37, 79, 0, 0, 50, 79, 0, 0, 61, 79, 0, 0, 74, 79, 0, 0, 85, 79, 0, 0, 96, 79, 0, 0, 107, 79, 0, 0, 118, 79, 0, 0, 132, 79, 0, 0, 142, 79, 0, 0, 156, 79, 0, 0, 166, 79, 0, 0, 176, 79, 0, 0, 186, 79, 0, 0, 200, 79, 0, 0, 212, 79, 0, 0, 224, 79, 0, 0, 234, 79, 0, 0, 244, 79, 0, 0, 254, 79, 0, 0, 8, 80, 0, 0, 22, 80, 0, 0, 36, 80, 0, 0, 46, 80, 0, 0, 56, 80, 0, 0, 66, 80, 0, 0, 76, 80, 0, 0, 86, 80, 0, 0, 100, 80, 0, 0, 114, 80, 0, 0, 124, 80, 0, 0, 140, 80, 0, 0, 150, 80, 0, 0, 160, 80, 0, 0, 170, 80, 0, 0, 180, 80, 0, 0, 196, 80, 0, 0, 212, 80, 0, 0, 222, 80, 0, 0, 238, 80, 0, 0, 252, 80, 0, 0, 6, 81, 0, 0, 18, 81, 0, 0, 28, 81, 0, 0, 38, 81, 0, 0, 48, 81, 0, 0, 58, 81, 0, 0, 68, 81, 0, 0, 78, 81, 0, 0, 88, 81, 0, 0, 98, 81, 0, 0, 108, 81, 0, 0, 120, 81, 0, 0, 130, 81, 0, 0, 142, 81, 0, 0, 152, 81, 0, 0, 162, 81, 0, 0, 172, 81, 0, 0, 182, 81, 0, 0, 194, 81, 0, 0, 204, 81, 0, 0, 214, 81, 0, 0, 224, 81, 0, 0, 236, 81, 0, 0, 248, 81, 0, 0, 2, 82, 0, 0, 12, 82, 0, 0, 22, 82, 0, 0, 32, 82, 0, 0, 44, 82, 0, 0, 56, 82, 0, 0, 68, 82, 0, 0, 78, 82, 0, 0, 88, 82, 0, 0, 98, 82, 0, 0, 108, 82, 0, 0, 118, 82, 0, 0, 128, 82, 0, 0, 138, 82, 0, 0, 148, 82, 0, 0, 158, 82, 0, 0, 168, 82, 0, 0, 178, 82, 0, 0, 188, 82, 0, 0, 202, 82, 0, 0, 212, 82, 0, 0, 222, 82, 0, 0, 232, 82, 0, 0, 242, 82, 0, 0, 252, 82, 0, 0, 6, 83, 0, 0, 16, 83, 0, 0, 26, 83, 0, 0, 36, 83, 0, 0, 46, 83, 0, 0, 56, 83, 0, 0, 66, 83, 0, 0, 76, 83, 0, 0, 86, 83, 0, 0, 100, 83, 0, 0, 114, 83, 0, 0, 124, 83, 0, 0, 134, 83, 0, 0, 144, 83, 0, 0, 154, 83, 0, 0, 166, 83, 0, 0, 178, 83, 0, 0, 190, 83, 0, 0, 200, 83, 0, 0, 214, 83, 0, 0, 226, 83, 0, 0, 236, 83, 0, 0, 250, 83, 0, 0, 8, 84, 0, 0, 18, 84, 0, 0, 28, 84, 0, 0, 38, 84, 0, 0, 54, 84, 0, 0, 66, 84, 0, 0, 78, 84, 0, 0, 88, 84, 0, 0, 98, 84, 0, 0, 108, 84, 0, 0, 120, 84, 0, 0, 130, 84, 0, 0, 140, 84, 0, 0, 150, 84, 0, 0, 160, 84, 0, 0, 170, 84, 0, 0, 184, 84, 0, 0, 194, 84, 0, 0, 204, 84, 0, 0, 214, 84, 0, 0, 226, 84, 0, 0, 236, 84, 0, 0, 246, 84, 0, 0, 0, 85, 0, 0, 12, 85, 0, 0, 22, 85, 0, 0, 32, 85, 0, 0, 46, 85, 0, 0, 60, 85, 0, 0, 74, 85, 0, 0, 84, 85, 0, 0, 94, 85, 0, 0, 108, 85, 0, 0, 122, 85, 0, 0, 132, 85, 0, 0, 146, 85, 0, 0, 156, 85, 0, 0, 166, 85, 0, 0, 180, 85, 0, 0, 190, 85, 0, 0, 200, 85, 0, 0, 210, 85, 0, 0, 220, 85, 0, 0, 230, 85, 0, 0, 240, 85, 0, 0, 250, 85, 0, 0, 4, 86, 0, 0, 14, 86, 0, 0, 28, 86, 0, 0, 38, 86, 0, 0, 52, 86, 0, 0, 66, 86, 0, 0, 80, 86, 0, 0, 90, 86, 0, 0, 100, 86, 0, 0, 110, 86, 0, 0, 124, 86, 0, 0, 138, 86, 0, 0, 150, 86, 0, 0, 160, 86, 0, 0, 170, 86, 0, 0, 180, 86, 0, 0, 194, 86, 0, 0, 204, 86, 0, 0, 214, 86, 0, 0, 224, 86, 0, 0, 234, 86, 0, 0, 244, 86, 0, 0, 2, 87, 0, 0, 12, 87, 0, 0, 26, 87, 0, 0, 36, 87, 0, 0, 46, 87, 0, 0, 58, 87, 0, 0, 68, 87, 0, 0, 78, 87, 0, 0, 88, 87, 0, 0, 102, 87, 0, 0, 116, 87, 0, 0, 126, 87, 0, 0, 136, 87, 0, 0, 146, 87, 0, 0, 156, 87, 0, 0, 166, 87, 0, 0, 176, 87, 0, 0, 186, 87, 0, 0, 196, 87, 0, 0, 210, 87, 0, 0, 224, 87, 0, 0, 236, 87, 0, 0, 246, 87, 0, 0, 2, 88, 0, 0, 12, 88, 0, 0, 22, 88, 0, 0, 32, 88, 0, 0, 42, 88, 0, 0, 56, 88, 0, 0, 70, 88, 0, 0, 84, 88, 0, 0, 98, 88, 0, 0, 108, 88, 0, 0, 118, 88, 0, 0, 128, 88, 0, 0, 138, 88, 0, 0, 148, 88, 0, 0, 158, 88, 0, 0, 172, 88, 0, 0, 186, 88, 0, 0, 200, 88, 0, 0, 214, 88, 0, 0, 224, 88, 0, 0, 238, 88, 0, 0, 248, 88, 0, 0, 2, 89, 0, 0, 14, 89, 0, 0, 24, 89, 0, 0, 38, 89, 0, 0, 48, 89, 0, 0, 58, 89, 0, 0, 72, 89, 0, 0, 82, 89, 0, 0, 92, 89, 0, 0, 106, 89, 0, 0, 120, 89, 0, 0, 132, 89, 0, 0, 142, 89, 0, 0, 154, 89, 0, 0, 164, 89, 0, 0, 174, 89, 0, 0, 186, 89, 0, 0, 196, 89, 0, 0, 206, 89, 0, 0, 218, 89, 0, 0, 232, 89, 0, 0, 246, 89, 0, 0, 4, 90, 0, 0, 18, 90, 0, 0, 28, 90, 0, 0, 38, 90, 0, 0, 48, 90, 0, 0, 58, 90, 0, 0, 68, 90, 0, 0, 78, 90, 0, 0, 88, 90, 0, 0, 98, 90, 0, 0, 112, 90, 0, 0, 126, 90, 0, 0, 140, 90, 0, 0, 156, 90, 0, 0, 170, 90, 0, 0, 182, 90, 0, 0, 198, 90, 0, 0, 214, 90, 0, 0, 223, 90, 0, 0, 234, 90, 0, 0, 243, 90, 0, 0, 252, 90, 0, 0, 5, 91, 0, 0, 18, 91, 0, 0, 31, 91, 0, 0, 40, 91, 0, 0, 49, 91, 0, 0, 58, 91, 0, 0, 67, 91, 0, 0, 76, 91, 0, 0, 85, 91, 0, 0, 94, 91, 0, 0, 107, 91, 0, 0, 116, 91, 0, 0, 125, 91, 0, 0, 134, 91, 0, 0, 143, 91, 0, 0, 152, 91, 0, 0, 161, 91, 0, 0, 172, 91, 0, 0, 185, 91, 0, 0, 198, 91, 0, 0, 207, 91, 0, 0, 218, 91, 0, 0, 227, 91, 0, 0, 236, 91, 0, 0, 247, 91, 0, 0, 0, 92, 0, 0, 9, 92, 0, 0, 20, 92, 0, 0, 29, 92, 0, 0, 40, 92, 0, 0, 51, 92, 0, 0, 62, 92, 0, 0, 71, 92, 0, 0, 80, 92, 0, 0, 89, 92, 0, 0, 98, 92, 0, 0, 107, 92, 0, 0, 116, 92, 0, 0, 125, 92, 0, 0, 134, 92, 0, 0, 143, 92, 0, 0, 152, 92, 0, 0, 161, 92, 0, 0, 170, 92, 0, 0, 179, 92, 0, 0, 188, 92, 0, 0, 197, 92, 0, 0, 206, 92, 0, 0, 215, 92, 0, 0, 224, 92, 0, 0, 233, 92, 0, 0, 242, 92, 0, 0, 253, 92, 0, 0, 6, 93, 0, 0, 15, 93, 0, 0, 24, 93, 0, 0, 33, 93, 0, 0, 42, 93, 0, 0, 51, 93, 0, 0, 60, 93, 0, 0, 71, 93, 0, 0, 82, 93, 0, 0, 93, 93, 0, 0, 102, 93, 0, 0, 111, 93, 0, 0, 124, 93, 0, 0, 133, 93, 0, 0, 144, 93, 0, 0, 153, 93, 0, 0, 162, 93, 0, 0, 171, 93, 0, 0, 180, 93, 0, 0, 189, 93, 0, 0, 198, 93, 0, 0, 207, 93, 0, 0, 218, 93, 0, 0, 227, 93, 0, 0, 236, 93, 0, 0, 245, 93, 0, 0, 254, 93, 0, 0, 7, 94, 0, 0, 16, 94, 0, 0, 25, 94, 0, 0, 34, 94, 0, 0, 43, 94, 0, 0, 52, 94, 0, 0, 61, 94, 0, 0, 70, 94, 0, 0, 79, 94, 0, 0, 90, 94, 0, 0, 103, 94, 0, 0, 112, 94, 0, 0, 121, 94, 0, 0, 130, 94, 0, 0, 139, 94, 0, 0, 148, 94, 0, 0, 157, 94, 0, 0, 166, 94, 0, 0, 175, 94, 0, 0, 184, 94, 0, 0, 193, 94, 0, 0, 206, 94, 0, 0, 215, 94, 0, 0, 224, 94, 0, 0, 233, 94, 0, 0, 242, 94, 0, 0, 251, 94, 0, 0, 4, 95, 0, 0, 13, 95, 0, 0, 22, 95, 0, 0, 31, 95, 0, 0, 40, 95, 0, 0, 49, 95, 0, 0, 58, 95, 0, 0, 67, 95, 0, 0, 76, 95, 0, 0, 87, 95, 0, 0, 96, 95, 0, 0, 109, 95, 0, 0, 118, 95, 0, 0, 127, 95, 0, 0, 136, 95, 0, 0, 145, 95, 0, 0, 154, 95, 0, 0, 163, 95, 0, 0, 172, 95, 0, 0, 181, 95, 0, 0, 192, 95, 0, 0, 201, 95, 0, 0, 210, 95, 0, 0, 219, 95, 0, 0, 232, 95, 0, 0, 245, 95, 0, 0, 254, 95, 0, 0, 7, 96, 0, 0, 16, 96, 0, 0, 25, 96, 0, 0, 34, 96, 0, 0, 43, 96, 0, 0, 52, 96, 0, 0, 61, 96, 0, 0, 70, 96, 0, 0, 79, 96, 0, 0, 88, 96, 0, 0, 97, 96, 0, 0, 110, 96, 0, 0, 123, 96, 0, 0, 131, 96, 0, 0, 139, 96, 0, 0, 147, 96, 0, 0, 155, 96, 0, 0, 163, 96, 0, 0, 171, 96, 0, 0, 179, 96, 0, 0, 187, 96, 0, 0, 195, 96, 0, 0, 203, 96, 0, 0, 211, 96, 0, 0, 219, 96, 0, 0, 227, 96, 0, 0, 235, 96, 0, 0, 243, 96, 0, 0, 251, 96, 0, 0, 3, 97, 0, 0, 11, 97, 0, 0, 19, 97, 0, 0, 29, 97, 0, 0, 37, 97, 0, 0, 45, 97, 0, 0, 53, 97, 0, 0, 61, 97, 0, 0, 71, 97, 0, 0, 79, 97, 0, 0, 87, 97, 0, 0, 95, 97, 0, 0, 103, 97, 0, 0, 111, 97, 0, 0, 119, 97, 0, 0, 127, 97, 0, 0, 135, 97, 0, 0, 143, 97, 0, 0, 151, 97, 0, 0, 159, 97, 0, 0, 167, 97, 0, 0, 175, 97, 0, 0, 183, 97, 0, 0, 191, 97, 0, 0, 201, 97, 0, 0, 209, 97, 0, 0, 217, 97, 0, 0, 225, 97, 0, 0, 233, 97, 0, 0, 241, 97, 0, 0, 249, 97, 0, 0, 1, 98, 0, 0, 9, 98, 0, 0, 17, 98, 0, 0, 25, 98, 0, 0, 33, 98, 0, 0, 41, 98, 0, 0, 49, 98, 0, 0, 57, 98, 0, 0, 65, 98, 0, 0, 75, 98, 0, 0, 83, 98, 0, 0, 91, 98, 0, 0, 99, 98, 0, 0, 107, 98, 0, 0, 115, 98, 0, 0, 123, 98, 0, 0, 133, 98, 0, 0, 141, 98, 0, 0, 149, 98, 0, 0, 159, 98, 0, 0, 167, 98, 0, 0, 175, 98, 0, 0, 183, 98, 0, 0, 191, 98, 0, 0, 199, 98, 0, 0, 207, 98, 0, 0, 215, 98, 0, 0, 223, 98, 0, 0, 231, 98, 0, 0, 239, 98, 0, 0, 247, 98, 0, 0, 255, 98, 0, 0, 7, 99, 0, 0, 15, 99, 0, 0, 25, 99, 0, 0, 33, 99, 0, 0, 41, 99, 0, 0, 51, 99, 0, 0, 59, 99, 0, 0, 67, 99, 0, 0, 75, 99, 0, 0, 83, 99, 0, 0, 91, 99, 0, 0, 99, 99, 0, 0, 107, 99, 0, 0, 115, 99, 0, 0, 123, 99, 0, 0, 131, 99, 0, 0, 139, 99, 0, 0, 147, 99, 0, 0, 155, 99, 0, 0, 163, 99, 0, 0, 171, 99, 0, 0, 179, 99, 0, 0, 187, 99, 0, 0, 195, 99, 0, 0, 203, 99, 0, 0, 211, 99, 0, 0, 219, 99, 0, 0, 227, 99, 0, 0, 235, 99, 0, 0, 243, 99, 0, 0, 251, 99, 0, 0, 3, 100, 0, 0, 11, 100, 0, 0, 19, 100, 0, 0, 27, 100, 0, 0, 35, 100, 0, 0, 43, 100, 0, 0, 51, 100, 0, 0, 59, 100, 0, 0, 67, 100, 0, 0, 77, 100, 0, 0, 85, 100, 0, 0, 93, 100, 0, 0, 101, 100, 0, 0, 109, 100, 0, 0, 119, 100, 0, 0, 127, 100, 0, 0, 135, 100, 0, 0, 143, 100, 0, 0, 153, 100, 0, 0, 161, 100, 0, 0, 169, 100, 0, 0, 177, 100, 0, 0, 185, 100, 0, 0, 193, 100, 0, 0, 201, 100, 0, 0, 209, 100, 0, 0, 217, 100, 0, 0, 225, 100, 0, 0, 233, 100, 0, 0, 243, 100, 0, 0, 251, 100, 0, 0, 3, 101, 0, 0, 11, 101, 0, 0, 19, 101, 0, 0, 27, 101, 0, 0, 35, 101, 0, 0, 43, 101, 0, 0, 51, 101, 0, 0, 59, 101, 0, 0, 67, 101, 0, 0, 75, 101, 0, 0, 83, 101, 0, 0, 91, 101, 0, 0, 99, 101, 0, 0, 107, 101, 0, 0, 115, 101, 0, 0, 123, 101, 0, 0, 131, 101, 0, 0, 139, 101, 0, 0, 147, 101, 0, 0, 155, 101, 0, 0, 163, 101, 0, 0, 171, 101, 0, 0, 179, 101, 0, 0, 187, 101, 0, 0, 195, 101, 0, 0, 203, 101, 0, 0, 211, 101, 0, 0, 219, 101, 0, 0, 227, 101, 0, 0, 235, 101, 0, 0, 245, 101, 0, 0, 255, 101, 0, 0, 7, 102, 0, 0, 15, 102, 0, 0, 23, 102, 0, 0, 31, 102, 0, 0, 39, 102, 0, 0, 47, 102, 0, 0, 55, 102, 0, 0, 63, 102, 0, 0, 71, 102, 0, 0, 79, 102, 0, 0, 87, 102, 0, 0, 95, 102, 0, 0, 103, 102, 0, 0, 111, 102, 0, 0, 119, 102, 0, 0, 127, 102, 0, 0, 135, 102, 0, 0, 143, 102, 0, 0, 151, 102, 0, 0, 159, 102, 0, 0, 167, 102, 0, 0, 175, 102, 0, 0, 183, 102, 0, 0, 191, 102, 0, 0, 199, 102, 0, 0, 207, 102, 0, 0, 215, 102, 0, 0, 223, 102, 0, 0, 231, 102, 0, 0, 239, 102, 0, 0, 247, 102, 0, 0, 255, 102, 0, 0, 7, 103, 0, 0, 15, 103, 0, 0, 23, 103, 0, 0, 31, 103, 0, 0, 39, 103, 0, 0, 46, 103, 0, 0, 53, 103, 0, 0, 60, 103, 0, 0, 67, 103, 0, 0, 74, 103, 0, 0, 81, 103, 0, 0, 88, 103, 0, 0, 95, 103, 0, 0, 102, 103, 0, 0, 109, 103, 0, 0, 116, 103, 0, 0, 123, 103, 0, 0, 130, 103, 0, 0, 137, 103, 0, 0, 144, 103, 0, 0, 151, 103, 0, 0, 158, 103, 0, 0, 165, 103, 0, 0, 172, 103, 0, 0, 179, 103, 0, 0, 186, 103, 0, 0, 193, 103, 0, 0, 200, 103, 0, 0, 207, 103, 0, 0, 214, 103, 0, 0, 221, 103, 0, 0, 228, 103, 0, 0, 235, 103, 0, 0, 242, 103, 0, 0, 249, 103, 0, 0, 0, 104, 0, 0, 7, 104, 0, 0, 14, 104, 0, 0, 21, 104, 0, 0, 28, 104, 0, 0, 35, 104, 0, 0, 42, 104, 0, 0, 49, 104, 0, 0, 56, 104, 0, 0, 63, 104, 0, 0, 70, 104, 0, 0, 77, 104, 0, 0, 84, 104, 0, 0, 91, 104, 0, 0, 98, 104, 0, 0, 105, 104, 0, 0, 112, 104, 0, 0, 119, 104, 0, 0, 126, 104, 0, 0, 133, 104, 0, 0, 140, 104, 0, 0, 147, 104, 0, 0, 154, 104, 0, 0, 161, 104, 0, 0, 168, 104, 0, 0, 175, 104, 0, 0, 182, 104, 0, 0, 189, 104, 0, 0, 196, 104, 0, 0, 203, 104, 0, 0, 210, 104, 0, 0, 217, 104, 0, 0, 224, 104, 0, 0, 231, 104, 0, 0, 238, 104, 0, 0, 245, 104, 0, 0, 252, 104, 0, 0, 3, 105, 0, 0, 10, 105, 0, 0, 17, 105, 0, 0, 24, 105, 0, 0, 31, 105, 0, 0, 38, 105, 0, 0, 45, 105, 0, 0, 52, 105, 0, 0, 59, 105, 0, 0, 66, 105, 0, 0, 73, 105, 0, 0, 80, 105, 0, 0, 87, 105, 0, 0, 94, 105, 0, 0, 101, 105, 0, 0, 108, 105, 0, 0, 115, 105, 0, 0, 122, 105, 0, 0, 129, 105, 0, 0, 136, 105, 0, 0, 143, 105, 0, 0, 150, 105, 0, 0, 157, 105, 0, 0, 164, 105, 0, 0, 171, 105, 0, 0, 178, 105, 0, 0, 185, 105, 0, 0, 192, 105, 0, 0, 199, 105, 0, 0, 206, 105, 0, 0, 213, 105, 0, 0, 220, 105, 0, 0, 227, 105, 0, 0, 234, 105, 0, 0, 241, 105, 0, 0, 248, 105, 0, 0, 255, 105, 0, 0, 6, 106, 0, 0, 13, 106, 0, 0, 20, 106, 0, 0, 27, 106, 0, 0, 34, 106, 0, 0, 41, 106, 0, 0, 48, 106, 0, 0, 55, 106, 0, 0, 62, 106, 0, 0, 69, 106, 0, 0, 76, 106, 0, 0, 83, 106, 0, 0, 90, 106, 0, 0, 97, 106, 0, 0, 104, 106, 0, 0, 111, 106, 0, 0, 118, 106, 0, 0, 125, 106, 0, 0, 132, 106, 0, 0, 139, 106, 0, 0, 146, 106, 0, 0, 153, 106, 0, 0, 160, 106, 0, 0, 167, 106, 0, 0, 174, 106, 0, 0, 181, 106, 0, 0, 188, 106, 0, 0, 195, 106, 0, 0, 202, 106, 0, 0, 209, 106, 0, 0, 216, 106, 0, 0, 223, 106, 0, 0, 230, 106, 0, 0, 237, 106, 0, 0, 244, 106, 0, 0, 251, 106, 0, 0, 2, 107, 0, 0, 9, 107, 0, 0, 16, 107, 0, 0, 23, 107, 0, 0, 30, 107, 0, 0, 37, 107, 0, 0, 44, 107, 0, 0, 51, 107, 0, 0, 58, 107, 0, 0, 65, 107, 0, 0, 72, 107, 0, 0, 79, 107, 0, 0, 86, 107, 0, 0, 93, 107, 0, 0, 100, 107, 0, 0, 107, 107, 0, 0, 114, 107, 0, 0, 121, 107, 0, 0, 128, 107, 0, 0, 135, 107, 0, 0, 142, 107, 0, 0, 149, 107, 0, 0, 156, 107, 0, 0, 163, 107, 0, 0, 170, 107, 0, 0, 177, 107, 0, 0, 184, 107, 0, 0, 191, 107, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 212, 0, 0, 0, 217, 0, 0, 0, 232, 0, 0, 0, 245, 0, 0, 0, 4, 1, 0, 0, 15, 1, 0, 0, 26, 1, 0, 0, 41, 1, 0, 0, 61, 1, 0, 0, 65, 1, 0, 0, 69, 1, 0, 0, 69, 1, 0, 0, 69, 1, 0, 0, 71, 1, 0, 0, 71, 1, 0, 0, 71, 1, 0, 0, 73, 1, 0, 0, 73, 1, 0, 0, 73, 1, 0, 0, 73, 1, 0, 0, 75, 1, 0, 0, 75, 1, 0, 0, 77, 1, 0, 0, 77, 1, 0, 0, 79, 1, 0, 0, 95, 1, 0, 0, 95, 1, 0, 0, 95, 1, 0, 0, 97, 1, 0, 0, 97, 1, 0, 0, 99, 1, 0, 0, 99, 1, 0, 0, 99, 1, 0, 0, 101, 1, 0, 0, 101, 1, 0, 0, 103, 1, 0, 0, 103, 1, 0, 0, 71, 1, 0, 0, 71, 1, 0, 0, 73, 1, 0, 0, 73, 1, 0, 0, 73, 1, 0, 0, 73, 1, 0, 0, 105, 1, 0, 0, 105, 1, 0, 0, 105, 1, 0, 0, 107, 1, 0, 0, 122, 1, 0, 0, 138, 1, 0, 0, 138, 1, 0, 0, 138, 1, 0, 0, 138, 1, 0, 0, 105, 1, 0, 0, 105, 1, 0, 0, 154, 1, 0, 0, 154, 1, 0, 0, 154, 1, 0, 0, 156, 1, 0, 0, 171, 1, 0, 0, 138, 1, 0, 0, 138, 1, 0, 0, 154, 1, 0, 0, 154, 1, 0, 0, 187, 1, 0, 0, 187, 1, 0, 0, 187, 1, 0, 0, 187, 1, 0, 0, 187, 1, 0, 0, 199, 1, 0, 0, 199, 1, 0, 0, 199, 1, 0, 0, 199, 1, 0, 0, 199, 1, 0, 0, 214, 1, 0, 0, 214, 1, 0, 0, 214, 1, 0, 0, 214, 1, 0, 0, 214, 1, 0, 0, 229, 1, 0, 0, 229, 1, 0, 0, 229, 1, 0, 0, 229, 1, 0, 0, 229, 1, 0, 0, 242, 1, 0, 0, 242, 1, 0, 0, 242, 1, 0, 0, 242, 1, 0, 0, 242, 1, 0, 0, 242, 1, 0, 0, 242, 1, 0, 0, 242, 1, 0, 0, 242, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 4, 2, 0, 0, 4, 2, 0, 0, 4, 2, 0, 0, 6, 2, 0, 0, 18, 2, 0, 0, 18, 2, 0, 0, 18, 2, 0, 0, 20, 2, 0, 0, 31, 2, 0, 0, 35, 2, 0, 0, 43, 2, 0, 0, 50, 2, 0, 0, 71, 2, 0, 0, 93, 2, 0, 0, 115, 2, 0, 0, 138, 2, 0, 0, 155, 2, 0, 0, 173, 2, 0, 0, 191, 2, 0, 0, 210, 2, 0, 0, 223, 2, 0, 0, 232, 2, 0, 0, 241, 2, 0, 0, 250, 2, 0, 0, 250, 2, 0, 0, 250, 2, 0, 0, 250, 2, 0, 0, 250, 2, 0, 0, 3, 3, 0, 0, 16, 3, 0, 0, 23, 3, 0, 0, 38, 3, 0, 0, 52, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 81, 3, 0, 0, 88, 3, 0, 0, 96, 3, 0, 0, 107, 3, 0, 0, 119, 3, 0, 0, 130, 3, 0, 0, 130, 3, 0, 0, 130, 3, 0, 0, 130, 3, 0, 0, 130, 3, 0, 0, 130, 3, 0, 0, 141, 3, 0, 0, 141, 3, 0, 0, 141, 3, 0, 0, 156, 3, 0, 0, 156, 3, 0, 0, 156, 3, 0, 0, 176, 3, 0, 0, 130, 3, 0, 0, 130, 3, 0, 0, 130, 3, 0, 0, 193, 3, 0, 0, 193, 3, 0, 0, 207, 3, 0, 0, 222, 3, 0, 0, 238, 3, 0, 0, 253, 3, 0, 0, 253, 3, 0, 0, 253, 3, 0, 0, 16, 4, 0, 0, 31, 4, 0, 0, 47, 4, 0, 0, 62, 4, 0, 0, 77, 4, 0, 0, 93, 4, 0, 0, 253, 3, 0, 0, 253, 3, 0, 0, 253, 3, 0, 0, 108, 4, 0, 0, 125, 4, 0, 0, 130, 3, 0, 0, 130, 3, 0, 0, 142, 4, 0, 0, 142, 4, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 155, 4, 0, 0, 155, 4, 0, 0, 155, 4, 0, 0, 155, 4, 0, 0, 155, 4, 0, 0, 169, 4, 0, 0, 182, 4, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 199, 4, 0, 0, 199, 4, 0, 0, 199, 4, 0, 0, 199, 4, 0, 0, 199, 4, 0, 0, 212, 4, 0, 0, 225, 4, 0, 0, 242, 4, 0, 0, 1, 5, 0, 0, 17, 5, 0, 0, 32, 5, 0, 0, 48, 5, 0, 0, 67, 5, 0, 0, 84, 5, 0, 0, 101, 5, 0, 0, 122, 5, 0, 0, 137, 5, 0, 0, 153, 5, 0, 0, 168, 5, 0, 0, 184, 5, 0, 0, 203, 5, 0, 0, 203, 5, 0, 0, 203, 5, 0, 0, 213, 5, 0, 0, 230, 5, 0, 0, 248, 5, 0, 0, 10, 6, 0, 0, 29, 6, 0, 0, 48, 6, 0, 0, 67, 6, 0, 0, 87, 6, 0, 0, 110, 6, 0, 0, 129, 6, 0, 0, 149, 6, 0, 0, 172, 6, 0, 0, 189, 6, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 210, 6, 0, 0, 210, 6, 0, 0, 210, 6, 0, 0, 210, 6, 0, 0, 210, 6, 0, 0, 230, 6, 0, 0, 245, 6, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 5, 7, 0, 0, 5, 7, 0, 0, 5, 7, 0, 0, 5, 7, 0, 0, 5, 7, 0, 0, 25, 7, 0, 0, 40, 7, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 56, 7, 0, 0, 56, 7, 0, 0, 56, 7, 0, 0, 56, 7, 0, 0, 56, 7, 0, 0, 56, 7, 0, 0, 56, 7, 0, 0, 56, 7, 0, 0, 56, 7, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 71, 3, 0, 0, 69, 7, 0, 0, 69, 7, 0, 0, 69, 7, 0, 0, 75, 7, 0, 0, 75, 7, 0, 0, 75, 7, 0, 0, 82, 7, 0, 0, 99, 7, 0, 0, 118, 7, 0, 0, 137, 7, 0, 0, 156, 7, 0, 0, 175, 7, 0, 0, 198, 7, 0, 0, 221, 7, 0, 0, 248, 7, 0, 0, 11, 8, 0, 0, 35, 8, 0, 0, 54, 8, 0, 0, 0, 0, 0, 0, 78, 8, 0, 0, 82, 8, 0, 0, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 11, 0, 11, 0, 14, 0, 14, 0, 14, 0, 17, 0, 17, 0, 17, 0, 17, 0, 21, 0, 21, 0, 23, 0, 23, 0, 25, 0, 26, 0, 26, 0, 26, 0, 29, 0, 29, 0, 31, 0, 31, 0, 31, 0, 34, 0, 34, 0, 36, 0, 36, 0, 14, 0, 14, 0, 17, 0, 17, 0, 17, 0, 17, 0, 44, 0, 44, 0, 44, 0, 47, 0, 48, 0, 49, 0, 49, 0, 49, 0, 49, 0, 44, 0, 44, 0, 55, 0, 55, 0, 55, 0, 58, 0, 59, 0, 49, 0, 49, 0, 55, 0, 55, 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 69, 0, 69, 0, 69, 0, 69, 0, 69, 0, 74, 0, 74, 0, 74, 0, 74, 0, 74, 0, 79, 0, 79, 0, 79, 0, 79, 0, 79, 0, 84, 0, 84, 0, 84, 0, 84, 0, 84, 0, 84, 0, 84, 0, 84, 0, 84, 0, 93, 0, 93, 0, 93, 0, 96, 0, 96, 0, 96, 0, 99, 0, 100, 0, 100, 0, 100, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 119, 0, 119, 0, 119, 0, 119, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 129, 0, 129, 0, 129, 0, 129, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 139, 0, 139, 0, 139, 0, 139, 0, 139, 0, 145, 0, 145, 0, 145, 0, 148, 0, 148, 0, 148, 0, 151, 0, 139, 0, 139, 0, 139, 0, 155, 0, 155, 0, 157, 0, 158, 0, 159, 0, 160, 0, 160, 0, 160, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 160, 0, 160, 0, 160, 0, 172, 0, 173, 0, 139, 0, 139, 0, 176, 0, 176, 0, 129, 0, 129, 0, 129, 0, 129, 0, 129, 0, 183, 0, 183, 0, 183, 0, 183, 0, 183, 0, 188, 0, 189, 0, 129, 0, 129, 0, 129, 0, 129, 0, 129, 0, 195, 0, 195, 0, 195, 0, 195, 0, 195, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 215, 0, 215, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 129, 0, 129, 0, 129, 0, 129, 0, 129, 0, 236, 0, 236, 0, 236, 0, 236, 0, 236, 0, 241, 0, 242, 0, 129, 0, 129, 0, 129, 0, 129, 0, 129, 0, 248, 0, 248, 0, 248, 0, 248, 0, 248, 0, 253, 0, 254, 0, 129, 0, 129, 0, 129, 0, 129, 0, 129, 0, 129, 0, 129, 0, 129, 0, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 129, 0, 129, 0, 129, 0, 19, 1, 19, 1, 19, 1, 22, 1, 22, 1, 22, 1, 25, 1, 26, 1, 27, 1, 28, 1, 29, 1, 30, 1, 31, 1, 32, 1, 33, 1, 34, 1, 35, 1, 36, 1, 0, 0, 0, 0, 0, 0, 115, 0, 2, 0, 115, 0, 119, 0, 116, 0, 2, 0, 116, 0, 119, 0, 117, 0, 2, 0, 117, 0, 119, 0, 118, 0, 2, 0, 118, 0, 119, 0, 218, 0, 2, 0, 218, 0, 215, 0, 219, 0, 2, 0, 219, 0, 215, 0, 220, 0, 2, 0, 220, 0, 215, 0, 221, 0, 2, 0, 221, 0, 215, 0, 222, 0, 2, 0, 222, 0, 215, 0, 226, 0, 2, 0, 226, 0, 215, 0, 227, 0, 2, 0, 227, 0, 215, 0, 228, 0, 2, 0, 228, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 11, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0, 12, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 11, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 18, 0, 0, 0, 18, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 21, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 28, 0, 0, 0, 28, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 24, 0, 0, 0, 29, 0, 0, 0, 24, 0, 0, 0, 29, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 30, 0, 0, 0, 30, 0, 0, 0, 25, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 25, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 26, 0, 0, 0, 33, 0, 0, 0, 32, 0, 0, 0, 34, 0, 0, 0, 26, 0, 0, 0, 25, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 0, 34, 0, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 33, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 37, 0, 0, 0, 14, 0, 0, 0, 36, 0, 0, 0, 14, 0, 0, 0, 36, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 38, 0, 0, 0, 40, 0, 0, 0, 40, 0, 0, 0, 39, 0, 0, 0, 39, 0, 0, 0, 38, 0, 0, 0, 41, 0, 0, 0, 41, 0, 0, 0, 41, 0, 0, 0, 42, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 43, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 44, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 45, 0, 0, 0, 45, 0, 0, 0, 45, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 47, 0, 0, 0, 47, 0, 0, 0, 21, 0, 0, 0, 21, 0, 0, 0, 21, 0, 0, 0, 21, 0, 0, 0, 48, 0, 0, 0, 47, 0, 0, 0, 46, 0, 0, 0, 21, 0, 0, 0, 46, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 46, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, 23, 0, 0, 0, 10, 0, 0, 0, 49, 0, 0, 0, 28, 0, 0, 0, 49, 0, 0, 0, 30, 0, 0, 0, 49, 0, 0, 0, 28, 0, 0, 0, 28, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 30, 0, 0, 0, 30, 0, 0, 0, 10, 0, 0, 0, 49, 0, 0, 0, 49, 0, 0, 0, 30, 0, 0, 0, 28, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 28, 0, 0, 0, 30, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 53, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 24, 0, 0, 0, 50, 0, 0, 0, 54, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 24, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 24, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 55, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 55, 0, 0, 0, 55, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 56, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 51, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 52, 0, 0, 0, 65, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 63, 0, 0, 0, 67, 0, 0, 0, 54, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 54, 0, 0, 0, 53, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 67, 0, 0, 0, 69, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 69, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 53, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 70, 0, 0, 0, 56, 0, 0, 0, 55, 0, 0, 0, 70, 0, 0, 0, 56, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 55, 0, 0, 0, 71, 0, 0, 0, 55, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 67, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 67, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 0, 72, 0, 0, 0, 67, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 67, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 72, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 73, 0, 0, 0, 73, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 72, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 72, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 72, 0, 0, 0, 75, 0, 0, 0, 72, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 75, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 73, 0, 0, 0, 79, 0, 0, 0, 77, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 73, 0, 0, 0, 73, 0, 0, 0, 80, 0, 0, 0, 74, 0, 0, 0, 80, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 80, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 80, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 74, 0, 0, 0, 78, 0, 0, 0, 74, 0, 0, 0, 77, 0, 0, 0, 74, 0, 0, 0, 79, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 73, 0, 0, 0, 77, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 73, 0, 0, 0, 76, 0, 0, 0, 76, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 76, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 76, 0, 0, 0, 76, 0, 0, 0, 81, 0, 0, 0, 76, 0, 0, 0, 76, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 76, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 81, 0, 0, 0, 83, 0, 0, 0, 83, 0, 0, 0, 76, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 76, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 75, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 75, 0, 0, 0, 81, 0, 0, 0, 76, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 83, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 76, 0, 0, 0, 76, 0, 0, 0, 76, 0, 0, 0, 76, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 81, 0, 0, 0, 84, 0, 0, 0, 80, 0, 0, 0, 85, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 85, 0, 0, 0, 83, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 71, 0, 0, 0, 80, 0, 0, 0, 86, 0, 0, 0, 85, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 71, 0, 0, 0, 87, 0, 0, 0, 87, 0, 0, 0, 80, 0, 0, 0, 82, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 82, 0, 0, 0, 88, 0, 0, 0, 80, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 83, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 89, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 84, 0, 0, 0, 90, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 78, 0, 0, 0, 91, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 84, 0, 0, 0, 90, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 83, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 84, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 90, 0, 0, 0, 84, 0, 0, 0, 84, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 90, 0, 0, 0, 90, 0, 0, 0, 80, 0, 0, 0, 84, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 89, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 90, 0, 0, 0, 80, 0, 0, 0, 84, 0, 0, 0, 84, 0, 0, 0, 90, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 83, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 85, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 85, 0, 0, 0, 80, 0, 0, 0, 89, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 84, 0, 0, 0, 90, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 84, 0, 0, 0, 90, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 84, 0, 0, 0, 90, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 84, 0, 0, 0, 90, 0, 0, 0, 78, 0, 0, 0, 90, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 80, 0, 0, 0, 92, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 93, 0, 0, 0, 80, 0, 0, 0, 78, 0, 0, 0, 84, 0, 0, 0, 90, 0, 0, 0, 83, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 78, 0, 0, 0, 84, 0, 0, 0, 90, 0, 0, 0, 94, 0, 0, 0, 82, 0, 0, 0, 91, 0, 0, 0, 83, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 93, 0, 0, 0, 87, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 95, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 86, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 92, 0, 0, 0, 87, 0, 0, 0, 87, 0, 0, 0, 87, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 92, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 94, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 87, 0, 0, 0, 87, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 95, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0, 93, 0, 0, 0, 92, 0, 0, 0, 86, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 92, 0, 0, 0, 92, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 70, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 94, 0, 0, 0, 94, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 93, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 94, 0, 0, 0, 70, 0, 0, 0, 95, 0, 0, 0, 94, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 87, 0, 0, 0, 70, 0, 0, 0, 94, 0, 0, 0, 94, 0, 0, 0, 94, 0, 0, 0, 87, 0, 0, 0, 94, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 92, 0, 0, 0, 92, 0, 0, 0, 87, 0, 0, 0, 93, 0, 0, 0, 95, 0, 0, 0, 93, 0, 0, 0, 86, 0, 0, 0, 94, 0, 0, 0, 86, 0, 0, 0, 70, 0, 0, 0, 94, 0, 0, 0, 70, 0, 0, 0, 94, 0, 0, 0, 87, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 70, 0, 0, 0, 94, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 94, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 91, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 82, 0, 0, 0, 91, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 89, 0, 0, 0, 82, 0, 0, 0, 96, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 82, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 82, 0, 0, 0, 89, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 91, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 98, 0, 0, 0, 82, 0, 0, 0, 96, 0, 0, 0, 82, 0, 0, 0, 82, 0, 0, 0, 85, 0, 0, 0, 82, 0, 0, 0, 85, 0, 0, 0, 82, 0, 0, 0, 85, 0, 0, 0, 82, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 82, 0, 0, 0, 89, 0, 0, 0, 85, 0, 0, 0, 100, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 82, 0, 0, 0, 82, 0, 0, 0, 85, 0, 0, 0, 97, 0, 0, 0, 91, 0, 0, 0, 88, 0, 0, 0, 99, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 91, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 91, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 96, 0, 0, 0, 98, 0, 0, 0, 85, 0, 0, 0, 91, 0, 0, 0, 88, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 98, 0, 0, 0, 91, 0, 0, 0, 96, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 91, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 91, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 98, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 91, 0, 0, 0, 89, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 98, 0, 0, 0, 85, 0, 0, 0, 96, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 91, 0, 0, 0, 88, 0, 0, 0, 91, 0, 0, 0, 88, 0, 0, 0, 96, 0, 0, 0, 98, 0, 0, 0, 89, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 88, 0, 0, 0, 91, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 88, 0, 0, 0, 88, 0, 0, 0, 91, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 88, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 91, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 85, 0, 0, 0, 85, 0, 0, 0, 91, 0, 0, 0, 89, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 85, 0, 0, 0, 89, 0, 0, 0, 98, 0, 0, 0, 89, 0, 0, 0, 96, 0, 0, 0, 91, 0, 0, 0, 85, 0, 0, 0, 101, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 102, 0, 0, 0, 105, 0, 0, 0, 100, 0, 0, 0, 97, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 100, 0, 0, 0, 103, 0, 0, 0, 105, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 103, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 103, 0, 0, 0, 100, 0, 0, 0, 104, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 106, 0, 0, 0, 106, 0, 0, 0, 102, 0, 0, 0, 106, 0, 0, 0, 106, 0, 0, 0, 105, 0, 0, 0, 101, 0, 0, 0, 104, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 100, 0, 0, 0, 104, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 99, 0, 0, 0, 99, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 101, 0, 0, 0, 104, 0, 0, 0, 106, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 100, 0, 0, 0, 105, 0, 0, 0, 103, 0, 0, 0, 99, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 99, 0, 0, 0, 99, 0, 0, 0, 99, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 97, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 104, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 97, 0, 0, 0, 100, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, 99, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 99, 0, 0, 0, 103, 0, 0, 0, 109, 0, 0, 0, 100, 0, 0, 0, 97, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 97, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 99, 0, 0, 0, 99, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 11, 0, 0, 0, 13, 0, 15, 0, 17, 0, 19, 0, 0, 0, 21, 0, 23, 0, 0, 0, 25, 0, 27, 0, 0, 0, 0, 0, 29, 0, 31, 0, 29, 0, 31, 0, 0, 0, 33, 0, 35, 0, 0, 0, 0, 0, 0, 0, 37, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 51, 0, 0, 0, 0, 0, 0, 0, 49, 0, 51, 0, 0, 0, 0, 0, 0, 0, 49, 0, 51, 0, 0, 0, 0, 0, 0, 0, 49, 0, 51, 0, 0, 0, 0, 0, 0, 0, 49, 0, 51, 0, 0, 0, 0, 0, 0, 0, 53, 0, 55, 0, 0, 0, 0, 0, 57, 0, 59, 0, 0, 0, 61, 0, 63, 0, 0, 0, 0, 0, 65, 0, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 141, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 1, 218, 1, 216, 1, 0, 0, 39, 0, 39, 0, 0, 0, 39, 0, 39, 0, 32, 4, 222, 1, 222, 1, 222, 1, 222, 1, 32, 4, 32, 4, 92, 5, 91, 5, 0, 0, 80, 0, 81, 0, 57, 1, 56, 1, 0, 0, 32, 4, 32, 4, 32, 4, 0, 0, 0, 0, 0, 0, 69, 4, 68, 4, 0, 0, 224, 3, 225, 3, 0, 0, 0, 0, 32, 4, 32, 4, 32, 4, 63, 4, 62, 4, 139, 0, 140, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 0, 0, 0, 0, 32, 4, 32, 4, 43, 4, 41, 4, 32, 4, 32, 4, 92, 5, 91, 5, 0, 0, 34, 4, 33, 4, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 32, 4, 32, 4, 92, 5, 91, 5, 0, 0, 36, 4, 37, 4, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 4, 32, 4, 92, 5, 91, 5, 0, 0, 111, 4, 66, 4, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 32, 4, 32, 4, 92, 5, 91, 5, 0, 0, 171, 4, 170, 4, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 32, 4, 32, 4, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 30, 3, 31, 3, 0, 0, 0, 0, 0, 0, 158, 4, 157, 4, 0, 0, 0, 0, 235, 2, 234, 2, 0, 0, 38, 3, 40, 3, 0, 0, 152, 0, 153, 0, 0, 0, 222, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 69, 0, 21, 0, 23, 0, 71, 0, 25, 0, 27, 0, 71, 0, 0, 0, 73, 0, 75, 0, 73, 0, 75, 0, 0, 0, 77, 0, 79, 0, 71, 0, 0, 0, 0, 0, 81, 0, 83, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 87, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 91, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 95, 0, 71, 0, 0, 0, 0, 0, 93, 0, 95, 0, 71, 0, 0, 0, 0, 0, 93, 0, 95, 0, 71, 0, 0, 0, 0, 0, 93, 0, 95, 0, 71, 0, 0, 0, 0, 0, 93, 0, 95, 0, 71, 0, 0, 0, 0, 0, 97, 0, 99, 0, 0, 0, 0, 0, 101, 0, 103, 0, 71, 0, 105, 0, 107, 0, 71, 0, 0, 0, 109, 0, 111, 0, 71, 0, 0, 0, 71, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 1, 104, 1, 92, 5, 91, 5, 0, 0, 35, 0, 36, 0, 57, 1, 56, 1, 0, 0, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 36, 1, 129, 1, 86, 1, 6, 4, 5, 4, 55, 3, 104, 1, 104, 1, 104, 1, 104, 1, 128, 1, 126, 1, 145, 0, 147, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 104, 1, 0, 0, 104, 1, 104, 1, 125, 1, 124, 1, 104, 1, 104, 1, 92, 5, 91, 5, 0, 0, 123, 1, 122, 1, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 104, 1, 104, 1, 92, 5, 91, 5, 0, 0, 121, 1, 120, 1, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 1, 104, 1, 92, 5, 91, 5, 0, 0, 119, 1, 118, 1, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 104, 1, 104, 1, 92, 5, 91, 5, 0, 0, 117, 1, 116, 1, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 104, 1, 104, 1, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 33, 1, 34, 1, 0, 0, 0, 0, 0, 0, 115, 1, 114, 1, 0, 0, 0, 0, 6, 1, 5, 1, 0, 0, 16, 1, 12, 1, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 69, 0, 21, 0, 23, 0, 113, 0, 25, 0, 27, 0, 113, 0, 0, 0, 73, 0, 75, 0, 73, 0, 75, 0, 0, 0, 77, 0, 79, 0, 113, 0, 0, 0, 0, 0, 81, 0, 83, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 87, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 91, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 95, 0, 113, 0, 0, 0, 0, 0, 93, 0, 95, 0, 113, 0, 0, 0, 0, 0, 93, 0, 95, 0, 113, 0, 0, 0, 0, 0, 93, 0, 95, 0, 113, 0, 0, 0, 0, 0, 93, 0, 95, 0, 113, 0, 0, 0, 0, 0, 97, 0, 99, 0, 0, 0, 0, 0, 101, 0, 103, 0, 113, 0, 105, 0, 107, 0, 113, 0, 0, 0, 109, 0, 111, 0, 113, 0, 0, 0, 113, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 1, 106, 1, 92, 5, 91, 5, 0, 0, 35, 0, 36, 0, 57, 1, 56, 1, 0, 0, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 36, 1, 129, 1, 86, 1, 6, 4, 5, 4, 55, 3, 106, 1, 106, 1, 106, 1, 106, 1, 128, 1, 126, 1, 145, 0, 147, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 106, 1, 0, 0, 106, 1, 106, 1, 125, 1, 124, 1, 106, 1, 106, 1, 92, 5, 91, 5, 0, 0, 123, 1, 122, 1, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 106, 1, 106, 1, 92, 5, 91, 5, 0, 0, 121, 1, 120, 1, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 1, 106, 1, 92, 5, 91, 5, 0, 0, 119, 1, 118, 1, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 106, 1, 106, 1, 92, 5, 91, 5, 0, 0, 117, 1, 116, 1, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 106, 1, 106, 1, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 33, 1, 34, 1, 0, 0, 0, 0, 0, 0, 115, 1, 114, 1, 0, 0, 0, 0, 6, 1, 5, 1, 0, 0, 16, 1, 12, 1, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 69, 0, 21, 0, 23, 0, 115, 0, 25, 0, 27, 0, 115, 0, 0, 0, 73, 0, 75, 0, 73, 0, 75, 0, 0, 0, 77, 0, 79, 0, 115, 0, 0, 0, 0, 0, 81, 0, 83, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 87, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 91, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 95, 0, 115, 0, 0, 0, 0, 0, 93, 0, 95, 0, 115, 0, 0, 0, 0, 0, 93, 0, 95, 0, 115, 0, 0, 0, 0, 0, 93, 0, 95, 0, 115, 0, 0, 0, 0, 0, 93, 0, 95, 0, 115, 0, 0, 0, 0, 0, 97, 0, 99, 0, 0, 0, 0, 0, 101, 0, 103, 0, 115, 0, 105, 0, 107, 0, 115, 0, 0, 0, 109, 0, 111, 0, 115, 0, 0, 0, 115, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 1, 105, 1, 92, 5, 91, 5, 0, 0, 35, 0, 36, 0, 57, 1, 56, 1, 0, 0, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 36, 1, 129, 1, 86, 1, 6, 4, 5, 4, 55, 3, 105, 1, 105, 1, 105, 1, 105, 1, 128, 1, 126, 1, 145, 0, 147, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 105, 1, 0, 0, 105, 1, 105, 1, 125, 1, 124, 1, 105, 1, 105, 1, 92, 5, 91, 5, 0, 0, 123, 1, 122, 1, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 105, 1, 105, 1, 92, 5, 91, 5, 0, 0, 121, 1, 120, 1, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 1, 105, 1, 92, 5, 91, 5, 0, 0, 119, 1, 118, 1, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 105, 1, 105, 1, 92, 5, 91, 5, 0, 0, 117, 1, 116, 1, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 105, 1, 105, 1, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 33, 1, 34, 1, 0, 0, 0, 0, 0, 0, 115, 1, 114, 1, 0, 0, 0, 0, 6, 1, 5, 1, 0, 0, 16, 1, 12, 1, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 69, 0, 21, 0, 23, 0, 117, 0, 25, 0, 27, 0, 117, 0, 0, 0, 73, 0, 75, 0, 73, 0, 75, 0, 0, 0, 77, 0, 79, 0, 117, 0, 0, 0, 0, 0, 81, 0, 83, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 87, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 91, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 95, 0, 117, 0, 0, 0, 0, 0, 93, 0, 95, 0, 117, 0, 0, 0, 0, 0, 93, 0, 95, 0, 117, 0, 0, 0, 0, 0, 93, 0, 95, 0, 117, 0, 0, 0, 0, 0, 93, 0, 95, 0, 117, 0, 0, 0, 0, 0, 97, 0, 99, 0, 0, 0, 0, 0, 101, 0, 103, 0, 117, 0, 105, 0, 107, 0, 117, 0, 0, 0, 109, 0, 111, 0, 117, 0, 0, 0, 117, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 96, 1, 92, 5, 91, 5, 0, 0, 35, 0, 36, 0, 57, 1, 56, 1, 0, 0, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 36, 1, 129, 1, 86, 1, 6, 4, 5, 4, 55, 3, 96, 1, 96, 1, 96, 1, 96, 1, 128, 1, 126, 1, 145, 0, 147, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 96, 1, 0, 0, 96, 1, 96, 1, 125, 1, 124, 1, 96, 1, 96, 1, 92, 5, 91, 5, 0, 0, 123, 1, 122, 1, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 96, 1, 96, 1, 92, 5, 91, 5, 0, 0, 121, 1, 120, 1, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 96, 1, 92, 5, 91, 5, 0, 0, 119, 1, 118, 1, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 96, 1, 96, 1, 92, 5, 91, 5, 0, 0, 117, 1, 116, 1, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 96, 1, 96, 1, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 33, 1, 34, 1, 0, 0, 0, 0, 0, 0, 115, 1, 114, 1, 0, 0, 0, 0, 6, 1, 5, 1, 0, 0, 16, 1, 12, 1, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 69, 0, 21, 0, 23, 0, 119, 0, 25, 0, 27, 0, 119, 0, 0, 0, 73, 0, 75, 0, 73, 0, 75, 0, 0, 0, 77, 0, 79, 0, 119, 0, 0, 0, 0, 0, 81, 0, 83, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 87, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 91, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 95, 0, 119, 0, 0, 0, 0, 0, 93, 0, 95, 0, 119, 0, 0, 0, 0, 0, 93, 0, 95, 0, 119, 0, 0, 0, 0, 0, 93, 0, 95, 0, 119, 0, 0, 0, 0, 0, 93, 0, 95, 0, 119, 0, 0, 0, 0, 0, 97, 0, 99, 0, 0, 0, 0, 0, 101, 0, 103, 0, 119, 0, 105, 0, 107, 0, 119, 0, 0, 0, 109, 0, 111, 0, 119, 0, 0, 0, 119, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 1, 102, 1, 92, 5, 91, 5, 0, 0, 35, 0, 36, 0, 57, 1, 56, 1, 0, 0, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 36, 1, 129, 1, 86, 1, 6, 4, 5, 4, 55, 3, 102, 1, 102, 1, 102, 1, 102, 1, 128, 1, 126, 1, 145, 0, 147, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 102, 1, 0, 0, 102, 1, 102, 1, 125, 1, 124, 1, 102, 1, 102, 1, 92, 5, 91, 5, 0, 0, 123, 1, 122, 1, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 102, 1, 102, 1, 92, 5, 91, 5, 0, 0, 121, 1, 120, 1, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 1, 102, 1, 92, 5, 91, 5, 0, 0, 119, 1, 118, 1, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 102, 1, 102, 1, 92, 5, 91, 5, 0, 0, 117, 1, 116, 1, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 102, 1, 102, 1, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 33, 1, 34, 1, 0, 0, 0, 0, 0, 0, 115, 1, 114, 1, 0, 0, 0, 0, 6, 1, 5, 1, 0, 0, 16, 1, 12, 1, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 69, 0, 21, 0, 23, 0, 121, 0, 25, 0, 27, 0, 121, 0, 0, 0, 73, 0, 75, 0, 73, 0, 75, 0, 0, 0, 77, 0, 79, 0, 121, 0, 0, 0, 0, 0, 81, 0, 83, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 87, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 91, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 95, 0, 121, 0, 0, 0, 0, 0, 93, 0, 95, 0, 121, 0, 0, 0, 0, 0, 93, 0, 95, 0, 121, 0, 0, 0, 0, 0, 93, 0, 95, 0, 121, 0, 0, 0, 0, 0, 93, 0, 95, 0, 121, 0, 0, 0, 0, 0, 97, 0, 99, 0, 0, 0, 0, 0, 101, 0, 103, 0, 121, 0, 105, 0, 107, 0, 121, 0, 0, 0, 109, 0, 111, 0, 121, 0, 0, 0, 121, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 1, 103, 1, 92, 5, 91, 5, 0, 0, 35, 0, 36, 0, 57, 1, 56, 1, 0, 0, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 36, 1, 129, 1, 86, 1, 6, 4, 5, 4, 55, 3, 103, 1, 103, 1, 103, 1, 103, 1, 128, 1, 126, 1, 145, 0, 147, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 103, 1, 0, 0, 103, 1, 103, 1, 125, 1, 124, 1, 103, 1, 103, 1, 92, 5, 91, 5, 0, 0, 123, 1, 122, 1, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 103, 1, 103, 1, 92, 5, 91, 5, 0, 0, 121, 1, 120, 1, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 1, 103, 1, 92, 5, 91, 5, 0, 0, 119, 1, 118, 1, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 103, 1, 103, 1, 92, 5, 91, 5, 0, 0, 117, 1, 116, 1, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 103, 1, 103, 1, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 33, 1, 34, 1, 0, 0, 0, 0, 0, 0, 115, 1, 114, 1, 0, 0, 0, 0, 6, 1, 5, 1, 0, 0, 16, 1, 12, 1, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 123, 0, 21, 0, 23, 0, 0, 0, 25, 0, 27, 0, 0, 0, 0, 0, 125, 0, 127, 0, 125, 0, 127, 0, 0, 0, 129, 0, 131, 0, 0, 0, 0, 0, 0, 0, 133, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 149, 0, 151, 0, 0, 0, 0, 0, 153, 0, 155, 0, 0, 0, 157, 0, 159, 0, 0, 0, 0, 0, 161, 0, 163, 0, 0, 0, 0, 0, 123, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 4, 191, 4, 92, 5, 91, 5, 0, 0, 82, 0, 83, 0, 57, 1, 56, 1, 0, 0, 191, 4, 191, 4, 191, 4, 0, 0, 0, 0, 0, 0, 73, 5, 66, 5, 0, 0, 29, 3, 25, 3, 0, 0, 191, 4, 191, 4, 191, 4, 191, 4, 65, 5, 62, 5, 128, 0, 118, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 0, 0, 0, 0, 191, 4, 191, 4, 61, 5, 58, 5, 191, 4, 191, 4, 92, 5, 91, 5, 0, 0, 57, 5, 56, 5, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 191, 4, 191, 4, 92, 5, 91, 5, 0, 0, 54, 5, 53, 5, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 4, 191, 4, 92, 5, 91, 5, 0, 0, 51, 5, 50, 5, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 191, 4, 191, 4, 92, 5, 91, 5, 0, 0, 42, 5, 41, 5, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 191, 4, 191, 4, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 56, 4, 53, 4, 0, 0, 0, 0, 0, 0, 37, 5, 36, 5, 0, 0, 0, 0, 43, 3, 44, 3, 0, 0, 124, 4, 51, 4, 0, 0, 158, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 165, 0, 21, 0, 23, 0, 0, 0, 25, 0, 27, 0, 0, 0, 0, 0, 125, 0, 127, 0, 125, 0, 127, 0, 0, 0, 129, 0, 131, 0, 0, 0, 0, 0, 0, 0, 133, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 149, 0, 151, 0, 0, 0, 0, 0, 153, 0, 155, 0, 0, 0, 157, 0, 159, 0, 0, 0, 0, 0, 161, 0, 163, 0, 0, 0, 0, 0, 165, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 4, 207, 4, 92, 5, 91, 5, 0, 0, 82, 0, 83, 0, 57, 1, 56, 1, 0, 0, 207, 4, 207, 4, 207, 4, 0, 0, 0, 0, 0, 0, 73, 5, 66, 5, 0, 0, 29, 3, 25, 3, 0, 0, 207, 4, 207, 4, 207, 4, 207, 4, 65, 5, 62, 5, 128, 0, 118, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 0, 0, 0, 0, 207, 4, 207, 4, 61, 5, 58, 5, 207, 4, 207, 4, 92, 5, 91, 5, 0, 0, 57, 5, 56, 5, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 207, 4, 207, 4, 92, 5, 91, 5, 0, 0, 54, 5, 53, 5, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 4, 207, 4, 92, 5, 91, 5, 0, 0, 51, 5, 50, 5, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 207, 4, 207, 4, 92, 5, 91, 5, 0, 0, 42, 5, 41, 5, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 207, 4, 207, 4, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 56, 4, 53, 4, 0, 0, 0, 0, 0, 0, 37, 5, 36, 5, 0, 0, 0, 0, 43, 3, 44, 3, 0, 0, 124, 4, 51, 4, 0, 0, 158, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 19, 0, 167, 0, 21, 0, 23, 0, 0, 0, 25, 0, 27, 0, 0, 0, 0, 0, 125, 0, 127, 0, 125, 0, 127, 0, 0, 0, 129, 0, 131, 0, 0, 0, 0, 0, 0, 0, 133, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 145, 0, 147, 0, 0, 0, 0, 0, 0, 0, 149, 0, 151, 0, 0, 0, 0, 0, 153, 0, 155, 0, 0, 0, 157, 0, 159, 0, 0, 0, 0, 0, 161, 0, 163, 0, 0, 0, 0, 0, 167, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 4, 203, 4, 92, 5, 91, 5, 0, 0, 82, 0, 83, 0, 57, 1, 56, 1, 0, 0, 203, 4, 203, 4, 203, 4, 0, 0, 0, 0, 0, 0, 73, 5, 66, 5, 0, 0, 29, 3, 25, 3, 0, 0, 203, 4, 203, 4, 203, 4, 203, 4, 65, 5, 62, 5, 128, 0, 118, 0, 0, 0, 59, 1, 58, 1, 0, 0, 18, 1, 23, 1, 0, 0, 47, 1, 43, 1, 0, 0, 130, 1, 69, 1, 0, 0, 0, 0, 0, 0, 203, 4, 203, 4, 61, 5, 58, 5, 203, 4, 203, 4, 92, 5, 91, 5, 0, 0, 57, 5, 56, 5, 215, 5, 223, 5, 0, 0, 0, 0, 0, 0, 203, 4, 203, 4, 92, 5, 91, 5, 0, 0, 54, 5, 53, 5, 220, 5, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 4, 203, 4, 92, 5, 91, 5, 0, 0, 51, 5, 50, 5, 226, 5, 228, 5, 0, 0, 0, 0, 0, 0, 203, 4, 203, 4, 92, 5, 91, 5, 0, 0, 42, 5, 41, 5, 246, 5, 250, 5, 0, 0, 0, 0, 0, 0, 203, 4, 203, 4, 92, 5, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 56, 4, 53, 4, 0, 0, 0, 0, 0, 0, 37, 5, 36, 5, 0, 0, 0, 0, 43, 3, 44, 3, 0, 0, 124, 4, 51, 4, 0, 0, 158, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 69, 0, 0, 0, 23, 0, 169, 0, 0, 0, 27, 0, 169, 0, 0, 0, 73, 0, 75, 0, 73, 0, 75, 0, 0, 0, 171, 0, 79, 0, 169, 0, 0, 0, 0, 0, 173, 0, 83, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 87, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 91, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 95, 0, 169, 0, 0, 0, 0, 0, 179, 0, 95, 0, 169, 0, 0, 0, 0, 0, 179, 0, 95, 0, 169, 0, 0, 0, 0, 0, 179, 0, 95, 0, 169, 0, 0, 0, 0, 0, 179, 0, 95, 0, 169, 0, 0, 0, 0, 0, 97, 0, 99, 0, 0, 0, 0, 0, 181, 0, 103, 0, 169, 0, 183, 0, 107, 0, 169, 0, 0, 0, 185, 0, 111, 0, 169, 0, 0, 0, 169, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 1, 134, 1, 0, 0, 91, 5, 0, 0, 35, 0, 36, 0, 0, 0, 56, 1, 0, 0, 0, 0, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 0, 0, 129, 1, 86, 1, 0, 0, 5, 4, 55, 3, 0, 0, 0, 0, 134, 1, 134, 1, 0, 0, 126, 1, 0, 0, 147, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 134, 1, 134, 1, 125, 1, 124, 1, 134, 1, 134, 1, 0, 0, 91, 5, 0, 0, 123, 1, 122, 1, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 134, 1, 134, 1, 0, 0, 91, 5, 0, 0, 121, 1, 120, 1, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 1, 134, 1, 0, 0, 91, 5, 0, 0, 119, 1, 118, 1, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 134, 1, 134, 1, 0, 0, 91, 5, 0, 0, 117, 1, 116, 1, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 134, 1, 134, 1, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 115, 1, 34, 1, 0, 0, 0, 0, 0, 0, 115, 1, 114, 1, 0, 0, 0, 0, 134, 1, 7, 1, 0, 0, 97, 1, 12, 1, 0, 0, 107, 0, 101, 0, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 187, 0, 0, 0, 19, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 29, 0, 31, 0, 29, 0, 31, 0, 0, 0, 189, 0, 35, 0, 0, 0, 0, 0, 0, 0, 191, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 53, 0, 55, 0, 0, 0, 0, 0, 199, 0, 59, 0, 0, 0, 201, 0, 63, 0, 0, 0, 0, 0, 203, 0, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 4, 0, 0, 0, 0, 0, 0, 0, 0, 152, 4, 152, 4, 0, 0, 91, 5, 0, 0, 80, 0, 81, 0, 0, 0, 56, 1, 0, 0, 0, 0, 152, 4, 152, 4, 0, 0, 0, 0, 0, 0, 0, 0, 68, 4, 0, 0, 0, 0, 225, 3, 0, 0, 0, 0, 0, 0, 152, 4, 152, 4, 0, 0, 62, 4, 0, 0, 140, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 152, 4, 152, 4, 43, 4, 41, 4, 152, 4, 152, 4, 0, 0, 91, 5, 0, 0, 34, 4, 33, 4, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 152, 4, 152, 4, 0, 0, 91, 5, 0, 0, 36, 4, 37, 4, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 4, 152, 4, 0, 0, 91, 5, 0, 0, 111, 4, 66, 4, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 152, 4, 152, 4, 0, 0, 91, 5, 0, 0, 171, 4, 170, 4, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 152, 4, 152, 4, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 158, 4, 31, 3, 0, 0, 0, 0, 0, 0, 158, 4, 157, 4, 0, 0, 0, 0, 152, 4, 234, 2, 0, 0, 52, 4, 40, 3, 0, 0, 161, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 213, 0, 215, 0, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 108, 1, 244, 5, 0, 0, 0, 0, 29, 5, 29, 5, 247, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 253, 0, 255, 0, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 228, 4, 244, 5, 0, 0, 0, 0, 217, 4, 217, 4, 247, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 127, 2, 131, 4, 0, 0, 0, 0, 127, 5, 127, 5, 203, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 213, 0, 5, 1, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 107, 1, 230, 5, 0, 0, 0, 0, 29, 5, 29, 5, 247, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 7, 1, 9, 1, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 137, 3, 46, 5, 0, 0, 0, 0, 198, 4, 198, 4, 170, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 11, 1, 13, 1, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 141, 4, 244, 5, 0, 0, 0, 0, 194, 4, 194, 4, 247, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 11, 1, 15, 1, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 135, 4, 230, 5, 0, 0, 0, 0, 194, 4, 194, 4, 247, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 17, 1, 19, 1, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 0, 4, 98, 5, 0, 0, 0, 0, 10, 5, 10, 5, 130, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 21, 1, 23, 1, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 221, 2, 57, 4, 0, 0, 0, 0, 81, 5, 81, 5, 224, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 253, 0, 25, 1, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 226, 4, 230, 5, 0, 0, 0, 0, 217, 4, 217, 4, 247, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 207, 0, 0, 0, 0, 0, 0, 0, 209, 0, 211, 0, 0, 0, 27, 1, 29, 1, 0, 0, 0, 0, 217, 0, 219, 0, 0, 0, 0, 0, 221, 0, 223, 0, 225, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 241, 0, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 113, 0, 112, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 142, 2, 141, 2, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 140, 2, 139, 2, 121, 4, 0, 0, 0, 0, 47, 5, 237, 5, 0, 0, 0, 0, 88, 5, 88, 5, 177, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 21, 4, 41, 3, 28, 3, 246, 4, 27, 3, 32, 3, 26, 3, 33, 3, 245, 4, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 244, 4, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 138, 2, 137, 2, 155, 4, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 19, 4, 0, 0, 0, 0, 136, 2, 135, 2, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 36, 3, 0, 0, 0, 0, 0, 0, 174, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 242, 1, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 197, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 35, 1, 37, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 3, 4, 96, 5, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 11, 5, 11, 5, 0, 0, 0, 0, 139, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 79, 1, 81, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 238, 4, 227, 5, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 215, 4, 215, 4, 0, 0, 0, 0, 189, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 83, 1, 85, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 55, 5, 241, 5, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 89, 5, 89, 5, 0, 0, 0, 0, 178, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 79, 1, 87, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 249, 4, 191, 5, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 215, 4, 215, 4, 0, 0, 0, 0, 189, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 89, 1, 91, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 147, 3, 52, 5, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 199, 4, 199, 4, 0, 0, 0, 0, 168, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 93, 1, 95, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 110, 1, 191, 5, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 27, 5, 27, 5, 0, 0, 0, 0, 189, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 93, 1, 97, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 109, 1, 227, 5, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 27, 5, 27, 5, 0, 0, 0, 0, 189, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 99, 1, 101, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 129, 4, 227, 5, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 63, 5, 63, 5, 0, 0, 0, 0, 189, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 99, 1, 103, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 106, 4, 191, 5, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 63, 5, 63, 5, 0, 0, 0, 0, 189, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 105, 1, 107, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 129, 2, 128, 4, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 125, 5, 125, 5, 0, 0, 0, 0, 204, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 33, 1, 0, 0, 109, 1, 111, 1, 39, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 45, 1, 0, 0, 0, 0, 47, 1, 49, 1, 51, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 67, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 116, 0, 117, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 247, 2, 19, 3, 67, 4, 0, 0, 0, 0, 242, 2, 27, 4, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 20, 3, 21, 3, 65, 4, 0, 0, 0, 0, 0, 0, 0, 0, 79, 5, 79, 5, 0, 0, 0, 0, 225, 5, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 166, 3, 165, 3, 164, 3, 113, 5, 151, 3, 0, 0, 145, 3, 0, 0, 95, 5, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 90, 5, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 22, 3, 224, 2, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 244, 3, 0, 0, 0, 0, 2, 3, 249, 2, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 247, 3, 0, 0, 0, 0, 0, 0, 16, 3, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 84, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 69, 0, 0, 0, 23, 0, 113, 1, 0, 0, 27, 0, 113, 1, 0, 0, 73, 0, 75, 0, 73, 0, 75, 0, 0, 0, 171, 0, 79, 0, 113, 1, 0, 0, 0, 0, 173, 0, 83, 0, 113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 87, 0, 113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 91, 0, 113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 95, 0, 113, 1, 0, 0, 0, 0, 179, 0, 95, 0, 113, 1, 0, 0, 0, 0, 179, 0, 95, 0, 113, 1, 0, 0, 0, 0, 179, 0, 95, 0, 113, 1, 0, 0, 0, 0, 179, 0, 95, 0, 113, 1, 0, 0, 0, 0, 97, 0, 99, 0, 0, 0, 0, 0, 0, 0, 115, 1, 113, 1, 0, 0, 117, 1, 113, 1, 0, 0, 0, 0, 119, 1, 113, 1, 0, 0, 113, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 1, 60, 1, 0, 0, 5, 4, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 0, 0, 147, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 93, 1, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 92, 1, 92, 1, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 91, 1, 91, 1, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 90, 1, 90, 1, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 89, 1, 89, 1, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 88, 1, 24, 1, 0, 0, 0, 0, 0, 0, 88, 1, 88, 1, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 183, 5, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 69, 0, 0, 0, 23, 0, 121, 1, 0, 0, 27, 0, 121, 1, 0, 0, 73, 0, 75, 0, 73, 0, 75, 0, 0, 0, 171, 0, 79, 0, 121, 1, 0, 0, 0, 0, 173, 0, 83, 0, 121, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 87, 0, 121, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 91, 0, 121, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 95, 0, 121, 1, 0, 0, 0, 0, 179, 0, 95, 0, 121, 1, 0, 0, 0, 0, 179, 0, 95, 0, 121, 1, 0, 0, 0, 0, 179, 0, 95, 0, 121, 1, 0, 0, 0, 0, 179, 0, 95, 0, 121, 1, 0, 0, 0, 0, 97, 0, 99, 0, 0, 0, 0, 0, 0, 0, 115, 1, 121, 1, 0, 0, 117, 1, 121, 1, 0, 0, 0, 0, 119, 1, 121, 1, 0, 0, 121, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 1, 61, 1, 0, 0, 5, 4, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 1, 0, 0, 147, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 1, 83, 1, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 82, 1, 82, 1, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 81, 1, 81, 1, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 80, 1, 80, 1, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 79, 1, 79, 1, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 78, 1, 11, 1, 0, 0, 0, 0, 0, 0, 78, 1, 78, 1, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 183, 5, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 0, 0, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 1, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 11, 0, 0, 0, 13, 0, 15, 0, 0, 0, 19, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 175, 5, 175, 5, 175, 5, 175, 5, 37, 0, 213, 1, 38, 0, 220, 1, 0, 0, 104, 4, 118, 4, 50, 4, 38, 0, 37, 0, 38, 0, 0, 0, 37, 0, 0, 0, 222, 1, 222, 1, 222, 1, 222, 1, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 81, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 0, 0, 0, 0, 0, 0, 68, 4, 0, 0, 0, 0, 225, 3, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 62, 4, 0, 0, 140, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 41, 4, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 33, 4, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 37, 4, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 66, 4, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 170, 4, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 3, 0, 0, 0, 0, 0, 0, 0, 0, 157, 4, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 40, 3, 0, 0, 0, 0, 153, 0, 0, 0, 222, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 1, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 11, 0, 0, 0, 13, 0, 15, 0, 0, 0, 19, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 172, 5, 172, 5, 172, 5, 172, 5, 37, 0, 213, 1, 38, 0, 220, 1, 0, 0, 104, 4, 118, 4, 50, 4, 38, 0, 37, 0, 38, 0, 0, 0, 37, 0, 0, 0, 222, 1, 222, 1, 222, 1, 222, 1, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 81, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 0, 0, 0, 0, 0, 0, 68, 4, 0, 0, 0, 0, 225, 3, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 62, 4, 0, 0, 140, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 41, 4, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 33, 4, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 37, 4, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 66, 4, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 170, 4, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 3, 0, 0, 0, 0, 0, 0, 0, 0, 157, 4, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 40, 3, 0, 0, 0, 0, 153, 0, 0, 0, 222, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 1, 7, 0, 0, 0, 9, 0, 0, 0, 0, 0, 11, 0, 0, 0, 13, 0, 15, 0, 0, 0, 19, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 31, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 205, 5, 205, 5, 205, 5, 205, 5, 37, 0, 213, 1, 38, 0, 220, 1, 0, 0, 104, 4, 118, 4, 50, 4, 38, 0, 37, 0, 38, 0, 0, 0, 37, 0, 0, 0, 222, 1, 222, 1, 222, 1, 222, 1, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 81, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 0, 0, 0, 0, 0, 0, 68, 4, 0, 0, 0, 0, 225, 3, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 62, 4, 0, 0, 140, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 41, 4, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 33, 4, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 37, 4, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 66, 4, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 170, 4, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 85, 4, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 3, 0, 0, 0, 0, 0, 0, 0, 0, 157, 4, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0, 0, 0, 40, 3, 0, 0, 0, 0, 153, 0, 0, 0, 222, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 1, 131, 1, 0, 0, 0, 0, 0, 0, 133, 1, 135, 1, 0, 0, 137, 1, 140, 1, 137, 1, 140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 1, 144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 1, 148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 154, 1, 156, 1, 158, 1, 160, 1, 0, 0, 162, 1, 164, 1, 0, 0, 0, 0, 166, 1, 168, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 132, 3, 239, 4, 0, 0, 0, 0, 165, 0, 166, 0, 111, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 242, 4, 0, 0, 0, 0, 104, 5, 102, 5, 253, 5, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 242, 4, 0, 0, 0, 0, 100, 5, 99, 5, 252, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 3, 246, 3, 245, 3, 243, 3, 72, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 242, 4, 0, 0, 0, 0, 93, 5, 87, 5, 251, 5, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 242, 4, 0, 0, 0, 0, 176, 4, 85, 5, 249, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 132, 3, 239, 4, 0, 0, 0, 0, 0, 0, 216, 4, 205, 4, 0, 0, 0, 0, 201, 4, 205, 4, 232, 2, 132, 3, 0, 0, 237, 4, 236, 4, 0, 0, 249, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 1, 131, 1, 0, 0, 137, 1, 140, 1, 133, 1, 135, 1, 0, 0, 0, 0, 0, 0, 137, 1, 140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 1, 144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 1, 148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 154, 1, 156, 1, 158, 1, 160, 1, 0, 0, 162, 1, 164, 1, 0, 0, 0, 0, 166, 1, 168, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 3, 51, 3, 195, 4, 0, 0, 0, 0, 165, 0, 166, 0, 111, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 200, 4, 0, 0, 0, 0, 104, 5, 102, 5, 253, 5, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 200, 4, 0, 0, 0, 0, 100, 5, 99, 5, 252, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 3, 64, 3, 65, 3, 72, 3, 206, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 200, 4, 0, 0, 0, 0, 93, 5, 87, 5, 251, 5, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 200, 4, 0, 0, 0, 0, 176, 4, 85, 5, 249, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 3, 51, 3, 195, 4, 0, 0, 0, 0, 0, 0, 216, 4, 205, 4, 0, 0, 0, 0, 201, 4, 205, 4, 244, 2, 51, 3, 0, 0, 237, 4, 236, 4, 0, 0, 249, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 23, 1, 23, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 221, 2, 0, 0, 0, 0, 0, 0, 81, 5, 81, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 184, 1, 184, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 45, 5, 0, 0, 0, 0, 0, 0, 88, 5, 88, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 29, 1, 29, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 47, 5, 0, 0, 0, 0, 0, 0, 88, 5, 88, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 255, 0, 255, 0, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 228, 4, 0, 0, 0, 0, 0, 0, 217, 4, 217, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 186, 1, 186, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 220, 2, 0, 0, 0, 0, 0, 0, 81, 5, 81, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 9, 1, 9, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 137, 3, 0, 0, 0, 0, 0, 0, 198, 4, 198, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 188, 1, 188, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 126, 2, 0, 0, 0, 0, 0, 0, 127, 5, 127, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 19, 1, 19, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 10, 5, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 190, 1, 190, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 136, 3, 0, 0, 0, 0, 0, 0, 198, 4, 198, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 215, 0, 215, 0, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 0, 0, 29, 5, 29, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 192, 1, 192, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 0, 0, 0, 0, 10, 5, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 3, 1, 3, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 127, 2, 0, 0, 0, 0, 0, 0, 127, 5, 127, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 13, 1, 13, 1, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 141, 4, 0, 0, 0, 0, 0, 0, 194, 4, 194, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 2, 176, 2, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 91, 1, 91, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 147, 3, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 4, 199, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 208, 1, 208, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 240, 2, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 5, 79, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 37, 1, 37, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 5, 11, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 87, 1, 87, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 249, 4, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 4, 215, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 210, 1, 210, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 49, 5, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 5, 89, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 107, 1, 107, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 129, 2, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 5, 125, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 212, 1, 212, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 5, 11, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 103, 1, 103, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 106, 4, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 5, 63, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 95, 1, 95, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 110, 1, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 5, 27, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 85, 1, 85, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 55, 5, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 5, 89, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 214, 1, 214, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 146, 3, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 4, 199, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 111, 1, 111, 1, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 242, 2, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 5, 79, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 1, 218, 1, 0, 0, 0, 0, 0, 0, 220, 1, 222, 1, 0, 0, 224, 1, 227, 1, 224, 1, 227, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 1, 231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 1, 235, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 1, 239, 1, 0, 0, 0, 0, 0, 0, 237, 1, 239, 1, 0, 0, 0, 0, 0, 0, 237, 1, 239, 1, 0, 0, 0, 0, 0, 0, 237, 1, 239, 1, 0, 0, 0, 0, 0, 0, 237, 1, 239, 1, 0, 0, 0, 0, 241, 1, 243, 1, 245, 1, 247, 1, 0, 0, 249, 1, 251, 1, 0, 0, 0, 0, 253, 1, 255, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 3, 203, 3, 108, 5, 0, 0, 0, 0, 149, 0, 150, 0, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 3, 203, 3, 108, 5, 0, 0, 0, 0, 181, 3, 173, 3, 101, 5, 0, 0, 0, 0, 0, 0, 0, 0, 203, 3, 203, 3, 108, 5, 0, 0, 0, 0, 170, 3, 169, 3, 94, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 3, 108, 5, 203, 3, 203, 3, 108, 5, 0, 0, 0, 0, 167, 3, 162, 3, 86, 5, 0, 0, 0, 0, 0, 0, 0, 0, 203, 3, 203, 3, 108, 5, 0, 0, 0, 0, 159, 3, 158, 3, 84, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 3, 203, 3, 108, 5, 0, 0, 0, 0, 0, 0, 148, 3, 149, 3, 0, 0, 0, 0, 150, 3, 149, 3, 201, 3, 203, 3, 0, 0, 61, 3, 60, 3, 0, 0, 225, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 1, 2, 1, 2, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 128, 2, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 5, 125, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 2, 119, 2, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 5, 2, 0, 0, 224, 1, 227, 1, 7, 2, 9, 2, 0, 0, 0, 0, 0, 0, 224, 1, 227, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 2, 13, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 2, 17, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 2, 21, 2, 0, 0, 0, 0, 0, 0, 19, 2, 21, 2, 0, 0, 0, 0, 0, 0, 19, 2, 21, 2, 0, 0, 0, 0, 0, 0, 19, 2, 21, 2, 0, 0, 0, 0, 0, 0, 19, 2, 21, 2, 0, 0, 0, 0, 23, 2, 25, 2, 27, 2, 29, 2, 0, 0, 31, 2, 33, 2, 0, 0, 0, 0, 35, 2, 37, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 3, 83, 3, 230, 4, 0, 0, 0, 0, 134, 0, 135, 0, 14, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 3, 83, 3, 230, 4, 0, 0, 0, 0, 16, 4, 15, 4, 69, 5, 0, 0, 0, 0, 0, 0, 0, 0, 83, 3, 83, 3, 230, 4, 0, 0, 0, 0, 14, 4, 13, 4, 70, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 3, 230, 4, 83, 3, 83, 3, 230, 4, 0, 0, 0, 0, 12, 4, 11, 4, 74, 5, 0, 0, 0, 0, 0, 0, 0, 0, 83, 3, 83, 3, 230, 4, 0, 0, 0, 0, 10, 4, 9, 4, 76, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 3, 83, 3, 230, 4, 0, 0, 0, 0, 0, 0, 57, 3, 58, 3, 0, 0, 0, 0, 59, 3, 58, 3, 84, 3, 83, 3, 0, 0, 154, 3, 153, 3, 0, 0, 211, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 39, 2, 39, 2, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 3, 202, 3, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 41, 2, 41, 2, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 3, 202, 3, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 43, 2, 43, 2, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 3, 202, 3, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 45, 2, 45, 2, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 3, 202, 3, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 47, 2, 47, 2, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 3, 189, 3, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 49, 2, 49, 2, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 3, 189, 3, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 51, 2, 51, 2, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 3, 189, 3, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 53, 2, 53, 2, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 3, 189, 3, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 207, 0, 0, 0, 0, 0, 0, 0, 172, 1, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 1, 219, 0, 0, 0, 0, 0, 176, 1, 223, 0, 178, 1, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 0, 0, 233, 0, 235, 0, 0, 0, 0, 0, 237, 0, 239, 0, 182, 1, 243, 0, 0, 0, 245, 0, 247, 0, 0, 0, 0, 0, 249, 0, 251, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 113, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 142, 2, 141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 140, 2, 139, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 3, 202, 3, 0, 0, 41, 3, 28, 3, 0, 0, 27, 3, 32, 3, 26, 3, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 35, 3, 39, 3, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 138, 2, 137, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 2, 22, 2, 0, 0, 0, 0, 0, 0, 136, 2, 135, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 2, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 179, 2, 175, 2, 0, 0, 0, 0, 179, 2, 175, 2, 25, 2, 24, 2, 0, 0, 206, 2, 133, 2, 0, 0, 198, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 33, 1, 0, 0, 0, 0, 0, 0, 196, 1, 41, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 45, 1, 0, 0, 0, 0, 200, 1, 49, 1, 202, 1, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 57, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 0, 0, 59, 1, 61, 1, 0, 0, 0, 0, 63, 1, 65, 1, 206, 1, 69, 1, 0, 0, 71, 1, 73, 1, 0, 0, 0, 0, 75, 1, 77, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 247, 2, 19, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 20, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 3, 189, 3, 0, 0, 0, 0, 0, 0, 165, 3, 164, 3, 0, 0, 151, 3, 0, 0, 145, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 3, 142, 3, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 22, 3, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 2, 212, 2, 0, 0, 0, 0, 0, 0, 2, 3, 249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 2, 215, 2, 0, 0, 0, 0, 0, 0, 0, 0, 239, 2, 15, 3, 0, 0, 0, 0, 239, 2, 15, 3, 216, 2, 215, 2, 0, 0, 14, 3, 254, 2, 0, 0, 207, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 1, 113, 1, 0, 0, 19, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 29, 0, 31, 0, 29, 0, 31, 0, 0, 0, 189, 0, 35, 0, 0, 0, 0, 0, 0, 0, 191, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 53, 0, 55, 0, 0, 0, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 4, 0, 0, 0, 0, 225, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 4, 0, 0, 140, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 4, 165, 4, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 166, 4, 166, 4, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 167, 4, 167, 4, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 172, 4, 172, 4, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 173, 4, 173, 4, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 109, 4, 22, 4, 0, 0, 0, 0, 0, 0, 109, 4, 109, 4, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 183, 5, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 1, 121, 1, 0, 0, 19, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 29, 0, 31, 0, 29, 0, 31, 0, 0, 0, 189, 0, 35, 0, 0, 0, 0, 0, 0, 0, 191, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 197, 0, 51, 0, 0, 0, 0, 0, 0, 0, 53, 0, 55, 0, 0, 0, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 4, 0, 0, 0, 0, 225, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 4, 0, 0, 140, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 4, 35, 4, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 38, 4, 38, 4, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 40, 4, 40, 4, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 44, 4, 44, 4, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 45, 4, 45, 4, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 49, 4, 252, 3, 0, 0, 0, 0, 0, 0, 49, 4, 49, 4, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 183, 5, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 113, 1, 0, 0, 23, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 125, 0, 127, 0, 125, 0, 127, 0, 0, 0, 55, 2, 131, 0, 0, 0, 0, 0, 0, 0, 57, 2, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 2, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 2, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 149, 0, 151, 0, 0, 0, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 113, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 4, 0, 0, 0, 0, 25, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 4, 0, 0, 118, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 4, 183, 4, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 182, 4, 182, 4, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 181, 4, 181, 4, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 179, 4, 179, 4, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 110, 5, 110, 5, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 211, 4, 156, 4, 0, 0, 0, 0, 0, 0, 211, 4, 211, 4, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 183, 5, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 121, 1, 0, 0, 23, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 125, 0, 127, 0, 125, 0, 127, 0, 0, 0, 55, 2, 131, 0, 0, 0, 0, 0, 0, 0, 57, 2, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 2, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 2, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 63, 2, 147, 0, 0, 0, 0, 0, 0, 0, 149, 0, 151, 0, 0, 0, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 4, 0, 0, 0, 0, 25, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 4, 0, 0, 118, 0, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 4, 204, 4, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 202, 4, 202, 4, 0, 0, 223, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 190, 4, 190, 4, 0, 0, 221, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 189, 4, 189, 4, 0, 0, 228, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 186, 4, 186, 4, 0, 0, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 0, 0, 0, 0, 180, 4, 145, 4, 0, 0, 0, 0, 0, 0, 180, 4, 180, 4, 0, 0, 0, 0, 0, 0, 91, 5, 0, 0, 0, 0, 183, 5, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 2, 131, 1, 0, 0, 140, 1, 140, 1, 67, 2, 135, 1, 0, 0, 0, 0, 0, 0, 140, 1, 140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 2, 144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 2, 148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 154, 1, 156, 1, 73, 2, 160, 1, 0, 0, 162, 1, 164, 1, 0, 0, 0, 0, 166, 1, 168, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 3, 51, 3, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 0, 0, 0, 0, 0, 0, 104, 5, 102, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 0, 0, 0, 0, 0, 0, 100, 5, 99, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 3, 64, 3, 65, 3, 72, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 0, 0, 0, 0, 0, 0, 93, 5, 87, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 0, 0, 0, 0, 0, 0, 176, 4, 85, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 3, 51, 3, 0, 0, 0, 0, 0, 0, 0, 0, 201, 4, 205, 4, 0, 0, 0, 0, 201, 4, 205, 4, 46, 3, 51, 3, 0, 0, 237, 4, 236, 4, 0, 0, 239, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 2, 131, 1, 0, 0, 75, 2, 75, 2, 67, 2, 135, 1, 0, 0, 0, 0, 0, 0, 75, 2, 75, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 2, 144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 2, 148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 154, 1, 156, 1, 73, 2, 160, 1, 0, 0, 162, 1, 164, 1, 0, 0, 0, 0, 166, 1, 168, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 3, 51, 3, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 0, 0, 0, 0, 0, 0, 104, 5, 102, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 0, 0, 0, 0, 0, 0, 100, 5, 99, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 3, 77, 3, 81, 3, 82, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 0, 0, 0, 0, 0, 0, 93, 5, 87, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 3, 54, 3, 0, 0, 0, 0, 0, 0, 176, 4, 85, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 3, 51, 3, 0, 0, 0, 0, 0, 0, 0, 0, 201, 4, 205, 4, 0, 0, 0, 0, 201, 4, 205, 4, 46, 3, 51, 3, 0, 0, 237, 4, 236, 4, 0, 0, 239, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 2, 131, 1, 0, 0, 0, 0, 0, 0, 67, 2, 135, 1, 0, 0, 140, 1, 140, 1, 140, 1, 140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 2, 144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 2, 148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 154, 1, 156, 1, 73, 2, 160, 1, 0, 0, 162, 1, 164, 1, 0, 0, 0, 0, 166, 1, 168, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 132, 3, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 0, 0, 0, 0, 0, 0, 104, 5, 102, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 0, 0, 0, 0, 0, 0, 100, 5, 99, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 3, 246, 3, 245, 3, 243, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 0, 0, 0, 0, 0, 0, 93, 5, 87, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 0, 0, 0, 0, 0, 0, 176, 4, 85, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 132, 3, 0, 0, 0, 0, 0, 0, 0, 0, 201, 4, 205, 4, 0, 0, 0, 0, 201, 4, 205, 4, 20, 4, 132, 3, 0, 0, 237, 4, 236, 4, 0, 0, 239, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 2, 131, 1, 0, 0, 0, 0, 0, 0, 67, 2, 135, 1, 0, 0, 75, 2, 75, 2, 75, 2, 75, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 2, 144, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 2, 148, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 0, 0, 150, 1, 152, 1, 0, 0, 0, 0, 154, 1, 156, 1, 73, 2, 160, 1, 0, 0, 162, 1, 164, 1, 0, 0, 0, 0, 166, 1, 168, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 132, 3, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 0, 0, 0, 0, 0, 0, 104, 5, 102, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 0, 0, 0, 0, 0, 0, 100, 5, 99, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 3, 208, 3, 207, 3, 204, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 0, 0, 0, 0, 0, 0, 93, 5, 87, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 23, 4, 0, 0, 0, 0, 0, 0, 176, 4, 85, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 132, 3, 0, 0, 0, 0, 0, 0, 0, 0, 201, 4, 205, 4, 0, 0, 0, 0, 201, 4, 205, 4, 20, 4, 132, 3, 0, 0, 237, 4, 236, 4, 0, 0, 239, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 152, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 236, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 235, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 183, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 130, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 119, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 162, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 131, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 135, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 101, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 93, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 155, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 138, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 137, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 140, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 167, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 30, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 31, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 204, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 208, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 132, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 187, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 208, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 185, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 206, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 165, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 168, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 163, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 164, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 166, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 150, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 160, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 161, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 11, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 117, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 70, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 83, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 78, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 211, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 240, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 207, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 238, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 148, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 149, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 173, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 25, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 117, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 72, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 242, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 239, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 196, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 14, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 146, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 148, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 155, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 167, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 159, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 149, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 161, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 147, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 81, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 228, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 112, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 127, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 138, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 137, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 74, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 141, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 135, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 230, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 221, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 226, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 48, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 47, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 223, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 222, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 219, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 229, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 151, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 186, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 148, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 184, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 46, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 238, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 59, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 55, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 249, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 152, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 147, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 110, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 186, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 129, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 106, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 130, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 129, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 250, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 242, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 129, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 152, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 200, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 162, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 130, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 107, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 109, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 210, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 215, 0, 0, 0, 0, 0, 1, 1, 217, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 215, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 188, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 210, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 229, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 221, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 219, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 218, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 201, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 202, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 45, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 220, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 126, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 136, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 13, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 240, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 49, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 146, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 226, 0, 0, 0, 0, 0, 1, 1, 228, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 226, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 172, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 178, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 19, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 24, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 139, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 140, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 141, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 19, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 17, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 128, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 160, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 47, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 48, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 49, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 50, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 13, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 11, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 233, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 234, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 205, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 204, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 204, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 205, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 203, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 202, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 202, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 203, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 236, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 105, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 192, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 228, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 216, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 164, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 224, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 176, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 18, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 223, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 227, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 134, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 136, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 134, 0, 0, 0, 0, 0, 1, 1, 136, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 134, 0, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 137, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 1, 1, 137, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 36, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 23, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 134, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 22, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 134, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 136, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 134, 0, 0, 0, 0, 0, 1, 2, 136, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 135, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 137, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 135, 0, 0, 0, 0, 0, 1, 2, 137, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 199, 5, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 134, 0, 0, 0, 0, 0, 0, 0, 160, 5, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 0, 0, 160, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 184, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 144, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 165, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 148, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 166, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 173, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 233, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 77, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 46, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 237, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 236, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 42, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 136, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 30, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 15, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 52, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 239, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 23, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 29, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 12, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 231, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 237, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 83, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 145, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 146, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 98, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 231, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 241, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 126, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 125, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 184, 3, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 144, 3, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 165, 5, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 148, 1, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 166, 5, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 0, 0, 173, 5, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 28, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 27, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 84, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 131, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 57, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 113, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 169, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 128, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 96, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 12, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 134, 0, 0, 0, 0, 0, 0, 0, 232, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 0, 0, 232, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 191, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 244, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 134, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 206, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 134, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 206, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 22, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 20, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 225, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 128, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 127, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 210, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 35, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 21, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 228, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 180, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 179, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 196, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 140, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 18, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 217, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 216, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 215, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 222, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 37, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 14, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 26, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 34, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 28, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 119, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 121, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 120, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 123, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 122, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 151, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 173, 0, 0, 0, 5, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 131, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 248, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 250, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 17, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 188, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 189, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 19, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 16, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 7, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 160, 0, 0, 0, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 249, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 251, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 237, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 239, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 236, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 238, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 161, 0, 0, 0, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 255, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 20, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 249, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 251, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 162, 0, 0, 0, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 248, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 250, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 237, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 239, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 236, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 238, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 8, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 200, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 201, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 255, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 4, 248, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 139, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 133, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 251, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 250, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 188, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 159, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 162, 0, 0, 0, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 5, 237, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 5, 236, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 161, 0, 0, 0, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 4, 249, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 4, 237, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 4, 236, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 160, 0, 0, 0, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 156, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 160, 0, 0, 0, 10, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 161, 0, 0, 0, 10, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 169, 0, 0, 0, 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 170, 0, 0, 0, 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 155, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 146, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 145, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 132, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 158, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 157, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 142, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 143, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 147, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 200, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 188, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 177, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 176, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 162, 0, 0, 0, 10, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 156, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 155, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 146, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 145, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 244, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 232, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 191, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 179, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 175, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 154, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 141, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 144, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 171, 0, 0, 0, 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 243, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 231, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 190, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 178, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 174, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 153, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 140, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 163, 0, 0, 0, 4, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 164, 0, 0, 0, 4, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 166, 0, 0, 0, 5, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 167, 0, 0, 0, 5, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 168, 0, 0, 0, 5, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 165, 0, 0, 0, 4, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 196, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 195, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 184, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 183, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 177, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 176, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 244, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 243, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 232, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 231, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 191, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 190, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 179, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 178, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 175, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 174, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 154, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 152, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 141, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 13, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 12, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 39, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 38, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 144, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 40, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 41, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 180, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 138, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 27, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 42, 6, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 244, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 54, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 56, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 170, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 99, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 103, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 227, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 76, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 69, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 132, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 166, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 72, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 69, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 254, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 253, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 234, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 101, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 100, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 122, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 105, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 71, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 73, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 67, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 133, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 105, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 85, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 80, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 70, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 50, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 51, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 219, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 220, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 55, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 57, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 124, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 24, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 93, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 92, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 120, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 107, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 44, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 42, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 27, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 41, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 134, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 129, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 186, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 67, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 66, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 165, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 163, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 202, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 212, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 96, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 98, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 18, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 248, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 43, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 53, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 126, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 35, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 33, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 224, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 91, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 94, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 125, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 109, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 108, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 44, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 43, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 65, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 249, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 58, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 198, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 32, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 30, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 59, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 222, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 59, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 60, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 123, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 29, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 89, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 114, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 40, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 38, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 90, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 109, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 37, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 110, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 255, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 77, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 75, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 78, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 86, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 90, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 45, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 46, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 218, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 206, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 74, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 166, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 200, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 58, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 86, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 88, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 111, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 61, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 40, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 108, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 110, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 138, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 104, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 73, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 252, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 242, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 241, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 213, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 103, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 232, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 38, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 85, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 126, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 39, 5, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 241, 0, 0, 0, 0, 0, 0, 0, 234, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 241, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 226, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 240, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 220, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 230, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 228, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 231, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 242, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 245, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 133, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 102, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 125, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 103, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 79, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 127, 4, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 212, 0, 0, 0, 0, 0, 1, 1, 214, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 212, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 238, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 242, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 252, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 254, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 233, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 255, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 172, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 25, 1, 0, 0, 0, 0, 0, 0, 236, 5, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 25, 1, 0, 0, 0, 0, 0, 0, 235, 5, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 25, 1, 0, 0, 0, 0, 0, 0, 183, 2, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 25, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 217, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 214, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 224, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 118, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 246, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 35, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 121, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 76, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 78, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 248, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 21, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 122, 2, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 34, 1, 0, 0, 0, 0, 0, 0, 10, 2, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 34, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 15, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 60, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 96, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 214, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 120, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 91, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 177, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 26, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 129, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 119, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 121, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 168, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 213, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 97, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 187, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 193, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 36, 1, 0, 0, 0, 0, 0, 0, 31, 2, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 36, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 73, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 67, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 74, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 52, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 26, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 211, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 12, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 13, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 34, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 28, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 212, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 32, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 71, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 191, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 90, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 87, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 196, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 89, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 107, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 212, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 241, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 102, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 254, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 95, 2, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 210, 0, 0, 0, 0, 0, 1, 1, 214, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 210, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 70, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 79, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 251, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 200, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 80, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 252, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 78, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 39, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 202, 2, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 33, 1, 0, 0, 0, 0, 0, 0, 244, 1, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 33, 1, 0, 0, 0, 0, 0, 0, 97, 2, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 33, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 77, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 34, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 31, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 254, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 253, 0, 0, 0, 0, 0, 0, 0, 104, 2, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 253, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 106, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 3, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 200, 0, 0, 0, 0, 0, 1, 1, 201, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 250, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 203, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 248, 0, 0, 0, 0, 0, 1, 2, 250, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 236, 0, 0, 0, 0, 0, 1, 2, 238, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 188, 0, 0, 0, 0, 0, 1, 1, 189, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 66, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 10, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 11, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 26, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 26, 1, 0, 0, 0, 0, 0, 0, 149, 2, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 75, 4, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 35, 1, 0, 0, 0, 0, 0, 0, 82, 2, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 35, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 76, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 14, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 3, 236, 0, 0, 0, 0, 0, 1, 3, 238, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 15, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 3, 248, 0, 0, 0, 0, 0, 1, 3, 250, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 5, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 60, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 4, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 4, 1, 0, 0, 0, 0, 1, 1, 6, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 4, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 5, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 205, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 204, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 198, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 128, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 203, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 197, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 31, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 31, 1, 0, 0, 0, 0, 0, 0, 78, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 194, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 209, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 11, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 30, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 30, 1, 0, 0, 0, 0, 0, 0, 79, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 248, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 128, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 149, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 202, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 211, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 124, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 242, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 118, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 17, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 92, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 227, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 213, 0, 0, 0, 6, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 212, 0, 0, 0, 6, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 213, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 127, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 212, 0, 0, 0, 7, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 214, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 27, 1, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 27, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 213, 0, 0, 0, 7, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 126, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 215, 0, 0, 0, 11, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 216, 0, 0, 0, 11, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 226, 0, 0, 0, 5, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 229, 0, 0, 0, 0, 0, 1, 1, 230, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 229, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 227, 0, 0, 0, 5, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 218, 0, 0, 0, 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 220, 0, 0, 0, 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 219, 0, 0, 0, 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 221, 0, 0, 0, 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 156, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 243, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 161, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 247, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 224, 0, 0, 0, 5, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 32, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 32, 1, 0, 0, 0, 0, 0, 0, 174, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 114, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 253, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 115, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 240, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 223, 0, 0, 0, 5, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 211, 0, 0, 0, 7, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 210, 0, 0, 0, 7, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 178, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 142, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 211, 0, 0, 0, 6, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 210, 0, 0, 0, 6, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 156, 5, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 253, 0, 0, 0, 0, 0, 0, 0, 156, 3, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 106, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 107, 5, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 241, 0, 0, 0, 0, 0, 0, 0, 161, 3, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 157, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 206, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 158, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 163, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 157, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 177, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 160, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 111, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 176, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 144, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 207, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 86, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 88, 4, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 32, 1, 0, 0, 0, 0, 0, 0, 175, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 208, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 192, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 194, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 205, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 197, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 206, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 198, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 79, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 80, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 71, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 159, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 226, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 163, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 227, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 168, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 18, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 98, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 163, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 150, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 155, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 154, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 82, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 80, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 115, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 114, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 185, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 47, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 48, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 115, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 147, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 154, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 114, 0, 0, 0, 8, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 197, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 245, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 233, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 192, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 180, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 189, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 201, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 142, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 6, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 6, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 233, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 245, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 112, 0, 0, 0, 8, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 94, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 108, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 39, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 110, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 180, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 192, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 29, 1, 0, 0, 0, 0, 0, 0, 147, 4, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 29, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 117, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 174, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 23, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 175, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 20, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 116, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 234, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 235, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 150, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 116, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 96, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 97, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 149, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 217, 0, 0, 0, 11, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 148, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 123, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 115, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 228, 0, 0, 0, 5, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 214, 0, 0, 0, 7, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 214, 0, 0, 0, 6, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 222, 0, 0, 0, 9, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 221, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 222, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 123, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 209, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 225, 0, 0, 0, 5, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 251, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 253, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 14, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 161, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 147, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 124, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 182, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 247, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 235, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 194, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 182, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 21, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 94, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 254, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 98, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 252, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 240, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 199, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 187, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 117, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 17, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 106, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 240, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 214, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 195, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 252, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 246, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 9, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 168, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 234, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 13, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 193, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 110, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 109, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 136, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 108, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 107, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 3, 106, 0, 0, 0, 8, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 212, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 213, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 181, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 236, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 209, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 158, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 225, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 223, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 153, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 150, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 176, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 134, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 106, 0, 0, 0, 8, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 193, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 181, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 87, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 82, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 186, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 234, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 198, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 116, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 113, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 243, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 42, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 139, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 164, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 34, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 193, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 246, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 18, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 247, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 235, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 194, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 53, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 45, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 148, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 151, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 187, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 193, 4, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 229, 5, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 138, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 154, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 150, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 190, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 156, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 214, 1, 0, 0, 0, 0] };
  }
});

// ../../../resources/editor/tools/yaml/yaml-intelligence-resources.json
var require_yaml_intelligence_resources = __commonJS({
  "../../../resources/editor/tools/yaml/yaml-intelligence-resources.json"(exports, module) {
    module.exports = {
      "schema/cell-attributes.yml": [
        {
          name: "label",
          schema: "string",
          description: {
            short: "Unique label for code cell",
            long: "Unique label for code cell. Used when other code needs to refer to the cell \n(e.g. for cross references `fig-samples` or `tbl-summary`)\n"
          }
        },
        {
          name: "classes",
          schema: "string",
          description: "Classes to apply to cell container"
        },
        {
          name: "tags",
          tags: {
            engine: "jupyter"
          },
          schema: {
            arrayOf: "string"
          },
          description: "Array of tags for notebook cell"
        },
        {
          name: "id",
          tags: {
            engine: "jupyter"
          },
          schema: "string",
          description: {
            short: "Notebook cell identifier",
            long: "Notebook cell identifier. Note that if there is no cell `id` then `label` \nwill be used as the cell `id` if it is present.\nSee <https://jupyter.org/enhancement-proposals/62-cell-id/cell-id.html>\nfor additional details on cell ids.\n"
          }
        }
      ],
      "schema/cell-cache.yml": [
        {
          name: "cache",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: false,
          description: {
            short: "Whether to cache a code chunk.",
            long: "Whether to cache a code chunk. When evaluating\ncode chunks for the second time, the cached chunks are skipped (unless they\nhave been modified), but the objects created in these chunks are loaded from\npreviously saved databases (`.rdb` and `.rdx` files), and these files are\nsaved when a chunk is evaluated for the first time, or when cached files are\nnot found (e.g., you may have removed them by hand). Note that the filename\nconsists of the chunk label with an MD5 digest of the R code and chunk\noptions of the code chunk, which means any changes in the chunk will produce\na different MD5 digest, and hence invalidate the cache.\n"
          }
        },
        {
          name: "cache-path",
          hidden: true,
          tags: {
            engine: "knitr"
          },
          schema: "path",
          description: "A prefix to be used to generate the paths of cache files"
        },
        {
          name: "cache-vars",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: {
            short: "Variable names to be saved in the cache database.",
            long: "Variable names to be saved in\nthe cache database. By default, all variables created in the current chunks\nare identified and saved, but you may want to manually specify the variables\nto be saved, because the automatic detection of variables may not be robust,\nor you may want to save only a subset of variables.\n"
          }
        },
        {
          name: "cache-globals",
          tags: {
            engine: "knitr"
          },
          schema: "string",
          description: {
            short: "Variables names that are not created from the current chunk",
            long: "Variables names that are not created from the current chunk.\n\nThis option is mainly for `autodep: true` to work more precisely---a chunk\n`B` depends on chunk `A` when any of `B`'s global variables are `A`'s local \nvariables. In case the automatic detection of global variables in a chunk \nfails, you may manually specify the names of global variables via this option.\nIn addition, `cache-globals: false` means detecting all variables in a code\nchunk, no matter if they are global or local variables.\n"
          }
        },
        {
          name: "cache-lazy",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: true,
          description: {
            short: "Whether to `lazyLoad()` or directly `load()` objects",
            long: "Whether to `lazyLoad()` or directly `load()` objects. For very large objects, \nlazyloading may not work, so `cache-lazy: false` may be desirable (see\n[#572](https://github.com/yihui/knitr/issues/572)).\n"
          }
        },
        {
          name: "cache-rebuild",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: false,
          description: "Force rebuild of cache for chunk"
        },
        {
          name: "cache-comments",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: true,
          description: "Prevent comment changes from invalidating the cache for a chunk"
        },
        {
          name: "dependson",
          tags: {
            engine: "knitr"
          },
          schema: {
            anyOf: [
              {
                maybeArrayOf: "string"
              },
              {
                maybeArrayOf: "number"
              }
            ]
          },
          description: "Explicitly specify cache dependencies for this chunk (one or more chunk labels)\n"
        },
        {
          name: "autodep",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: false,
          description: "Detect cache dependencies automatically via usage of global variables"
        }
      ],
      "schema/cell-codeoutput.yml": [
        {
          name: "eval",
          tags: {
            contexts: [
              "document-execute"
            ],
            "execute-only": true
          },
          schema: "boolean",
          default: true,
          description: {
            short: "Evaluate code cells (if `false` just echos the code into output).",
            long: "Evaluate code cells (if `false` just echos the code into output).\n\n- `true` (default): evaluate code cell\n- `false`: don't evaluate code cell\n- `[...]`: A list of positive or negative line numbers to selectively include or exclude lines \n  (explicit inclusion/excusion of lines is available only when using the knitr engine)\n"
          }
        },
        {
          name: "echo",
          tags: {
            contexts: [
              "document-execute"
            ],
            "execute-only": true
          },
          schema: {
            anyOf: [
              "boolean",
              {
                enum: [
                  "fenced"
                ]
              }
            ],
            errorDescription: "be `true`, `false`, or `fenced`"
          },
          description: {
            short: "Include cell source code in rendered output.",
            long: "Include cell source code in rendered output.\n\n- `true` (default): include source code in output\n- `false`: do not include source code in output\n- `fenced`: in addition to echoing, include the cell delimiter as part of the output.\n- `[...]`: A list of positive or negative line numbers to selectively include or exclude lines\n  (explicit inclusion/excusion of lines is available only when using the knitr engine)\n"
          }
        },
        {
          name: "code-fold",
          tags: {
            contexts: [
              "document-code"
            ],
            formats: [
              "$html-all"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              {
                enum: [
                  "show"
                ]
              }
            ]
          },
          default: false,
          description: {
            short: "Collapse code into an HTML `<details>` tag so the user can display it on-demand.",
            long: "Collapse code into an HTML `<details>` tag so the user can display it on-demand.\n\n- `true`: collapse code\n- `false` (default): do not collapse code\n- `show`: use the `<details>` tag, but show the expanded code initially.\n"
          }
        },
        {
          name: "code-summary",
          tags: {
            contexts: [
              "document-code"
            ],
            formats: [
              "$html-all"
            ]
          },
          schema: "string",
          default: "Code",
          description: "Summary text to use for code blocks collapsed using `code-fold`"
        },
        {
          name: "code-overflow",
          tags: {
            contexts: [
              "document-code"
            ],
            formats: [
              "$html-all"
            ]
          },
          schema: {
            enum: [
              "scroll",
              "wrap"
            ]
          },
          default: "scroll",
          description: {
            short: "Choose whether to `scroll` or `wrap` when code lines are too wide for their container.",
            long: "Choose how to handle code overflow, when code lines are too wide for their container. One of:\n\n- `scroll`\n- `wrap`\n"
          }
        },
        {
          name: "code-line-numbers",
          tags: {
            contexts: [
              "document-code"
            ],
            formats: [
              "$html-all",
              "docx",
              "ms",
              "$pdf-all"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              "string"
            ],
            tags: {
              doNotNarrowError: true
            },
            errorDescription: "be `true`, `false`, or a string specifying the lines to highlight"
          },
          default: false,
          description: {
            short: "Include line numbers in code block output (`true` or `false`)",
            long: "Include line numbers in code block output (`true` or `false`).\n\nFor revealjs output only, you can also specify a string to highlight\nspecific lines (and/or animate between sets of highlighted lines).\n\n* Sets of lines are denoted with commas:\n  * `3,4,5`\n  * `1,10,12`\n* Ranges can be denoted with dashes and combined with commas:\n  * `1-3,5` \n  * `5-10,12,14`\n* Finally, animation steps are separated by `|`:\n  * `1-3|1-3,5` first shows `1-3`, then `1-3,5`\n  * `|5|5-10,12` first shows no numbering, then 5, then lines 5-10\n    and 12\n"
          }
        },
        {
          name: "lst-label",
          schema: "string",
          description: "Unique label for code listing (used in cross references)"
        },
        {
          name: "lst-cap",
          schema: "string",
          description: "Caption for code listing"
        },
        {
          name: "tidy",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: false,
          description: "Whether to reformat R code."
        },
        {
          name: "tidy-opts",
          tags: {
            engine: "knitr"
          },
          schema: {
            arrayOf: "string"
          },
          description: "List of options to pass to `tidy` handler"
        },
        {
          name: "collapse",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: false,
          description: "Collapse all the source and output blocks from one code chunk into a single block\n"
        },
        {
          name: "prompt",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: false,
          description: {
            short: "Whether to add the prompt characters in R code.",
            long: "Whether to add the prompt characters in R\ncode. See `prompt` and `continue` on the help page `?base::options`. Note\nthat adding prompts can make it difficult for readers to copy R code from\nthe output, so `prompt: false` may be a better choice. This option may not\nwork well when the `engine` is not `R`\n([#1274](https://github.com/yihui/knitr/issues/1274)).\n"
          }
        },
        {
          name: "highlight",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: false,
          hidden: true,
          description: "Whether to syntax highlight the source code"
        },
        {
          name: "class-source",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Class name(s) for source code blocks"
        },
        {
          name: "attr-source",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Attribute(s) for source code blocks"
        }
      ],
      "schema/cell-figure.yml": [
        {
          name: "fig-width",
          tags: {
            engine: "knitr"
          },
          schema: "number",
          description: "Default width for figures"
        },
        {
          name: "fig-height",
          tags: {
            engine: "knitr"
          },
          schema: "number",
          description: "Default height for figures"
        },
        {
          name: "fig-cap",
          schema: {
            maybeArrayOf: "string"
          },
          description: "Figure caption"
        },
        {
          name: "fig-subcap",
          schema: {
            anyOf: [
              {
                enum: [
                  true
                ]
              },
              {
                maybeArrayOf: "string"
              }
            ]
          },
          description: "Figure subcaptions"
        },
        {
          name: "fig-link",
          schema: {
            maybeArrayOf: "string"
          },
          description: "Hyperlink target for the figure"
        },
        {
          name: "fig-align",
          tags: {
            contexts: [
              "document-figures"
            ],
            formats: [
              "docx",
              "rtf",
              "$odt-all",
              "$pdf-all",
              "$html-all"
            ]
          },
          schema: {
            maybeArrayOf: {
              enum: [
                "default",
                "left",
                "right",
                "center"
              ]
            }
          },
          default: "default",
          description: "Figure horizontal alignment (`default`, `left`, `right`, or `center`)"
        },
        {
          name: "fig-alt",
          tags: {
            formats: [
              "$html-all"
            ]
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Alternative text to be used in the `alt` attribute of HTML images.\n"
        },
        {
          name: "fig-env",
          tags: {
            formats: [
              "$pdf-all"
            ],
            contexts: [
              "document-figures"
            ]
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "LaTeX environment for figure output"
        },
        {
          name: "fig-pos",
          tags: {
            formats: [
              "$pdf-all"
            ],
            contexts: [
              "document-figures"
            ]
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: {
            short: "LaTeX figure position arrangement to be used in `\\begin{figure}[]`.",
            long: 'LaTeX figure position arrangement to be used in `\\begin{figure}[]`.\n\nComputational figure output that is accompanied by the code \nthat produced it is given a default value of `fig-pos="H"` (so \nthat the code and figure are not inordinately separated).\n'
          }
        },
        {
          name: "fig-scap",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: {
            short: "A short caption (only used in LaTeX output)",
            long: "A short caption (only used in LaTeX output). A short caption is inserted in `\\caption[]`, \nand usually displayed in the \u201CList of Figures\u201D of a PDF document.\n"
          }
        },
        {
          name: "fig-format",
          tags: {
            engine: "knitr"
          },
          schema: {
            enum: [
              "retina",
              "png",
              "jpeg",
              "svg",
              "pdf"
            ]
          },
          description: "Default output format for figures (`retina`, `png`, `jpeg`, `svg`, or `pdf`)"
        },
        {
          name: "fig-dpi",
          tags: {
            engine: "knitr"
          },
          schema: "number",
          description: "Default DPI for figures"
        },
        {
          name: "fig-asp",
          tags: {
            engine: "knitr"
          },
          schema: "number",
          description: "The aspect ratio of the plot, i.e., the ratio of height/width. When `fig-asp` is specified, the height of a plot \n(the option `fig-height`) is calculated from `fig-width * fig-asp`.\n"
        },
        {
          name: "out-width",
          tags: {
            engine: "knitr"
          },
          schema: {
            anyOf: [
              "string",
              {
                schema: {
                  null: {
                    completions: []
                  }
                }
              }
            ]
          },
          description: {
            short: "Width of plot in the output document",
            long: "Width of the plot in the output document, which can be different from its physical `fig-width`,\ni.e., plots can be scaled in the output document.\nWhen used without a unit, the unit is assumed to be pixels. However, any of the following unit \nidentifiers can be used: px, cm, mm, in, inch and %, for example, `3in`, `8cm`, `300px` or `50%`.\n"
          }
        },
        {
          name: "out-height",
          tags: {
            engine: "knitr"
          },
          schema: "string",
          description: {
            short: "Height of plot in the output document",
            long: "Height of the plot in the output document, which can be different from its physical `fig-height`, \ni.e., plots can be scaled in the output document.\nDepending on the output format, this option can take special values.\nFor example, for LaTeX output, it can be `3in`, or `8cm`;\nfor HTML, it can be `300px`.\n"
          }
        },
        {
          name: "fig-keep",
          tags: {
            engine: "knitr"
          },
          schema: {
            anyOf: [
              {
                enum: [
                  "high",
                  "none",
                  "all",
                  "first",
                  "last"
                ]
              },
              {
                maybeArrayOf: "number"
              }
            ]
          },
          default: "high",
          description: {
            short: "How plots in chunks should be kept.",
            long: "How plots in chunks should be kept. Possible values are as follows:\n\n-   `high`: Only keep high-level plots (merge low-level changes into\n    high-level plots).\n-   `none`: Discard all plots.\n-   `all`: Keep all plots (low-level plot changes may produce new plots).\n-   `first`: Only keep the first plot.\n-   `last`: Only keep the last plot.\n-   A numeric vector: In this case, the values are indices of (low-level) plots\n    to keep.\n"
          }
        },
        {
          name: "fig-show",
          tags: {
            engine: "knitr"
          },
          schema: {
            enum: [
              "asis",
              "hold",
              "animate",
              "hide"
            ]
          },
          default: "asis",
          description: {
            short: "How to show/arrange the plots",
            long: "How to show/arrange the plots. Possible values are as follows:\n\n-   `asis`: Show plots exactly in places where they were generated (as if\n    the code were run in an R terminal).\n-   `hold`: Hold all plots and output them at the end of a code chunk.\n-   `animate`: Concatenate all plots into an animation if there are multiple\n    plots in a chunk.\n-   `hide`: Generate plot files but hide them in the output document.\n"
          }
        },
        {
          name: "out-extra",
          tags: {
            engine: "knitr"
          },
          schema: "string",
          description: "Additional raw LaTeX or HTML options to be applied to figures"
        },
        {
          name: "external",
          tags: {
            engine: "knitr",
            formats: [
              "$pdf-all"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Externalize tikz graphics (pre-compile to PDF)"
        },
        {
          name: "sanitize",
          tags: {
            engine: "knitr",
            formats: [
              "$pdf-all"
            ]
          },
          schema: "boolean",
          default: false,
          description: "sanitize tikz graphics (escape special LaTeX characters)."
        },
        {
          name: "interval",
          tags: {
            engine: "knitr"
          },
          schema: "number",
          default: 1,
          description: "Time interval (number of seconds) between animation frames."
        },
        {
          name: "aniopts",
          tags: {
            engine: "knitr"
          },
          schema: "string",
          default: "controls, loop",
          description: {
            short: "Extra options for animations",
            long: "Extra options for animations; see the documentation of the LaTeX [**animate**\npackage.](http://ctan.org/pkg/animate)\n"
          }
        },
        {
          name: "animation-hook",
          tags: {
            engine: "knitr"
          },
          schema: {
            string: {
              completions: [
                "ffmpeg",
                "gifski"
              ]
            }
          },
          default: "ffmpeg",
          description: {
            short: "Hook function to create animations in HTML output",
            long: "Hook function to create animations in HTML output. \n\nThe default hook (`ffmpeg`) uses FFmpeg to convert images to a WebM video.\n\nAnother hook function is `gifski` based on the\n[**gifski**](https://cran.r-project.org/package=gifski) package to\ncreate GIF animations.\n"
          }
        }
      ],
      "schema/cell-include.yml": [
        {
          name: "child",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "path"
          },
          description: "One or more paths of child documents to be knitted and input into the main document."
        },
        {
          name: "file",
          tags: {
            engine: "knitr"
          },
          schema: "path",
          description: "File containing code to execute for this chunk"
        },
        {
          name: "code",
          tags: {
            engine: "knitr"
          },
          schema: "string",
          description: "String containing code to execute for this chunk"
        },
        {
          name: "purl",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: true,
          description: "Include chunk when extracting code with `knitr::purl()`"
        }
      ],
      "schema/cell-layout.yml": [
        {
          name: "layout",
          schema: {
            anyOf: [
              "string",
              {
                arrayOf: {
                  arrayOf: "number"
                }
              }
            ]
          },
          description: {
            short: "2d-array of widths where the first dimension specifies columns and the second rows.",
            long: "2d-array of widths where the first dimension specifies columns and the second rows.\n\nFor example, to layout the first two output blocks side-by-side on the top with the third\nblock spanning the full width below, use `[[3,3], [1]]`.\n\nUse negative values to create margin. For example, to create space between the \noutput blocks in the top row of the previous example, use `[[3,-1, 3], [1]]`.\n"
          }
        },
        {
          name: "layout-ncol",
          schema: "number",
          description: "Layout output blocks into columns"
        },
        {
          name: "layout-nrow",
          schema: "number",
          description: "Layout output blocks into rows"
        },
        {
          name: "layout-align",
          schema: {
            enum: [
              "default",
              "left",
              "center",
              "right"
            ]
          },
          default: "center",
          description: "Horizontal alignment for layout content (`default`, `left`, `right`, or `center`)"
        },
        {
          name: "layout-valign",
          schema: {
            enum: [
              "default",
              "top",
              "center",
              "bottom"
            ]
          },
          default: "top",
          description: "Vertical alignment for layout content (`default`, `top`, `center`, or `bottom`)"
        }
      ],
      "schema/cell-pagelayout.yml": [
        {
          name: "column",
          schema: {
            ref: "page-column"
          },
          description: {
            short: "Page column for output",
            long: "[Page column](https://quarto.org/docs/authoring/article-layout.html) for output"
          }
        },
        {
          name: "fig-column",
          schema: {
            ref: "page-column"
          },
          description: {
            short: "Page column for figure output",
            long: "[Page column](https://quarto.org/docs/authoring/article-layout.html) for figure output"
          }
        },
        {
          name: "tbl-column",
          schema: {
            ref: "page-column"
          },
          description: {
            short: "Page column for table output",
            long: "[Page column](https://quarto.org/docs/authoring/article-layout.html) for table output"
          }
        },
        {
          name: "cap-location",
          tags: {
            contexts: [
              "document-layout"
            ],
            formats: [
              "$html-files",
              "$pdf-all"
            ]
          },
          schema: {
            enum: [
              "top",
              "bottom",
              "margin"
            ]
          },
          default: "inline",
          description: "Where to place figure and table captions (`top`, `bottom`, or `margin`)"
        },
        {
          name: "fig-cap-location",
          tags: {
            contexts: [
              "document-layout",
              "document-figures"
            ],
            formats: [
              "$html-files",
              "$pdf-all"
            ]
          },
          schema: {
            enum: [
              "top",
              "bottom",
              "margin"
            ]
          },
          default: "inline",
          description: "Where to place figure captions (`top`, `bottom`, or `margin`)"
        },
        {
          name: "tbl-cap-location",
          tags: {
            contexts: [
              "document-layout",
              "document-tables"
            ],
            formats: [
              "$html-files",
              "$pdf-all"
            ]
          },
          schema: {
            enum: [
              "top",
              "bottom",
              "margin"
            ]
          },
          default: "inline",
          description: "Where to place table captions (`top`, `bottom`, or `margin`)"
        }
      ],
      "schema/cell-table.yml": [
        {
          name: "tbl-cap",
          schema: {
            maybeArrayOf: "string"
          },
          description: "Table caption"
        },
        {
          name: "tbl-subcap",
          schema: {
            anyOf: [
              {
                enum: [
                  true
                ]
              },
              {
                maybeArrayOf: "string"
              }
            ]
          },
          description: "Table subcaptions"
        },
        {
          name: "tbl-colwidths",
          tags: {
            contexts: [
              "document-tables"
            ],
            engine: [
              "knitr",
              "jupyter"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              {
                enum: [
                  "auto"
                ]
              },
              {
                arrayOf: "number"
              }
            ]
          },
          description: {
            short: "Apply explicit table column widths",
            long: "Apply explicit table column widths for markdown grid tables and pipe\ntables that are more than `columns` characters wide (72 by default). \n\nSome formats (e.g. HTML) do an excellent job automatically sizing\ntable columns and so don't benefit much from column width specifications.\nOther formats (e.g. LaTeX) require table column sizes in order to \ncorrectly flow longer cell content (this is a major reason why tables \n> 72 columns wide are assigned explicit widths by Pandoc).\n\nThis can be specified as:\n\n- `auto`: Apply markdown table column widths except when there is a\n  hyperlink in the table (which tends to throw off automatic\n  calculation of column widths based on the markdown text width of cells).\n  (`auto` is the default for HTML output formats)\n\n- `true`: Always apply markdown table widths (`true` is the default\n  for all non-HTML formats)\n\n- `false`: Never apply markdown table widths.\n\n- An array of numbers (e.g. `[40, 30, 30]`): Array of explicit width percentages.\n"
          }
        }
      ],
      "schema/cell-textoutput.yml": [
        {
          name: "output",
          tags: {
            contexts: [
              "document-execute"
            ],
            "execute-only": true
          },
          schema: {
            anyOf: [
              "boolean",
              {
                enum: [
                  "asis"
                ]
              },
              "string",
              "object"
            ]
          },
          description: {
            short: "Include the results of executing the code in the output (specify `asis` to\ntreat output as raw markdown with no enclosing containers).\n",
            long: "Include the results of executing the code in the output. Possible values:\n\n- `true`: Include results.\n- `false`: Do not include results.\n- `asis`: Treat output as raw markdown with no enclosing containers.\n"
          }
        },
        {
          name: "warning",
          tags: {
            contexts: [
              "document-execute"
            ],
            "execute-only": true
          },
          schema: "boolean",
          description: "Include warnings in rendered output."
        },
        {
          name: "error",
          tags: {
            contexts: [
              "document-execute"
            ],
            "execute-only": true
          },
          schema: "boolean",
          default: false,
          description: "Include errors in the output (note that this implies that errors executing code\nwill not halt processing of the document).\n"
        },
        {
          name: "include",
          tags: {
            contexts: [
              "document-execute"
            ],
            "execute-only": true
          },
          schema: "boolean",
          default: false,
          description: "Catch all for preventing any output (code or results) from being included in output.\n"
        },
        {
          name: "panel",
          schema: {
            enum: [
              "tabset",
              "input",
              "sidebar",
              "fill",
              "center"
            ]
          },
          description: "Panel type for cell output (`tabset`, `input`, `sidebar`, `fill`, `center`)"
        },
        {
          name: "output-location",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "default",
              "fragment",
              "slide",
              "column",
              "column-fragment"
            ]
          },
          description: {
            short: "Location of output relative to the code that generated it (`default`, `fragment`, `slide`, `column`, or `column-location`)",
            long: "Location of output relative to the code that generated it. The possible values are as follows:\n\n- `default`: Normal flow of the slide after the code\n- `fragment`: In a fragment (not visible until you advance)\n- `slide`: On a new slide after the curent one\n- 'column': In an adjacent column \n- `column-fragment`:   In an adjacent column (not visible until you advance)\n\nNote that this option is supported only for the `revealjs` format.\n"
          }
        },
        {
          name: "message",
          tags: {
            engine: "knitr"
          },
          schema: "boolean",
          default: true,
          description: "Include messages in rendered output."
        },
        {
          name: "results",
          tags: {
            engine: "knitr"
          },
          schema: {
            enum: [
              "markup",
              "asis",
              "hold",
              "hide",
              false
            ]
          },
          default: "markup",
          description: {
            short: "How to display text results",
            long: 'How to display text results. Note that this option only applies to normal text output (not warnings,\nmessages, or errors). The possible values are as follows:\n\n- `markup`: Mark up text output with the appropriate environments\n  depending on the output format. For example, if the text\n  output is a character string `"[1] 1 2 3"`, the actual output that\n  **knitr** produces will be:\n\n  ```` md\n  ```\n  [1] 1 2 3\n  ```\n  ````\n\n  In this case, `results: markup` means to put the text output in fenced\n  code blocks (```` ``` ````).\n\n- `asis`: Write text output as-is, i.e., write the raw text results\n  directly into the output document without any markups.\n\n  ```` md\n  ```{r}\n  #| results: asis\n  cat("I\'m raw **Markdown** content.\\n")\n  ```\n  ````\n\n- `hold`: Hold all pieces of text output in a chunk and flush them to the\n  end of the chunk.\n\n- `hide` (or `false`): Hide text output.\n'
          }
        },
        {
          name: "comment",
          tags: {
            engine: "knitr"
          },
          schema: "string",
          default: "##",
          description: {
            short: "Prefix to be added before each line of text output.",
            long: "Prefix to be added before each line of text output.\nBy default, the text output is commented out by `##`, so if\nreaders want to copy and run the source code from the output document, they\ncan select and copy everything from the chunk, since the text output is\nmasked in comments (and will be ignored when running the copied text). Set\n`comment: ''` to remove the default `##`.\n"
          }
        },
        {
          name: "class-output",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Class name(s) for text/console output"
        },
        {
          name: "attr-output",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Attribute(s) for text/console output"
        },
        {
          name: "class-warning",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Class name(s) for warning output"
        },
        {
          name: "attr-warning",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Attribute(s) for warning output"
        },
        {
          name: "class-message",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Class name(s) for message output"
        },
        {
          name: "attr-message",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Attribute(s) for message output"
        },
        {
          name: "class-error",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Class name(s) for error output"
        },
        {
          name: "attr-error",
          tags: {
            engine: "knitr"
          },
          schema: {
            maybeArrayOf: "string"
          },
          description: "Attribute(s) for error output"
        }
      ],
      "schema/definitions.yml": [
        {
          id: "date",
          anyOf: [
            "string",
            {
              object: {
                properties: {
                  value: "string",
                  format: "string"
                },
                required: [
                  "value"
                ]
              }
            }
          ]
        },
        {
          id: "math-methods",
          enum: {
            values: [
              "plain",
              "webtex",
              "gladtex",
              "mathml",
              "mathjax",
              "katex"
            ]
          }
        },
        {
          id: "pandoc-format-request-headers",
          arrayOf: {
            arrayOf: {
              schema: "string",
              length: 2
            }
          }
        },
        {
          id: "pandoc-format-output-file",
          anyOf: [
            "path",
            {
              enum: {
                values: [
                  null
                ],
                hidden: true
              }
            }
          ]
        },
        {
          id: "pandoc-format-filters",
          arrayOf: {
            anyOf: [
              "path",
              {
                record: {
                  type: "string",
                  path: "path"
                }
              },
              {
                record: {
                  type: {
                    enum: [
                      "citeproc"
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          id: "pandoc-shortcodes",
          arrayOf: "path"
        },
        {
          id: "page-column",
          enum: [
            "body",
            "body-outset",
            "body-outset-left",
            "body-outset-right",
            "page",
            "page-left",
            "page-right",
            "page-inset-left",
            "page-inset-right",
            "screen",
            "screen-left",
            "screen-right",
            "screen-rightcolumn",
            "screen-inset",
            "screen-inset-shaded",
            "screen-inset-left",
            "screen-inset-right",
            "margin"
          ]
        },
        {
          id: "contents-auto",
          object: {
            properties: {
              auto: {
                anyOf: [
                  "boolean",
                  {
                    maybeArrayOf: "string"
                  }
                ],
                description: {
                  short: "Automatically generate sidebar contents.",
                  long: "Automatically generate sidebar contents. Pass `true` to include all documents\nin the site, a directory name to include only documents in that directory, \nor a glob (or list of globs) to include documents based on a pattern. \n\nSubdirectories will create sections (use an `index.qmd` in the directory to\nprovide its title). Order will be alphabetical unless a numeric `order` field\nis provided in document metadata.\n"
                }
              }
            }
          }
        },
        {
          id: "navigation-item",
          anyOf: [
            "path",
            {
              ref: "navigation-item-object"
            }
          ]
        },
        {
          id: "navigation-item-object",
          object: {
            closed: true,
            properties: {
              "aria-label": {
                string: {
                  description: "Accessible label for the item."
                }
              },
              file: {
                hidden: true,
                string: {
                  description: "Alias for href\n"
                }
              },
              href: {
                string: {
                  description: "Link to file contained with the project or external URL\n"
                }
              },
              icon: {
                string: {
                  description: {
                    short: "Name of bootstrap icon (e.g. `github`, `twitter`, `share`)",
                    long: "Name of bootstrap icon (e.g. `github`, `twitter`, `share`)\nSee <https://icons.getbootstrap.com/> for a list of available icons\n"
                  }
                }
              },
              id: {
                schema: "string",
                hidden: true
              },
              menu: {
                arrayOf: {
                  schema: {
                    ref: "navigation-item"
                  }
                }
              },
              text: {
                string: {
                  description: "Text to display for item (defaults to the\ndocument title if not provided)\n"
                }
              },
              url: {
                hidden: true,
                string: {
                  description: "Alias for href\n"
                }
              }
            }
          }
        },
        {
          id: "comments",
          anyOf: [
            {
              enum: [
                false
              ]
            },
            {
              object: {
                closed: true,
                properties: {
                  utterances: {
                    object: {
                      closed: true,
                      properties: {
                        repo: {
                          string: {
                            description: "The Github repo that will be used to store comments."
                          }
                        },
                        label: {
                          string: {
                            description: "The label that will be assigned to issues created by Utterances."
                          }
                        },
                        theme: {
                          string: {
                            description: {
                              short: "The Github theme that should be used for Utterances.",
                              long: "The Github theme that should be used for Utterances\n(`github-light`, `github-dark`, `github-dark-orange`,\n`icy-dark`, `dark-blue`, `photon-dark`, `body-light`,\nor `gruvbox-dark`)\n"
                            },
                            completions: [
                              "github-light",
                              "github-dark",
                              "github-dark-orange",
                              "icy-dark",
                              "dark-blue",
                              "photon-dark",
                              "body-light",
                              "gruvbox-dark"
                            ]
                          }
                        },
                        "issue-term": {
                          string: {
                            description: {
                              short: "How posts should be mapped to Github issues",
                              long: "How posts should be mapped to Github issues\n(`pathname`, `url`, `title` or `og:title`)\n"
                            },
                            completions: [
                              "pathname",
                              "url",
                              "title",
                              "og:title"
                            ]
                          }
                        }
                      },
                      required: [
                        "repo"
                      ]
                    }
                  },
                  giscus: {
                    object: {
                      closed: true,
                      properties: {
                        repo: {
                          string: {
                            description: {
                              short: "The Github repo that will be used to store comments.",
                              long: "The Github repo that will be used to store comments.\n\nIn order to work correctly, the repo must be public, with the giscus app installed, and \nthe discussions feature must be enabled.\n"
                            }
                          }
                        },
                        "repo-id": {
                          string: {
                            description: {
                              short: "The Github repository identifier.",
                              long: "The Github repository identifier.\n\nYou can quickly find this by using the configuration tool at [https://giscus.app](https://giscus.app).\nIf this is not provided, Quarto will attempt to discover it at render time.\n"
                            }
                          }
                        },
                        category: {
                          string: {
                            description: {
                              short: "The discussion category where new discussions will be created.",
                              long: "The discussion category where new discussions will be created. It is recommended \nto use a category with the **Announcements** type so that new discussions \ncan only be created by maintainers and giscus.\n"
                            }
                          }
                        },
                        "category-id": {
                          string: {
                            description: {
                              short: "The Github category identifier.",
                              long: "The Github category identifier.\n\nYou can quickly find this by using the configuration tool at [https://giscus.app](https://giscus.app).\nIf this is not provided, Quarto will attempt to discover it at render time.\n"
                            }
                          }
                        },
                        mapping: {
                          anyOf: [
                            {
                              enum: [
                                "pathname",
                                "url",
                                "title",
                                "og:title"
                              ]
                            },
                            "string"
                          ],
                          description: {
                            short: "The mapping between the page and the embedded discussion.",
                            long: "The mapping between the page and the embedded discussion. \n\n- `pathname`: The discussion title contains the page path\n- `url`: The discussion title contains the page url\n- `title`: The discussion title contains the page title\n- `og:title`: The discussion title contains the `og:title` metadata value\n- any other string or number: Any other strings will be passed through verbatim and a discussion title\ncontaining that value will be used. Numbers will be treated\nas a discussion number and automatic discussion creation is not supported.\n"
                          }
                        },
                        "reactions-enabled": {
                          boolean: {
                            description: "Display reactions for the discussion's main post before the comments."
                          }
                        },
                        loading: {
                          enum: [
                            "lazy"
                          ],
                          description: "Specify `loading: lazy` to defer loading comments until the user scrolls near the comments container."
                        },
                        "input-position": {
                          enum: [
                            "top",
                            "bottom"
                          ],
                          description: "Place the comment input box above or below the comments."
                        },
                        theme: {
                          enum: [
                            "light",
                            "light_high_contrast",
                            "light_protanopia",
                            "dark",
                            "dark_high_contrast",
                            "dark_protanopia",
                            "dark_dimmed",
                            "transparent_dark",
                            "preferred_color_scheme"
                          ],
                          description: "The giscus theme to use when displaying comments."
                        },
                        language: {
                          string: {
                            description: "The language that should be used when displaying the commenting interface."
                          }
                        }
                      },
                      required: [
                        "repo"
                      ]
                    }
                  },
                  hypothesis: {
                    anyOf: [
                      "boolean",
                      {
                        object: {
                          closed: true,
                          properties: {
                            openSidebar: {
                              boolean: {
                                default: false,
                                description: "Controls whether the sidebar opens automatically on startup."
                              }
                            },
                            showHighlights: {
                              anyOf: [
                                "boolean",
                                {
                                  enum: [
                                    "always",
                                    "never"
                                  ]
                                }
                              ],
                              default: "always",
                              description: "Controls whether the in-document highlights are shown by default (`always` or `never`)"
                            },
                            theme: {
                              enum: [
                                "classic",
                                "clean"
                              ],
                              default: "classic",
                              description: "Controls the overall look of the sidebar (`classic` or `clean`)"
                            },
                            enableExperimentalNewNoteButton: {
                              boolean: {
                                default: false,
                                description: "Controls whether the experimental New Note button \nshould be shown in the notes tab in the sidebar.\n"
                              }
                            },
                            usernameUrl: {
                              schema: "string",
                              description: "Specify a URL to direct a user to, \nin a new tab. when they click on the annotation author \nlink in the header of an annotation.\n"
                            },
                            services: {
                              arrayOf: {
                                object: {
                                  properties: {
                                    apiUrl: {
                                      string: {
                                        description: "The base URL of the service API."
                                      }
                                    },
                                    authority: {
                                      string: {
                                        description: "The domain name which the annotation service is associated with."
                                      }
                                    },
                                    grantToken: {
                                      string: {
                                        description: "An OAuth 2 grant token which the client can send to the service in order to get an access token for making authenticated requests to the service."
                                      }
                                    },
                                    allowLeavingGroups: {
                                      boolean: {
                                        default: true,
                                        description: "A flag indicating whether users should be able to leave groups of which they are a member."
                                      }
                                    },
                                    enableShareLinks: {
                                      boolean: {
                                        default: true,
                                        description: "A flag indicating whether annotation cards should show links that take the user to see an annotation in context."
                                      }
                                    },
                                    groups: {
                                      anyOf: [
                                        {
                                          enum: [
                                            "$rpc:requestGroups"
                                          ]
                                        },
                                        {
                                          arrayOf: "string"
                                        }
                                      ],
                                      description: "An array of Group IDs or the literal string `$rpc:requestGroups`"
                                    },
                                    icon: {
                                      string: {
                                        description: "The URL to an image for the annotation service. This image will appear to the left of the name of the currently selected group."
                                      }
                                    }
                                  },
                                  required: [
                                    "apiUrl",
                                    "authority",
                                    "grantToken"
                                  ]
                                },
                                description: "Alternative annotation services which the client should \nconnect to instead of connecting to the public Hypothesis \nservice at hypothes.is.\n"
                              }
                            },
                            branding: {
                              object: {
                                properties: {
                                  accentColor: {
                                    string: {
                                      description: "Secondary color for elements of the commenting UI."
                                    }
                                  },
                                  appBackgroundColor: {
                                    string: {
                                      description: "The main background color of the commenting UI."
                                    }
                                  },
                                  ctaBackgroundColor: {
                                    string: {
                                      description: "The background color for call to action buttons."
                                    }
                                  },
                                  selectionFontFamily: {
                                    string: {
                                      description: "The font family for selection text in the annotation card."
                                    }
                                  },
                                  annotationFontFamily: {
                                    string: {
                                      description: "The font family for the actual annotation value that the user writes about the page or selection."
                                    }
                                  }
                                },
                                description: "Settings to adjust the commenting sidebar's look and feel."
                              }
                            },
                            externalContainerSelector: {
                              string: {
                                description: "A CSS selector specifying the containing element into which the sidebar iframe will be placed."
                              }
                            },
                            focus: {
                              object: {
                                properties: {
                                  user: {
                                    object: {
                                      properties: {
                                        username: {
                                          string: {
                                            description: "The username of the user to focus on."
                                          }
                                        },
                                        userid: {
                                          string: {
                                            description: "The userid of the user to focus on."
                                          }
                                        },
                                        displayName: {
                                          string: {
                                            description: "The display name of the user to focus on."
                                          }
                                        }
                                      }
                                    }
                                  }
                                },
                                required: [
                                  "user"
                                ]
                              },
                              description: "Defines a focused filter set for the available annotations on a page."
                            },
                            requestConfigFromFrame: {
                              object: {
                                properties: {
                                  origin: {
                                    string: {
                                      description: "Host url and port number of receiving iframe"
                                    }
                                  },
                                  ancestorLevel: {
                                    number: {
                                      description: "Number of nested iframes deep the client is relative from the receiving iframe."
                                    }
                                  }
                                }
                              }
                            },
                            assetRoot: {
                              string: {
                                description: "The root URL from which assets are loaded."
                              }
                            },
                            sidebarAppUrl: {
                              string: {
                                description: "The URL for the sidebar application which displays annotations.",
                                default: "https://hypothes.is/app.html"
                              }
                            }
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          ]
        },
        {
          id: "social-metadata",
          object: {
            closed: true,
            properties: {
              title: {
                string: {
                  description: {
                    short: "The title of the page",
                    long: "The title of the page. Note that by default Quarto will automatically \nuse the title metadata from the page. Specify this field if you\u2019d like \nto override the title for this provider.\n"
                  }
                }
              },
              description: {
                string: {
                  description: {
                    short: "A short description of the content.",
                    long: "A short description of the content. Note that by default Quarto will\nautomatically  use the description metadata from the page. Specify this\nfield if you\u2019d like to override the description for this provider.\n"
                  }
                }
              },
              image: {
                path: {
                  description: {
                    short: "The path to a preview image for the content.",
                    long: "The path to a preview image for the content. By default, Quarto will use\nthe `image` value from the format metadata. If you provide an \nimage, you may also optionally provide an `image-width` and `image-height`.\n"
                  }
                }
              },
              "image-alt": {
                path: {
                  description: {
                    short: "The alt text for the preview image.",
                    long: "The alt text for the preview image. By default, Quarto will use\nthe `image-alt` value from the format metadata. If you provide an \nimage, you may also optionally provide an `image-width` and `image-height`.\n"
                  }
                }
              },
              "image-width": {
                number: {
                  description: "Image width (pixels)"
                }
              },
              "image-height": {
                number: {
                  description: "Image height (pixels)"
                }
              }
            }
          }
        },
        {
          id: "page-footer-region",
          anyOf: [
            "string",
            {
              arrayOf: {
                ref: "navigation-item"
              }
            }
          ]
        },
        {
          id: "sidebar-contents",
          anyOf: [
            "string",
            {
              ref: "contents-auto"
            },
            {
              arrayOf: {
                anyOf: [
                  {
                    ref: "navigation-item"
                  },
                  "path",
                  {
                    object: {
                      closed: true,
                      properties: {
                        section: {
                          anyOf: [
                            "string",
                            null
                          ]
                        },
                        contents: {
                          ref: "sidebar-contents"
                        }
                      }
                    }
                  },
                  {
                    ref: "contents-auto"
                  }
                ]
              }
            }
          ]
        },
        {
          id: "project-preview",
          object: {
            closed: true,
            properties: {
              port: {
                number: {
                  description: "Port to listen on (defaults to random value between 3000 and 8000)"
                }
              },
              host: {
                string: {
                  description: "Hostname to bind to (defaults to 127.0.0.1)"
                }
              },
              serve: {
                description: "Use an exernal application to preview the project.",
                schema: {
                  ref: "project-serve"
                }
              },
              browser: {
                boolean: {
                  description: "Open a web browser to view the preview (defaults to true)"
                }
              },
              "watch-inputs": {
                boolean: {
                  description: "Re-render input files when they change (defaults to true)"
                }
              },
              navigate: {
                boolean: {
                  description: "Navigate the browser automatically when outputs are updated (defaults to true)"
                }
              },
              timeout: {
                number: {
                  description: "Time (in seconds) after which to exit if there are no active clients"
                }
              }
            }
          }
        },
        {
          id: "project-serve",
          object: {
            closed: true,
            properties: {
              cmd: {
                string: {
                  description: "Serve project preview using the specified command.\nInterpolate the `--port` into the command using `{port}`.\n"
                }
              },
              args: {
                string: {
                  description: "Additional command line arguments for preview command."
                }
              },
              env: {
                object: {
                  description: "Environment variables to set for preview command."
                }
              },
              ready: {
                string: {
                  description: "Regular expression for detecting when the server is ready."
                }
              }
            },
            required: [
              "cmd",
              "ready"
            ]
          }
        },
        {
          id: "publish",
          description: "Sites published from project",
          schema: {
            object: {
              closed: true,
              properties: {
                netlify: {
                  arrayOf: {
                    ref: "publish-record"
                  }
                }
              },
              description: "Sites published to Netlify"
            }
          }
        },
        {
          id: "publish-record",
          object: {
            closed: true,
            properties: {
              id: {
                string: {
                  description: "Unique identifier for site"
                }
              },
              url: {
                string: {
                  description: "Published URL for site"
                }
              }
            }
          }
        },
        {
          id: "twitter-card-config",
          object: {
            super: {
              resolveRef: "social-metadata"
            },
            closed: true,
            properties: {
              "card-style": {
                enum: [
                  "summary",
                  "summary_large_image"
                ],
                description: {
                  short: "Card style",
                  long: "Card style (`summary` or `summary_large_image`).\n\nIf this is not provided, the best style will automatically\nselected based upon other metadata. You can learn more about Twitter Card\nstyles [here](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards).\n"
                }
              },
              creator: {
                string: {
                  description: "`@username` of the content creator (must be a quoted string)"
                }
              },
              site: {
                string: {
                  description: "`@username` of the website (must be a quoted string)"
                }
              }
            }
          }
        },
        {
          id: "open-graph-config",
          object: {
            super: {
              resolveRef: "social-metadata"
            },
            closed: true,
            properties: {
              locale: {
                string: {
                  description: "Locale of open graph metadata"
                }
              },
              "site-name": {
                string: {
                  description: {
                    short: "Name that should be displayed for the overall site",
                    long: "Name that should be displayed for the overall site. If not explicitly \nprovided in the `open-graph` metadata, Quarto will use the website or\nbook `title` by default.\n"
                  }
                }
              }
            }
          }
        },
        {
          id: "page-footer",
          object: {
            properties: {
              left: {
                ref: "page-footer-region",
                description: "Footer left content"
              },
              right: {
                ref: "page-footer-region",
                description: "Footer right content"
              },
              center: {
                ref: "page-footer-region",
                description: "Footer center content"
              },
              border: {
                anyOf: [
                  "boolean",
                  "string"
                ],
                description: "Footer border (`true`, `false`, or a border color)"
              },
              background: {
                schema: "string",
                description: "Footer background color"
              },
              foreground: {
                schema: "string",
                description: "Footer foreground color"
              }
            },
            closed: true
          }
        },
        {
          id: "base-website",
          object: {
            closed: true,
            properties: {
              title: {
                string: {
                  description: "Website title"
                }
              },
              description: {
                string: {
                  description: "Website description"
                }
              },
              favicon: {
                string: {
                  description: "The path to the favicon for this website"
                }
              },
              "site-url": {
                string: {
                  description: "Base URL for published website"
                }
              },
              "site-path": {
                string: {
                  description: "Path to site (defaults to `/`). Not required if you specify `site-url`.\n"
                }
              },
              "repo-url": {
                string: {
                  description: "Base URL for website source code repository"
                }
              },
              "repo-subdir": {
                string: {
                  description: "Subdirectory of repository containing website"
                }
              },
              "repo-branch": {
                string: {
                  description: "Branch of website source code (defaults to `main`)"
                }
              },
              "repo-actions": {
                maybeArrayOf: {
                  enum: [
                    "none",
                    "edit",
                    "source",
                    "issue"
                  ],
                  description: {
                    short: "Links to source repository actions",
                    long: "Links to source repository actions (`none` or one or more of `edit`, `source`, `issue`)"
                  }
                }
              },
              "reader-mode": {
                boolean: {
                  description: "Displays a 'reader-mode' tool which allows users to hide the sidebar and table of contents when viewing a page.\n"
                }
              },
              "google-analytics": {
                anyOf: [
                  "string",
                  {
                    object: {
                      properties: {
                        "tracking-id": {
                          schema: "string",
                          description: "The Google tracking Id or measurement Id of this website."
                        },
                        storage: {
                          enum: [
                            "cookies",
                            "none"
                          ],
                          description: {
                            short: "Storage options for Google Analytics data",
                            long: "Storage option for Google Analytics data using on of these two values:\n\n`cookies`: Use cookies to store unique user and session identification (default).\n\n`none`: Do not use cookies to store unique user and session identification.\n\nFor more about choosing storage options see [Storage](https://quarto.org/docs/websites/website-tools.html#storage).\n"
                          }
                        },
                        "anonymize-ip": {
                          schema: "boolean",
                          description: {
                            short: "Anonymize the user ip address.",
                            long: "Anonymize the user ip address. For more about this feature, see \n[IP Anonymization (or IP masking) in Google Analytics](https://support.google.com/analytics/answer/2763052?hl=en).\n"
                          }
                        },
                        version: {
                          enum: [
                            3,
                            4
                          ],
                          description: {
                            short: "The version number of Google Analytics to use.",
                            long: "The version number of Google Analytics to use. \n\n- `3`: Use analytics.js\n- `4`: use gtag. \n\nThis is automatically detected based upon the `tracking-id`, but you may specify it.\n"
                          }
                        }
                      }
                    }
                  }
                ],
                description: "Enable Google Analytics for this website"
              },
              "cookie-consent": {
                anyOf: [
                  "boolean",
                  {
                    object: {
                      properties: {
                        type: {
                          enum: [
                            "implied",
                            "express"
                          ],
                          description: {
                            short: "The type of consent that should be requested",
                            long: "The type of consent that should be requested, using one of these two values:\n\n- `implied` (default): This will notify the user that the site uses cookies and permit them to change preferences, but not block cookies unless the user changes their preferences.\n\n- `express`: This will block cookies until the user expressly agrees to allow them (or continue blocking them if the user doesn\u2019t agree).\n"
                          }
                        },
                        style: {
                          enum: [
                            "simple",
                            "headline",
                            "interstitial",
                            "standalone"
                          ],
                          description: {
                            short: "The style of the consent banner that is displayed",
                            long: "The style of the consent banner that is displayed:\n\n- `simple` (default): A simple dialog in the lower right corner of the website.\n\n- `headline`: A full width banner across the top of the website.\n\n- `interstitial`: An semi-transparent overlay of the entire website.\n\n- `standalone`: An opaque overlay of the entire website.\n"
                          }
                        },
                        palette: {
                          enum: [
                            "light",
                            "dark"
                          ],
                          description: "Whether to use a dark or light appearance for the consent banner (`light` or `dark`)."
                        },
                        "policy-url": {
                          schema: "string",
                          description: "The url to the website\u2019s cookie or privacy policy."
                        },
                        "prefs-text": {
                          schema: "string",
                          description: {
                            short: "The text to display for the cookie preferences link in the website footer."
                          }
                        }
                      }
                    }
                  }
                ],
                description: {
                  short: "Request cookie consent before enabling scripts that set cookies",
                  long: "Quarto includes the ability to request cookie consent before enabling scripts that set cookies, using [Cookie Consent](https://www.cookieconsent.com/).\n\nThe user\u2019s cookie preferences will automatically control Google Analytics (if enabled) and can be used to control custom scripts you add as well. For more information see [Custom Scripts and Cookie Consent](https://quarto.org/docs/websites/website-tools.html#custom-scripts-and-cookie-consent).\n"
                }
              },
              search: {
                anyOf: [
                  "boolean",
                  {
                    object: {
                      properties: {
                        location: {
                          enum: [
                            "navbar",
                            "sidebar"
                          ],
                          description: "Location for search widget (`navbar` or `sidebar`)"
                        },
                        type: {
                          enum: [
                            "overlay",
                            "textbox"
                          ],
                          description: "Type of search UI (`overlay` or `textbox`)"
                        },
                        limit: {
                          schema: "number",
                          description: "Number of matches to display (defaults to 20)"
                        },
                        "collapse-after": {
                          schema: "number",
                          description: "Matches after which to collapse additional results"
                        },
                        "copy-button": {
                          schema: "boolean",
                          description: "Provide button for copying search link"
                        },
                        algolia: {
                          object: {
                            properties: {
                              "index-name": {
                                schema: "string",
                                description: "The name of the index to use when performing a search"
                              },
                              "application-id": {
                                schema: "string",
                                description: "The unique ID used by Algolia to identify your application"
                              },
                              "search-only-api-key": {
                                schema: "string",
                                description: "The Search-Only API key to use to connect to Algolia"
                              },
                              "analytics-events": {
                                boolean: {
                                  description: "Enable tracking of Algolia analytics events"
                                }
                              },
                              "show-logo": {
                                boolean: {
                                  description: "Enable the display of the Algolia logo in the search results footer."
                                }
                              },
                              "index-fields": {
                                object: {
                                  properties: {
                                    href: {
                                      schema: "string",
                                      description: "Field that contains the URL of index entries"
                                    },
                                    title: {
                                      schema: "string",
                                      description: "Field that contains the title of index entries"
                                    },
                                    text: {
                                      schema: "string",
                                      description: "Field that contains the text of index entries"
                                    },
                                    section: {
                                      schema: "string",
                                      description: "Field that contains the section of index entries"
                                    }
                                  },
                                  closed: true
                                }
                              },
                              params: {
                                object: {
                                  description: "Additional parameters to pass when executing a search"
                                }
                              }
                            },
                            closed: true
                          },
                          description: "Use external Algolia search index"
                        }
                      },
                      closed: true
                    }
                  }
                ],
                description: "Provide full text search for website"
              },
              navbar: {
                anyOf: [
                  "boolean",
                  {
                    object: {
                      properties: {
                        title: {
                          anyOf: [
                            "string",
                            "boolean"
                          ],
                          description: "The navbar title. Uses the project title if none is specified."
                        },
                        logo: {
                          path: {
                            description: "Path to a logo image that will be displayed to the left of the title."
                          }
                        },
                        "logo-alt": {
                          string: {
                            description: "Alternate text for the logo image."
                          }
                        },
                        "logo-href": {
                          string: {
                            description: "Target href from navbar logo / title. By default, the logo and title link to the root page of the site (/index.html)."
                          }
                        },
                        background: {
                          anyOf: [
                            {
                              enum: [
                                "primary",
                                "secondary",
                                "success",
                                "danger",
                                "warning",
                                "info",
                                "light",
                                "dark"
                              ]
                            },
                            "string"
                          ],
                          description: "The navbar's background color (named or hex color)."
                        },
                        foreground: {
                          anyOf: [
                            {
                              enum: [
                                "primary",
                                "secondary",
                                "success",
                                "danger",
                                "warning",
                                "info",
                                "light",
                                "dark"
                              ]
                            },
                            "string"
                          ],
                          description: "The navbar's foreground color (named or hex color)."
                        },
                        search: {
                          boolean: {
                            description: "Include a search box in the navbar."
                          }
                        },
                        pinned: {
                          boolean: {
                            description: "Always show the navbar (keeping it pinned).",
                            default: false
                          }
                        },
                        collapse: {
                          boolean: {
                            description: "Collapse the navbar into a menu when the display becomes narrow.",
                            default: true
                          }
                        },
                        "collapse-below": {
                          enum: [
                            "sm",
                            "md",
                            "lg",
                            "xl",
                            "xxl"
                          ],
                          description: "The responsive breakpoint below which the navbar will collapse into a menu (`sm`, `md`, `lg` (default), `xl`, `xxl`).",
                          default: "lg"
                        },
                        left: {
                          arrayOf: {
                            ref: "navigation-item"
                          },
                          description: "List of items for the left side of the navbar."
                        },
                        right: {
                          arrayOf: {
                            ref: "navigation-item"
                          },
                          description: "List of items for the right side of the navbar."
                        }
                      }
                    }
                  }
                ],
                description: "Top navigation options"
              },
              sidebar: {
                anyOf: [
                  "boolean",
                  {
                    maybeArrayOf: {
                      object: {
                        properties: {
                          id: {
                            string: {
                              description: "The identifier for this sidebar."
                            }
                          },
                          title: {
                            anyOf: [
                              "string",
                              "boolean"
                            ],
                            description: "The sidebar title. Uses the project title if none is specified."
                          },
                          subtitle: {
                            string: {
                              description: "The subtitle for this sidebar."
                            }
                          },
                          logo: {
                            path: {
                              description: "Path to a logo image that will be displayed in the sidebar."
                            }
                          },
                          search: {
                            boolean: {
                              description: "Include a search control in the sidebar."
                            }
                          },
                          tools: {
                            arrayOf: {
                              ref: "navigation-item-object"
                            },
                            description: "List of sidebar tools"
                          },
                          contents: {
                            ref: "sidebar-contents",
                            description: "List of items for the sidebar"
                          },
                          style: {
                            enum: [
                              "docked",
                              "floating"
                            ],
                            description: "The style of sidebar (`docked` or `floating`).",
                            default: "floating"
                          },
                          background: {
                            anyOf: [
                              {
                                enum: [
                                  "primary",
                                  "secondary",
                                  "success",
                                  "danger",
                                  "warning",
                                  "info",
                                  "light",
                                  "dark"
                                ]
                              },
                              "string"
                            ],
                            description: "The sidebar's background color (named or hex color)."
                          },
                          foreground: {
                            anyOf: [
                              {
                                enum: [
                                  "primary",
                                  "secondary",
                                  "success",
                                  "danger",
                                  "warning",
                                  "info",
                                  "light",
                                  "dark"
                                ]
                              },
                              "string"
                            ],
                            description: "The sidebar's foreground color (named or hex color)."
                          },
                          border: {
                            boolean: {
                              description: "Whether to show a border on the sidebar (defaults to true for 'docked' sidebars)"
                            }
                          },
                          alignment: {
                            enum: [
                              "left",
                              "right",
                              "center"
                            ],
                            description: "Alignment of the items within the sidebar (`left`, `right`, or `center`)"
                          },
                          "collapse-level": {
                            number: {
                              description: "The depth at which the sidebar contents should be collapsed by default.",
                              default: 2
                            }
                          },
                          pinned: {
                            boolean: {
                              description: "When collapsed, pin the collapsed sidebar to the top of the page."
                            }
                          },
                          header: {
                            maybeArrayOf: "string",
                            description: "Markdown to place above sidebar content (text or file path)"
                          },
                          footer: {
                            maybeArrayOf: "string",
                            description: "Markdown to place below sidebar content (text or file path)"
                          }
                        }
                      }
                    }
                  }
                ],
                description: "Side navigation options"
              },
              "body-header": {
                string: {
                  description: "Markdown to insert at the beginning of each page\u2019s body (below the title and author block)."
                }
              },
              "body-footer": {
                string: {
                  description: "Markdown to insert below each page\u2019s body."
                }
              },
              "margin-header": {
                maybeArrayOf: "string",
                description: "Markdown to place above margin content (text or file path)"
              },
              "margin-footer": {
                maybeArrayOf: "string",
                description: "Markdown to place below margin content (text or file path)"
              },
              "page-navigation": {
                boolean: {
                  description: "Provide next and previous article links in footer"
                }
              },
              "page-footer": {
                anyOf: [
                  "string",
                  {
                    ref: "page-footer"
                  }
                ],
                description: "Shared page footer"
              },
              image: {
                path: {
                  description: "Default site thumbnail image for `twitter` /`open-graph`\n"
                }
              },
              comments: {
                schema: {
                  ref: "comments"
                }
              },
              "open-graph": {
                anyOf: [
                  "boolean",
                  {
                    ref: "open-graph-config"
                  }
                ],
                description: "Publish open graph metadata"
              },
              "twitter-card": {
                anyOf: [
                  "boolean",
                  {
                    ref: "twitter-card-config"
                  }
                ],
                description: "Publish twitter card metadata"
              }
            }
          }
        },
        {
          id: "book-schema",
          schema: {
            object: {
              super: {
                resolveRef: "base-website"
              },
              properties: {
                title: {
                  string: {
                    description: "Book title"
                  }
                },
                subtitle: {
                  string: {
                    description: "Book subtitle"
                  }
                },
                author: {
                  maybeArrayOf: {
                    anyOf: [
                      "string",
                      "object"
                    ],
                    description: "Author or authors of the book"
                  }
                },
                date: {
                  string: {
                    description: "Book publication date"
                  }
                },
                "date-format": {
                  string: {
                    description: "Format string for dates in the book"
                  }
                },
                abstract: {
                  string: {
                    description: "Book abstract"
                  }
                },
                description: {
                  string: {
                    description: "Description metadata for HTML version of book"
                  }
                },
                chapters: {
                  schema: {
                    ref: "chapter-list"
                  },
                  description: "Book part and chapter files",
                  hidden: true
                },
                appendices: {
                  schema: {
                    ref: "chapter-list"
                  },
                  description: "Book appendix files",
                  hidden: true
                },
                references: {
                  path: {
                    description: "Book references file"
                  }
                },
                "output-file": {
                  path: {
                    description: "Base name for single-file output (e.g. PDF, ePub)"
                  }
                },
                "cover-image": {
                  path: {
                    description: "Cover image (used in HTML and ePub formats)"
                  }
                },
                "cover-image-alt": {
                  string: {
                    description: "Alternative text for cover image (used in HTML format)"
                  }
                },
                sharing: {
                  maybeArrayOf: {
                    enum: [
                      "twitter",
                      "facebook",
                      "linkedin"
                    ],
                    description: "Sharing buttons to include on navbar or sidebar\n(one or more of `twitter`, `facebook`, `linkedin`)\n"
                  }
                },
                downloads: {
                  maybeArrayOf: {
                    enum: [
                      "pdf",
                      "epub",
                      "docx"
                    ],
                    description: "Download buttons for other formats to include on navbar or sidebar\n(one or more of `pdf`, `epub`, and `docx`)\n"
                  }
                },
                tools: {
                  arrayOf: {
                    schema: {
                      ref: "navigation-item"
                    },
                    description: "Custom tools for navbar or sidebar"
                  }
                },
                doi: {
                  string: {
                    tags: {
                      formats: [
                        "$html-doc"
                      ]
                    },
                    description: "The Digital Object Identifier for this book."
                  }
                }
              }
            }
          }
        },
        {
          id: "chapter-item",
          anyOf: [
            {
              ref: "navigation-item"
            },
            {
              object: {
                properties: {
                  part: {
                    string: {
                      description: "Part title or path to input file"
                    }
                  },
                  chapters: {
                    arrayOf: {
                      ref: "navigation-item"
                    },
                    description: "Path to chapter input file"
                  }
                },
                required: [
                  "part"
                ]
              }
            }
          ]
        },
        {
          id: "chapter-list",
          arrayOf: {
            ref: "chapter-item"
          }
        },
        {
          id: "crossref-labels-schema",
          string: {
            completions: [
              "alpha",
              "arabic",
              "roman"
            ]
          }
        },
        {
          id: "epub-contributor",
          anyOf: [
            "string",
            {
              maybeArrayOf: {
                object: {
                  closed: true,
                  properties: {
                    role: {
                      string: {
                        description: {
                          short: "The role of this creator or contributor.",
                          long: "The role of this creator or contributor using \n[MARC relators](https://loc.gov/marc/relators/relaterm.html). Human readable\ntranslations to commonly used relators (e.g. 'author', 'editor') will \nattempt to be automatically translated.\n"
                        }
                      }
                    },
                    "file-as": {
                      string: {
                        description: "An alternate version of the creator or contributor text used for alphabatizing."
                      }
                    },
                    text: {
                      string: {
                        description: "The text describing the creator or contributor (for example, creator name)."
                      }
                    }
                  }
                }
              }
            }
          ]
        },
        {
          id: "format-language",
          object: {
            properties: {
              "toc-title-document": "string",
              "toc-title-website": "string",
              "callout-tip-caption": "string",
              "callout-note-caption": "string",
              "callout-warning-caption": "string",
              "callout-important-caption": "string",
              "callout-caution-caption": "string",
              "section-title-abstract": "string",
              "section-title-footnotes": "string",
              "section-title-appendices": "string",
              "code-summary": "string",
              "code-tools-menu-caption": "string",
              "code-tools-show-all-code": "string",
              "code-tools-hide-all-code": "string",
              "code-tools-view-source": "string",
              "code-tools-source-code": "string",
              "search-no-results-text": "string",
              "copy-button-tooltip": "string",
              "copy-button-tooltip-success": "string",
              "repo-action-links-edit": "string",
              "repo-action-links-source": "string",
              "repo-action-links-issue": "string",
              "search-matching-documents-text": "string",
              "search-copy-link-title": "string",
              "search-hide-matches-text": "string",
              "search-more-match-text": "string",
              "search-more-matches-text": "string",
              "search-clear-button-title": "string",
              "search-detached-cancel-button-title": "string",
              "search-submit-button-title": "string",
              "crossref-fig-title": "string",
              "crossref-tbl-title": "string",
              "crossref-lst-title": "string",
              "crossref-thm-title": "string",
              "crossref-lem-title": "string",
              "crossref-cor-title": "string",
              "crossref-prp-title": "string",
              "crossref-cnj-title": "string",
              "crossref-def-title": "string",
              "crossref-exm-title": "string",
              "crossref-exr-title": "string",
              "crossref-fig-prefix": "string",
              "crossref-tbl-prefix": "string",
              "crossref-lst-prefix": "string",
              "crossref-ch-prefix": "string",
              "crossref-apx-prefix": "string",
              "crossref-sec-prefix": "string",
              "crossref-eq-prefix": "string",
              "crossref-thm-prefix": "string",
              "crossref-lem-prefix": "string",
              "crossref-cor-prefix": "string",
              "crossref-prp-prefix": "string",
              "crossref-cnj-prefix": "string",
              "crossref-def-prefix": "string",
              "crossref-exm-prefix": "string",
              "crossref-exr-prefix": "string",
              "crossref-lof-title": "string",
              "crossref-lot-title": "string",
              "crossref-lol-title": "string"
            },
            errorDescription: "be a format language description object"
          }
        },
        {
          id: "website-about",
          object: {
            closed: true,
            properties: {
              id: {
                string: {
                  description: {
                    short: "The target id for the about page.",
                    long: "The target id of this about page. When the about page is rendered, it will \nplace read the contents of a `div` with this id into the about template that you \nhave selected (and replace the contents with the rendered about content).\n\nIf no such `div` is defined on the page, a `div` with this id will be created \nand appended to the end of the page.\n"
                  }
                }
              },
              template: {
                enum: [
                  "jolla",
                  "trestles",
                  "solana",
                  "marquee",
                  "broadside"
                ],
                description: {
                  short: "The template to use to layout this about page.",
                  long: "The template to use to layout this about page. Choose from:\n\n- `jolla`\n- `trestles`\n- `solana`\n- `marquee`\n- `broadside`\n"
                }
              },
              image: {
                path: {
                  description: {
                    short: "The path to the main image on the about page.",
                    long: "The path to the main image on the about page. If not specified, \nthe `image` provided for the document itself will be used.\n"
                  }
                }
              },
              "image-width": {
                string: {
                  description: {
                    short: "A valid CSS width for the about page image.",
                    long: "A valid CSS width for the about page image.\n"
                  }
                }
              },
              "image-shape": {
                enum: [
                  "rectangle",
                  "round",
                  "rounded"
                ],
                description: {
                  short: "The shape of the image on the about page.",
                  long: "The shape of the image on the about page.\n\n- `rectangle`\n- `round`\n- `rounded`\n"
                }
              },
              links: {
                arrayOf: {
                  ref: "navigation-item"
                }
              }
            }
          }
        },
        {
          id: "website-listing",
          object: {
            closed: true,
            properties: {
              id: {
                string: {
                  description: {
                    short: "The id of this listing.",
                    long: "The id of this listing. When the listing is rendered, it will \nplace the contents into a `div` with this id. If no such `div` is defined on the \npage, a `div` with this id will be created and appended to the end of the page.\n\nIn no `id` is provided for a listing, Quarto will synthesize one when rendering the page.\n"
                  }
                }
              },
              type: {
                enum: [
                  "default",
                  "table",
                  "grid",
                  "custom"
                ],
                description: {
                  short: "The type of listing to create.",
                  long: "The type of listing to create. Choose one of:\n\n- `default`: A blog style list of items\n- `table`: A table of items\n- `grid`: A grid of item cards\n- `custom`: A custom template, provided by the `template` field\n"
                }
              },
              contents: {
                maybeArrayOf: {
                  anyOf: [
                    "string",
                    {
                      ref: "website-listing-contents-object"
                    }
                  ]
                },
                description: "The files or path globs of Quarto documents or YAML files that should be included in the listing."
              },
              sort: {
                maybeArrayOf: "string",
                description: {
                  short: "Sort items in the listing by these fields.",
                  long: "Sort items in the listing by these fields. The sort key is made up of a \nfield name followed by a direction `asc` or `desc`.\n\nFor example:\n`date asc`\n"
                }
              },
              "max-items": {
                number: {
                  description: "The maximum number of items to include in this listing."
                }
              },
              "page-size": {
                number: {
                  description: "The number of items to display on a page."
                }
              },
              "sort-ui": {
                anyOf: [
                  "boolean",
                  {
                    arrayOf: "string"
                  }
                ],
                description: {
                  short: "Shows or hides the sorting control for the listing.",
                  long: "Shows or hides the sorting control for the listing. To control the \nfields that will be displayed in the sorting control, provide a list\nof field names.\n"
                }
              },
              "filter-ui": {
                anyOf: [
                  "boolean",
                  {
                    arrayOf: "string"
                  }
                ],
                description: {
                  short: "Shows or hides the filtering control for the listing.",
                  long: "Shows or hides the filtering control for the listing. To control the \nfields that will be used to filter the listing, provide a list\nof field names. By default all fields of the listing will be used\nwhen filtering.\n"
                }
              },
              categories: {
                anyOf: [
                  "boolean",
                  {
                    enum: [
                      "numbered",
                      "unnumbered",
                      "cloud"
                    ]
                  }
                ],
                description: {
                  short: "Display item categories from this listing in the margin of the page.",
                  long: "Display item categories from this listing in the margin of the page.\n\n  - `numbered`: Category list with number of items\n  - `unnumbered`: Category list\n  - `cloud`: Word cloud style categories\n"
                }
              },
              feed: {
                anyOf: [
                  "boolean",
                  {
                    object: {
                      closed: true,
                      properties: {
                        items: {
                          number: {
                            description: "The number of items to include in your feed. Defaults to 20.\n"
                          }
                        },
                        type: {
                          enum: [
                            "full",
                            "partial"
                          ],
                          description: {
                            short: "Whether to include full or partial content in the feed.",
                            long: "Whether to include full or partial content in the feed.\n\n- `full` (default): Include the complete content of the document in the feed.\n- `partial`: Include only the first paragraph of the document in the feed.\n"
                          }
                        },
                        title: {
                          string: {
                            description: {
                              short: "The title for this feed.",
                              long: "The title for this feed. Defaults to the site title provided the Quarto project.\n"
                            }
                          }
                        },
                        image: {
                          path: {
                            description: {
                              short: "The path to an image for this feed.",
                              long: "The path to an image for this feed. If not specified, the image for the page the listing \nappears on will be used, otherwise an image will be used if specified for the site \nin the Quarto project.\n"
                            }
                          }
                        },
                        description: {
                          string: {
                            description: {
                              short: "The description of this feed.",
                              long: "The description of this feed. If not specified, the description for the page the \nlisting appears on will be used, otherwise the description \nof the site will be used if specified in the Quarto project.\n"
                            }
                          }
                        },
                        language: {
                          string: {
                            description: {
                              short: "The language of the feed.",
                              long: "The language of the feed. Omitted if not specified. \nSee [https://www.rssboard.org/rss-language-codes](https://www.rssboard.org/rss-language-codes)\nfor a list of valid language codes.\n"
                            }
                          }
                        },
                        categories: {
                          maybeArrayOf: {
                            string: {
                              description: "A list of categories for which to create separate RSS feeds containing only posts with that category."
                            }
                          }
                        }
                      }
                    }
                  }
                ],
                description: "Enables an RSS feed for the listing."
              },
              "date-format": {
                string: {
                  description: {
                    short: "The date format to use when displaying dates (e.g. d-M-yyy).",
                    long: "The date format to use when displaying dates (e.g. d-M-yyy). \nLearn more about supported date formatting values [here](https://deno.land/std@0.125.0/datetime).\n"
                  }
                }
              },
              "max-description-length": {
                number: {
                  description: {
                    short: "The maximum length (in characters) of the description displayed in the listing.",
                    long: "The maximum length (in characters) of the description displayed in the listing.\nDefaults to 175.\n"
                  }
                }
              },
              "image-placeholder": {
                string: {
                  description: "The default image to use if an item in the listing doesn't have an image."
                }
              },
              "image-align": {
                enum: [
                  "left",
                  "right"
                ],
                description: "In `default` type listings, whether to place the image on the right or left side of the post content (`left` or `right`)."
              },
              "image-height": {
                string: {
                  description: {
                    short: "The height of the image being displayed.",
                    long: "The height of the image being displayed (a CSS height string).\n\nThe width is automatically determined and the image will fill the rectangle without scaling (cropped to fill).\n"
                  }
                }
              },
              "grid-columns": {
                number: {
                  description: {
                    short: "In `grid` type listings, the number of columns in the grid display.",
                    long: "In grid type listings, the number of columns in the grid display.\nDefaults to 3.\n"
                  }
                }
              },
              "grid-item-border": {
                boolean: {
                  description: {
                    short: "In `grid` type listings, whether to display a border around the item card.",
                    long: "In grid type listings, whether to display a border around the item card. Defaults to `true`.\n"
                  }
                }
              },
              "grid-item-align": {
                enum: [
                  "left",
                  "right",
                  "center"
                ],
                description: {
                  short: "In `grid` type listings, the alignment of the content within the card.",
                  long: "In grid type listings, the alignment of the content within the card (`left` (default), `right`, or `center`).\n"
                }
              },
              "table-striped": {
                boolean: {
                  description: {
                    short: "In `table` type listings, display the table rows with alternating background colors.",
                    long: "In table type listings, display the table rows with alternating background colors.\nDefaults to `false`.\n"
                  }
                }
              },
              "table-hover": {
                boolean: {
                  description: {
                    short: "In `table` type listings, highlight rows of the table when the user hovers the mouse over them.",
                    long: "In table type listings, highlight rows of the table when the user hovers the mouse over them.\nDefaults to false.\n"
                  }
                }
              },
              template: {
                path: {
                  description: {
                    short: "The path to a custom listing template.",
                    long: "The path to a custom listing template.\n"
                  }
                }
              },
              fields: {
                arrayOf: "string",
                description: {
                  short: "The list of fields to include in this listing",
                  long: "The list of fields to include in this listing.\n"
                }
              },
              "field-display-names": {
                object: {
                  description: {
                    short: "A mapping of display names for listing fields.",
                    long: 'A mapping that provides display names for specific fields. For example, to display the title column as \u2018Report\u2019 in a table listing you would write:\n\n```yaml\nlisting:\n  field-display-names:\n  title: "Report"\n```\n'
                  }
                }
              },
              "field-types": {
                object: {
                  description: {
                    short: "Provides the date type for the field of a listing item.",
                    long: "Provides the date type for the field of a listing item. Unknown fields are treated\nas strings unless a type is provided. Valid types are `date`, `number`.\n"
                  }
                }
              },
              "field-links": {
                arrayOf: "string",
                description: {
                  short: "This list of fields to display as links in a table listing.",
                  long: "The list of fields to display as hyperlinks to the source document \nwhen the listing type is a table. By default, only the `title` or \n`filename` is displayed as a link.\n"
                }
              },
              "field-required": {
                arrayOf: "string",
                description: {
                  short: "Fields that items in this listing must have populated.",
                  long: "Fields that items in this listing must have populated.\nIf a listing is rendered and one more items in this listing \nis missing a required field, an error will occur and the render will.\n"
                }
              }
            }
          }
        },
        {
          id: "website-listing-contents-object",
          object: {
            properties: {
              author: {
                maybeArrayOf: "string"
              },
              date: "string",
              title: "string",
              subtitle: "string"
            }
          }
        },
        {
          id: "csl-date",
          anyOf: [
            "string",
            {
              maybeArrayOf: "number"
            }
          ]
        },
        {
          id: "csl-person",
          anyOf: [
            {
              maybeArrayOf: "string"
            },
            {
              maybeArrayOf: {
                object: {
                  properties: {
                    "family-name": {
                      string: {
                        description: "The family name."
                      }
                    },
                    "given-name": {
                      string: {
                        description: "The given name."
                      }
                    }
                  }
                }
              }
            }
          ]
        },
        {
          id: "csl-number",
          anyOf: [
            "number",
            "string"
          ]
        },
        {
          id: "csl-item",
          object: {
            closed: true,
            properties: {
              abstract: {
                string: {
                  description: "Abstract of the item (e.g. the abstract of a journal article)"
                }
              },
              "abstract-url": {
                string: {
                  description: "A url to the abstract for this item."
                }
              },
              accessed: {
                ref: "csl-date",
                description: "Date the item has been accessed."
              },
              annote: {
                string: {
                  description: {
                    short: "Short markup, decoration, or annotation to the item (e.g., to indicate items included in a review).",
                    long: "Short markup, decoration, or annotation to the item (e.g., to indicate items included in a review);\n\nFor descriptive text (e.g., in an annotated bibliography), use `note` instead\n"
                  }
                }
              },
              archive: {
                string: {
                  description: "Archive storing the item"
                }
              },
              "archive-collection": {
                string: {
                  description: "Collection the item is part of within an archive."
                }
              },
              archive_collection: {
                schema: "string",
                hidden: true
              },
              "archive-location": {
                string: {
                  description: "Storage location within an archive (e.g. a box and folder number)."
                }
              },
              archive_location: {
                schema: "string",
                hidden: true
              },
              "archive-place": {
                string: {
                  description: "Geographic location of the archive."
                }
              },
              author: {
                ref: "csl-person",
                description: "The author(s) of the item."
              },
              authority: {
                string: {
                  description: 'Issuing or judicial authority (e.g. "USPTO" for a patent, "Fairfax Circuit Court" for a legal case).'
                }
              },
              "available-date": {
                ref: "csl-date",
                description: {
                  short: "Date the item was initially available",
                  long: "Date the item was initially available (e.g. the online publication date of a journal \narticle before its formal publication date; the date a treaty was made available for signing).\n"
                }
              },
              "call-number": {
                string: {
                  description: "Call number (to locate the item in a library)."
                }
              },
              chair: {
                ref: "csl-person",
                description: "The person leading the session containing a presentation (e.g. the organizer of the `container-title` of a `speech`)."
              },
              "chapter-number": {
                ref: "csl-number",
                description: "Chapter number (e.g. chapter number in a book; track number on an album)."
              },
              "citation-key": {
                string: {
                  description: {
                    short: "Identifier of the item in the input data file (analogous to BiTeX entrykey).",
                    long: "Identifier of the item in the input data file (analogous to BiTeX entrykey);\n\nUse this variable to facilitate conversion between word-processor and plain-text writing systems;\nFor an identifer intended as formatted output label for a citation \n(e.g. \u201CFerr78\u201D), use `citation-label` instead\n"
                  }
                }
              },
              "citation-label": {
                string: {
                  description: {
                    short: 'Label identifying the item in in-text citations of label styles (e.g. "Ferr78").',
                    long: 'Label identifying the item in in-text citations of label styles (e.g. "Ferr78");\n\nMay be assigned by the CSL processor based on item metadata; For the identifier of the item \nin the input data file, use `citation-key` instead\n'
                  }
                }
              },
              "citation-number": {
                schema: {
                  ref: "csl-number",
                  description: "Index (starting at 1) of the cited reference in the bibliography (generated by the CSL processor)."
                },
                hidden: true
              },
              "collection-editor": {
                ref: "csl-person",
                description: "Editor of the collection holding the item (e.g. the series editor for a book)."
              },
              "collection-number": {
                ref: "csl-number",
                description: "Number identifying the collection holding the item (e.g. the series number for a book)"
              },
              "collection-title": {
                string: {
                  description: "Title of the collection holding the item (e.g. the series title for a book; the lecture series title for a presentation)."
                }
              },
              compiler: {
                ref: "csl-person",
                description: "Person compiling or selecting material for an item from the works of various persons or bodies (e.g. for an anthology)."
              },
              composer: {
                ref: "csl-person",
                description: "Composer (e.g. of a musical score)."
              },
              "container-author": {
                ref: "csl-person",
                description: "Author of the container holding the item (e.g. the book author for a book chapter)."
              },
              "container-title": {
                string: {
                  description: {
                    short: "Title of the container holding the item.",
                    long: "Title of the container holding the item (e.g. the book title for a book chapter, \nthe journal title for a journal article; the album title for a recording; \nthe session title for multi-part presentation at a conference)\n"
                  }
                }
              },
              "container-title-short": {
                string: {
                  description: "Short/abbreviated form of container-title;"
                },
                hidden: true
              },
              contributor: {
                ref: "csl-person",
                description: "A minor contributor to the item; typically cited using \u201Cwith\u201D before the name when listed in a bibliography."
              },
              curator: {
                ref: "csl-person",
                description: "Curator of an exhibit or collection (e.g. in a museum)."
              },
              dimensions: {
                string: {
                  description: "Physical (e.g. size) or temporal (e.g. running time) dimensions of the item."
                }
              },
              director: {
                ref: "csl-person",
                description: "Director (e.g. of a film)."
              },
              division: {
                string: {
                  description: "Minor subdivision of a court with a `jurisdiction` for a legal item"
                }
              },
              doi: {
                string: {
                  description: 'Digital Object Identifier (e.g. "10.1128/AEM.02591-07")'
                }
              },
              DOI: {
                schema: "string",
                hidden: true
              },
              edition: {
                ref: "csl-number",
                description: '(Container) edition holding the item (e.g. "3" when citing a chapter in the third edition of a book).'
              },
              editor: {
                ref: "csl-person",
                description: "The editor of the item."
              },
              "editorial-director": {
                ref: "csl-person",
                description: 'Managing editor ("Directeur de la Publication" in French).'
              },
              "editor-translator": {
                ref: "csl-person",
                description: {
                  short: "Combined editor and translator of a work.",
                  long: "Combined editor and translator of a work.\n\nThe citation processory must be automatically generate if editor and translator variables \nare identical; May also be provided directly in item data.\n"
                }
              },
              event: {
                schema: "string",
                hidden: true
              },
              "event-date": {
                ref: "csl-date",
                description: "Date the event related to an item took place."
              },
              "event-title": {
                string: {
                  description: "Name of the event related to the item (e.g. the conference name when citing a conference paper; the meeting where presentation was made)."
                }
              },
              "event-place": {
                string: {
                  description: 'Geographic location of the event related to the item (e.g. "Amsterdam, The Netherlands").'
                }
              },
              "executive-producer": {
                ref: "csl-person",
                description: "Executive producer of the item (e.g. of a television series)."
              },
              "first-reference-note-number": {
                schema: {
                  ref: "csl-number"
                },
                description: {
                  short: "Number of a preceding note containing the first reference to the item.",
                  long: "Number of a preceding note containing the first reference to the item\n\nAssigned by the CSL processor; Empty in non-note-based styles or when the item hasn't \nbeen cited in any preceding notes in a document\n"
                },
                hidden: true
              },
              "fulltext-url": {
                string: {
                  description: "A url to the full text for this item."
                }
              },
              genre: {
                string: {
                  description: {
                    short: "Type, class, or subtype of the item",
                    long: 'Type, class, or subtype of the item (e.g. "Doctoral dissertation" for a PhD thesis; "NIH Publication" for an NIH technical report);\n\nDo not use for topical descriptions or categories (e.g. "adventure" for an adventure movie)\n'
                  }
                }
              },
              guest: {
                ref: "csl-person",
                description: "Guest (e.g. on a TV show or podcast)."
              },
              host: {
                ref: "csl-person",
                description: "Host of the item (e.g. of a TV show or podcast)."
              },
              illustrator: {
                ref: "csl-person",
                description: "Illustrator (e.g. of a children\u2019s book or graphic novel)."
              },
              interviewer: {
                ref: "csl-person",
                description: "Interviewer (e.g. of an interview)."
              },
              isbn: {
                string: {
                  description: 'International Standard Book Number (e.g. "978-3-8474-1017-1").'
                }
              },
              ISBN: {
                schema: "string",
                hidden: true
              },
              issn: {
                string: {
                  description: "International Standard Serial Number."
                }
              },
              ISSN: {
                schema: "string",
                hidden: true
              },
              issue: {
                ref: "csl-number",
                description: {
                  short: "Issue number of the item or container holding the item",
                  long: 'Issue number of the item or container holding the item (e.g. "5" when citing a \njournal article from journal volume 2, issue 5);\n\nUse `volume-title` for the title of the issue, if any.\n'
                }
              },
              issued: {
                ref: "csl-date",
                description: "Date the item was issued/published."
              },
              jurisdiction: {
                string: {
                  description: 'Geographic scope of relevance (e.g. "US" for a US patent; the court hearing a legal case).'
                }
              },
              keyword: {
                string: {
                  description: "Keyword(s) or tag(s) attached to the item."
                }
              },
              language: {
                string: {
                  description: {
                    short: "The language of the item.",
                    long: 'The language of the item;\n\nShould be entered as an ISO 639-1 two-letter language code (e.g. "en", "zh"), \noptionally with a two-letter locale code (e.g. "de-DE", "de-AT")\n'
                  }
                }
              },
              license: {
                string: {
                  description: {
                    short: "The license information applicable to an item.",
                    long: "The license information applicable to an item (e.g. the license an article \nor software is released under; the copyright information for an item; \nthe classification status of a document)\n"
                  }
                }
              },
              locator: {
                ref: "csl-number",
                description: {
                  short: "A cite-specific pinpointer within the item.",
                  long: "A cite-specific pinpointer within the item (e.g. a page number within a book, \nor a volume in a multi-volume work).\n\nMust be accompanied in the input data by a label indicating the locator type \n(see the Locators term list).\n"
                }
              },
              medium: {
                string: {
                  description: 'Description of the item\u2019s format or medium (e.g. "CD", "DVD", "Album", etc.)'
                }
              },
              narrator: {
                ref: "csl-person",
                description: "Narrator (e.g. of an audio book)."
              },
              note: {
                string: {
                  description: "Descriptive text or notes about an item (e.g. in an annotated bibliography)."
                }
              },
              number: {
                ref: "csl-number",
                description: "Number identifying the item (e.g. a report number)."
              },
              "number-of-pages": {
                ref: "csl-number",
                description: "Total number of pages of the cited item."
              },
              "number-of-volumes": {
                ref: "csl-number",
                description: "Total number of volumes, used when citing multi-volume books and such."
              },
              organizer: {
                ref: "csl-person",
                description: "Organizer of an event (e.g. organizer of a workshop or conference)."
              },
              "original-author": {
                ref: "csl-person",
                description: {
                  short: "The original creator of a work.",
                  long: "The original creator of a work (e.g. the form of the author name \nlisted on the original version of a book; the historical author of a work; \nthe original songwriter or performer for a musical piece; the original \ndeveloper or programmer for a piece of software; the original author of an \nadapted work such as a book adapted into a screenplay)\n"
                }
              },
              "original-date": {
                ref: "csl-date",
                description: "Issue date of the original version."
              },
              "original-publisher": {
                string: {
                  description: "Original publisher, for items that have been republished by a different publisher."
                }
              },
              "original-publisher-place": {
                string: {
                  description: 'Geographic location of the original publisher (e.g. "London, UK").'
                }
              },
              "original-title": {
                string: {
                  description: 'Title of the original version (e.g. "\u0412\u043E\u0439\u043D\u0430 \u0438 \u043C\u0438\u0440", the untranslated Russian title of "War and Peace").'
                }
              },
              page: {
                ref: "csl-number",
                description: "Range of pages the item (e.g. a journal article) covers in a container (e.g. a journal issue)."
              },
              "page-first": {
                ref: "csl-number",
                description: "First page of the range of pages the item (e.g. a journal article) covers in a container (e.g. a journal issue)."
              },
              "page-last": {
                ref: "csl-number",
                description: "Last page of the range of pages the item (e.g. a journal article) covers in a container (e.g. a journal issue)."
              },
              "part-number": {
                ref: "csl-number",
                description: {
                  short: "Number of the specific part of the item being cited (e.g. part 2 of a journal article).",
                  long: "Number of the specific part of the item being cited (e.g. part 2 of a journal article).\n\nUse `part-title` for the title of the part, if any.\n"
                }
              },
              "part-title": {
                string: {
                  description: "Title of the specific part of an item being cited."
                }
              },
              "pdf-url": {
                string: {
                  description: "A url to the pdf for this item."
                }
              },
              performer: {
                ref: "csl-person",
                description: "Performer of an item (e.g. an actor appearing in a film; a muscian performing a piece of music)."
              },
              pmcid: {
                string: {
                  description: "PubMed Central reference number."
                }
              },
              PMCID: {
                schema: "string",
                hidden: true
              },
              pmid: {
                string: {
                  description: "PubMed reference number."
                }
              },
              PMID: {
                schema: "string",
                hidden: true
              },
              "printing-number": {
                ref: "csl-number",
                description: "Printing number of the item or container holding the item."
              },
              producer: {
                ref: "csl-person",
                description: "Producer (e.g. of a television or radio broadcast)."
              },
              "public-url": {
                string: {
                  description: "A public url for this item."
                }
              },
              publisher: {
                string: {
                  description: "The publisher of the item."
                }
              },
              "publisher-place": {
                string: {
                  description: "The geographic location of the publisher."
                }
              },
              recipient: {
                ref: "csl-person",
                description: "Recipient (e.g. of a letter)."
              },
              references: {
                string: {
                  description: {
                    short: "Resources related to the procedural history of a legal case or legislation.",
                    long: 'Resources related to the procedural history of a legal case or legislation;\n\nCan also be used to refer to the procedural history of other items (e.g. \n"Conference canceled" for a presentation accepted as a conference that was subsequently \ncanceled; details of a retraction or correction notice)\n'
                  }
                }
              },
              "reviewed-author": {
                ref: "csl-person",
                description: "Author of the item reviewed by the current item."
              },
              "reviewed-genre": {
                string: {
                  description: "Type of the item being reviewed by the current item (e.g. book, film)."
                }
              },
              "reviewed-title": {
                string: {
                  description: "Title of the item reviewed by the current item."
                }
              },
              scale: {
                string: {
                  description: "Scale of e.g. a map or model."
                }
              },
              "script-writer": {
                ref: "csl-person",
                description: "Writer of a script or screenplay (e.g. of a film)."
              },
              section: {
                ref: "csl-number",
                description: 'Section of the item or container holding the item (e.g. "\xA72.0.1" for a law; "politics" for a newspaper article).'
              },
              "series-creator": {
                ref: "csl-person",
                description: "Creator of a series (e.g. of a television series)."
              },
              source: {
                string: {
                  description: "Source from whence the item originates (e.g. a library catalog or database)."
                }
              },
              status: {
                string: {
                  description: 'Publication status of the item (e.g. "forthcoming"; "in press"; "advance online publication"; "retracted")'
                }
              },
              submitted: {
                ref: "csl-date",
                description: "Date the item (e.g. a manuscript) was submitted for publication."
              },
              "supplement-number": {
                ref: "csl-number",
                description: "Supplement number of the item or container holding the item (e.g. for secondary legal items that are regularly updated between editions)."
              },
              title: {
                string: {
                  description: "The primary title of the item."
                }
              },
              "title-short": {
                string: {
                  description: "Short/abbreviated form of`title`."
                },
                hidden: true
              },
              translator: {
                ref: "csl-person",
                description: "Translator"
              },
              type: {
                enum: [
                  "article",
                  "article-journal",
                  "article-magazine",
                  "article-newspaper",
                  "bill",
                  "book",
                  "broadcast",
                  "chapter",
                  "classic",
                  "collection",
                  "dataset",
                  "document",
                  "entry",
                  "entry-dictionary",
                  "entry-encyclopedia",
                  "event",
                  "figure",
                  "graphic",
                  "hearing",
                  "interview",
                  "legal_case",
                  "legislation",
                  "manuscript",
                  "map",
                  "motion_picture",
                  "musical_score",
                  "pamphlet",
                  "paper-conference",
                  "patent",
                  "performance",
                  "periodical",
                  "personal_communication",
                  "post",
                  "post-weblog",
                  "regulation",
                  "report",
                  "review",
                  "review-book",
                  "software",
                  "song",
                  "speech",
                  "standard",
                  "thesis",
                  "treaty",
                  "webpage"
                ],
                description: "The [type](https://docs.citationstyles.org/en/stable/specification.html#appendix-iii-types) of the item."
              },
              url: {
                string: {
                  description: 'Uniform Resource Locator (e.g. "https://aem.asm.org/cgi/content/full/74/9/2766")'
                }
              },
              URL: {
                schema: "string",
                hidden: true
              },
              version: {
                ref: "csl-number",
                description: 'Version of the item (e.g. "2.0.9" for a software program).'
              },
              volume: {
                ref: "csl-number",
                description: {
                  short: "Volume number of the item (e.g. \u201C2\u201D when citing volume 2 of a book) or the container holding the item.",
                  long: 'Volume number of the item (e.g. "2" when citing volume 2 of a book) or the container holding the \nitem (e.g. "2" when citing a chapter from volume 2 of a book).\n\nUse `volume-title` for the title of the volume, if any.\n'
                }
              },
              "volume-title": {
                string: {
                  description: {
                    short: "Title of the volume of the item or container holding the item.",
                    long: "Title of the volume of the item or container holding the item.\n\nAlso use for titles of periodical special issues, special sections, and the like.\n"
                  }
                }
              },
              "year-suffix": {
                string: {
                  description: 'Disambiguating year suffix in author-date styles (e.g. "a" in "Doe, 1999a").'
                }
              }
            }
          }
        },
        {
          id: "smart-include",
          anyOf: [
            {
              record: {
                text: {
                  string: {
                    description: "Textual content to add to includes"
                  }
                }
              }
            },
            {
              record: {
                file: {
                  string: {
                    description: "Name of file with content to add to includes"
                  }
                }
              }
            }
          ]
        },
        {
          id: "semver",
          string: {
            pattern: "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
          },
          description: "Version number according to Semantic Versioning"
        },
        {
          id: "quarto-date",
          anyOf: [
            "string",
            {
              object: {
                closed: true,
                properties: {
                  format: "string",
                  value: {
                    ref: "string"
                  }
                },
                required: [
                  "value"
                ]
              }
            }
          ]
        },
        {
          id: "project-profile",
          schema: {
            object: {
              closed: true,
              properties: {
                default: {
                  maybeArrayOf: "string",
                  description: "Default profile to apply if QUARTO_PROFILE is not defined.\n"
                },
                group: {
                  maybeArrayOf: {
                    arrayOf: "string"
                  },
                  description: "Define a profile group for which at least one profile is always active.\n"
                }
              }
            }
          },
          description: "Specify a default profile and profile groups"
        },
        {
          id: "bad-parse-schema",
          schema: {
            object: {
              propertyNames: {
                string: {
                  pattern: "^[^\\s]+$"
                }
              }
            }
          }
        }
      ],
      "schema/document-about.yml": [
        {
          name: "about",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          schema: {
            anyOf: [
              {
                enum: [
                  "jolla",
                  "trestles",
                  "solana",
                  "marquee",
                  "broadside"
                ]
              },
              {
                ref: "website-about"
              }
            ]
          },
          description: {
            short: "Specifies that the page is an 'about' page and which template to use when laying out the page.",
            long: "Specifies that the page is an 'about' page and which template to use when laying out the page.\n\nThe allowed values are either:\n\n- one of the possible template values (`jolla`, `trestles`, `solana`, `marquee`, or `broadside`))\n- an object describing the 'about' page in more detail. See [About Pages](https://quarto.org/docs/websites/website-about.html) for more.\n"
          }
        }
      ],
      "schema/document-attributes.yml": [
        {
          name: "title",
          schema: "string",
          description: "Document title"
        },
        {
          name: "subtitle",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all",
              "$html-all",
              "context",
              "muse",
              "odt"
            ]
          },
          description: "Identifies the subtitle of the document."
        },
        {
          name: "date",
          schema: {
            ref: "date"
          },
          description: "Document date"
        },
        {
          name: "date-modified",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          schema: {
            ref: "date"
          },
          description: "Document date modified"
        },
        {
          name: "author",
          schema: {
            maybeArrayOf: {
              anyOf: [
                "object",
                "string"
              ]
            }
          },
          description: "Author or authors of the document"
        },
        {
          name: "affiliation",
          schema: {
            maybeArrayOf: {
              anyOf: [
                "object",
                "string"
              ]
            }
          },
          tags: {
            formats: [
              "$jats-all"
            ]
          },
          description: {
            short: "The list of organizations with which contributors are affiliated.",
            long: "The list of organizations with which contributors are\naffiliated. Each institution is added as an [`<aff>`] element to\nthe author's contrib-group. See the Pandoc [JATS documentation](https://pandoc.org/jats.html) \nfor details on `affiliation` fields.\n"
          }
        },
        {
          name: "copyright",
          schema: "object",
          tags: {
            formats: [
              "$jats-all"
            ]
          },
          description: {
            short: "Licensing and copyright information.",
            long: "Licensing and copyright information. This information is\nrendered via the [`<permissions>`](https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/permissions.html) element.\nThe variables `type`, `link`, and `text` should always be used\ntogether. See the Pandoc [JATS documentation](https://pandoc.org/jats.html)\nfor details on `copyright` fields.\n"
          }
        },
        {
          name: "article",
          schema: "object",
          tags: {
            formats: [
              "$jats-all"
            ]
          },
          description: {
            short: "Information concerning the article that identifies or describes it.",
            long: "Information concerning the article that identifies or describes\nit. The key-value pairs within this map are typically used\nwithin the [`<article-meta>`](https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/article-meta.html) element.\nSee the Pandoc [JATS documentation](https://pandoc.org/jats.html) for details on `article` fields.\n"
          }
        },
        {
          name: "journal",
          schema: "object",
          tags: {
            formats: [
              "$jats-all"
            ]
          },
          description: {
            short: "Information on the journal in which the article is published.",
            long: "Information on the journal in which the article is published.\nSee the Pandoc [JATS documentation](https://pandoc.org/jats.html) for details on `journal` fields.\n"
          }
        },
        {
          name: "institute",
          schema: {
            maybeArrayOf: {
              anyOf: [
                "object",
                "string"
              ]
            }
          },
          tags: {
            formats: [
              "$html-pres",
              "beamer"
            ]
          },
          description: "Author affiliations for the presentation."
        },
        {
          name: "abstract",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all",
              "$html-doc",
              "$epub-all",
              "$asciidoc-all",
              "$jats-all",
              "context",
              "ms",
              "odt"
            ]
          },
          description: "Summary of document"
        },
        {
          name: "abstract-title",
          schema: "string",
          tags: {
            formats: [
              "$html-doc",
              "$epub-all"
            ]
          },
          description: "Title used to label document abstract"
        },
        {
          name: "notes",
          schema: "string",
          tags: {
            formats: [
              "$jats-all"
            ]
          },
          description: "Additional notes concerning the whole article. Added to the\narticle's frontmatter via the [`<notes>`](https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/notes.html) element.\n"
        },
        {
          name: "tags",
          schema: {
            arrayOf: "string"
          },
          tags: {
            formats: [
              "$jats-all"
            ]
          },
          description: "List of keywords. Items are used as contents of the [`<kwd>`](https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/kwd.html) element; the elements are grouped in a [`<kwd-group>`](https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/kwd-group.html) with the [`kwd-group-type`](https://jats.nlm.nih.gov/publishing/tag-library/1.2/attribute/kwd-group-type.html) value `author`."
        },
        {
          name: "doi",
          schema: "string",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "Displays the document Digital Object Identifier in the header."
        },
        {
          name: "thanks",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "The contents of an acknowledgments footnote after the document title."
        },
        {
          name: "order",
          schema: "number",
          description: "Order for document when included in a website automatic sidebar menu."
        }
      ],
      "schema/document-citation.yml": [
        {
          name: "citation",
          schema: {
            anyOf: [
              {
                ref: "csl-item"
              },
              "boolean"
            ]
          },
          description: {
            short: "Citation information for the document itself.",
            long: "Citation information for the document itself specified as [CSL](https://docs.citationstyles.org/en/stable/specification.html) \nYAML in the document front matter.\n\nFor more on supported options, see [Citation Metadata](https://quarto.org/docs/reference/metadata/citation.html).\n"
          }
        }
      ],
      "schema/document-code.yml": [
        {
          name: "code-copy",
          schema: {
            anyOf: [
              {
                enum: [
                  "hover"
                ]
              },
              "boolean"
            ]
          },
          tags: {
            formats: [
              "$html-all"
            ]
          },
          default: "hover",
          description: {
            short: "Enable a code copy icon for code blocks.",
            long: "Enable a code copy icon for code blocks. \n\n- `true`: Always show the icon\n- `false`: Never show the icon\n- `hover` (default): Show the icon when the mouse hovers over the code block\n"
          }
        },
        {
          name: "code-link",
          schema: "boolean",
          tags: {
            engine: "knitr",
            formats: [
              "$html-files"
            ]
          },
          default: false,
          description: {
            short: "Enables hyper-linking of functions within code blocks \nto their online documentation.\n",
            long: "Enables hyper-linking of functions within code blocks \nto their online documentation.\n\nCode linking is currently implemented only for the knitr engine \n(via the [downlit](https://downlit.r-lib.org/) package).\n"
          }
        },
        {
          name: "code-tools",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              {
                object: {
                  closed: true,
                  properties: {
                    source: {
                      anyOf: [
                        "boolean",
                        "string"
                      ]
                    },
                    toggle: "boolean",
                    caption: "string"
                  }
                }
              }
            ]
          },
          default: false,
          description: {
            short: "Include a code tools menu (for hiding and showing code).",
            long: "Include a code tools menu (for hiding and showing code).\nUse `true` or `false` to enable or disable the standard code \ntools menu. Specify sub-properties `source`, `toggle`, and\n`caption` to customize the behavior and appearnce of code tools.\n"
          }
        },
        {
          name: "code-block-border-left",
          tags: {
            formats: [
              "$html-doc",
              "$pdf-all"
            ]
          },
          schema: {
            anyOf: [
              "string",
              "boolean"
            ]
          },
          description: {
            short: "Show a thick left border on code blocks.",
            long: "Specifies to apply a left border on code blocks. Provide a hex color to specify that the border is\nenabled as well as the color of the border.=\n"
          }
        },
        {
          name: "code-block-bg",
          tags: {
            formats: [
              "$html-doc",
              "$pdf-all"
            ]
          },
          schema: {
            anyOf: [
              "string",
              "boolean"
            ]
          },
          description: {
            short: "Show a background color for code blocks.",
            long: "Specifies to apply a background color on code blocks. Provide a hex color to specify that the background color is\nenabled as well as the color of the background.\n"
          }
        },
        {
          name: "highlight-style",
          tags: {
            formats: [
              "$html-all",
              "docx",
              "ms",
              "$pdf-all"
            ]
          },
          schema: {
            anyOf: [
              {
                object: {
                  closed: true,
                  properties: {
                    light: "path",
                    dark: "path"
                  }
                }
              },
              {
                string: {
                  completions: [
                    "pygments",
                    "tango",
                    "espresso",
                    "zenburn",
                    "kate",
                    "monochrome",
                    "breezedark",
                    "haddock",
                    "arrow",
                    "atom-one",
                    "ayu",
                    "ayu-mirage",
                    "breeze",
                    "dracula",
                    "github",
                    "gruvbox",
                    "mokokai",
                    "nord",
                    "oblivion",
                    "printing",
                    "radical",
                    "solarized",
                    "vim-dark"
                  ]
                }
              }
            ]
          },
          description: {
            short: "Specifies the coloring style to be used in highlighted source code.",
            long: "Specifies the coloring style to be used in highlighted source code.\n\nInstead of a *STYLE* name, a JSON file with extension\n` .theme` may be supplied.  This will be parsed as a KDE\nsyntax highlighting theme and (if valid) used as the\nhighlighting style.\n"
          }
        },
        {
          name: "syntax-definition",
          tags: {
            formats: [
              "$html-all",
              "docx",
              "ms",
              "$pdf-all"
            ]
          },
          schema: "path",
          hidden: true,
          description: "KDE language syntax definition file (XML)"
        },
        {
          name: "syntax-definitions",
          tags: {
            formats: [
              "$html-all",
              "docx",
              "ms",
              "$pdf-all"
            ]
          },
          schema: {
            arrayOf: "path"
          },
          description: "KDE language syntax definition files (XML)"
        },
        {
          name: "listings",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          schema: "boolean",
          description: {
            short: "Use the listings package for LaTeX code blocks.",
            long: "Use the `listings` package for LaTeX code blocks. The package\ndoes not support multi-byte encoding for source code. To handle UTF-8\nyou would need to use a custom template. This issue is fully\ndocumented here: [Encoding issue with the listings package](https://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings#Encoding_issue)\n"
          }
        },
        {
          name: "indented-code-classes",
          tags: {
            formats: [
              "$html-all",
              "docx",
              "ms",
              "$pdf-all"
            ]
          },
          schema: {
            arrayOf: "string"
          },
          description: "Specify classes to use for all indented code blocks"
        }
      ],
      "schema/document-colors.yml": [
        {
          name: "fontcolor",
          schema: "string",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "Sets the CSS `color` property."
        },
        {
          name: "linkcolor",
          schema: "string",
          tags: {
            formats: [
              "$html-doc",
              "context",
              "$pdf-all"
            ]
          },
          description: {
            short: "Sets the color of hyperlinks in the document.",
            long: "For HTML output, sets the CSS `color` property on all links.\n\nFor LaTeX output, The color used for internal links using color options\nallowed by [`xcolor`](https://ctan.org/pkg/xcolor), \nincluding the `dvipsnames`, `svgnames`, and\n`x11names` lists.\n\nFor ConTeXt output, sets the color for both external links and links within the document.\n"
          }
        },
        {
          name: "monobackgroundcolor",
          schema: "string",
          tags: {
            formats: [
              "html",
              "html4",
              "html5",
              "slidy",
              "slideous",
              "s5",
              "dzslides"
            ]
          },
          description: "Sets the CSS `background-color` property on code elements and adds extra padding."
        },
        {
          name: "backgroundcolor",
          schema: "string",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "Sets the CSS `background-color` property on the html element.\n"
        },
        {
          name: "filecolor",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The color used for external links using color options allowed by `xcolor`",
            long: "The color used for external links using color options\nallowed by [`xcolor`](https://ctan.org/pkg/xcolor), \nincluding the `dvipsnames`, `svgnames`, and\n`x11names` lists.\n"
          }
        },
        {
          name: "citecolor",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The color used for citation links using color options allowed by `xcolor`",
            long: "The color used for citation links using color options\nallowed by [`xcolor`](https://ctan.org/pkg/xcolor), \nincluding the `dvipsnames`, `svgnames`, and\n`x11names` lists.\n"
          }
        },
        {
          name: "urlcolor",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The color used for linked URLs using color options allowed by `xcolor`",
            long: "The color used for linked URLs using color options\nallowed by [`xcolor`](https://ctan.org/pkg/xcolor), \nincluding the `dvipsnames`, `svgnames`, and\n`x11names` lists.\n"
          }
        },
        {
          name: "toccolor",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The color used for links in the Table of Contents using color options allowed by `xcolor`",
            long: "The color used for links in the Table of Contents using color options\nallowed by [`xcolor`](https://ctan.org/pkg/xcolor), \nincluding the `dvipsnames`, `svgnames`, and\n`x11names` lists.\n"
          }
        },
        {
          name: "colorlinks",
          schema: "boolean",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          default: true,
          description: "Add color to link text, automatically enabled if any of \n`linkcolor`, `filecolor`, `citecolor`, `urlcolor`, or `toccolor` are set.\n"
        },
        {
          name: "contrastcolor",
          schema: "string",
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "Color for links to other content within the document.",
            long: "Color for links to other content within the document. \n\nSee [ConTeXt Color](https://wiki.contextgarden.net/Color) for additional information.\n"
          }
        }
      ],
      "schema/document-comments.yml": [
        {
          name: "comments",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          schema: {
            ref: "comments"
          },
          description: "Configuration for document commenting."
        }
      ],
      "schema/document-crossref.yml": [
        {
          name: "crossref",
          description: "Configuration for crossref labels and prefixes.",
          schema: {
            anyOf: [
              {
                enum: [
                  false
                ]
              },
              {
                object: {
                  closed: true,
                  properties: {
                    chapters: {
                      boolean: {
                        description: "Use top level sections (H1) in this document as chapters.",
                        default: false
                      }
                    },
                    "title-delim": {
                      string: {
                        description: "The delimiter used between the prefix and the caption."
                      }
                    },
                    "fig-title": {
                      string: {
                        description: "The title prefix used for figure captions."
                      }
                    },
                    "tbl-title": {
                      string: {
                        description: "The title prefix used for table captions."
                      }
                    },
                    "eq-title": {
                      string: {
                        description: "The title prefix used for equation captions."
                      }
                    },
                    "lst-title": {
                      string: {
                        description: "The title prefix used for listing captions."
                      }
                    },
                    "thm-title": {
                      string: {
                        description: "The title prefix used for theorem captions."
                      }
                    },
                    "lem-title": {
                      string: {
                        description: "The title prefix used for lemma captions."
                      }
                    },
                    "cor-title": {
                      string: {
                        description: "The title prefix used for corollary captions."
                      }
                    },
                    "prp-title": {
                      string: {
                        description: "The title prefix used for proposition captions."
                      }
                    },
                    "cnj-title": {
                      string: {
                        description: "The title prefix used for conjecture captions."
                      }
                    },
                    "def-title": {
                      string: {
                        description: "The title prefix used for definition captions."
                      }
                    },
                    "exm-title": {
                      string: {
                        description: "The title prefix used for example captions."
                      }
                    },
                    "exr-title": {
                      string: {
                        description: "The title prefix used for exercise captions."
                      }
                    },
                    "fig-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a figure."
                      }
                    },
                    "tbl-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a table."
                      }
                    },
                    "eq-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to an equation."
                      }
                    },
                    "sec-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a section."
                      }
                    },
                    "lst-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a listing."
                      }
                    },
                    "thm-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a theorem."
                      }
                    },
                    "lem-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a lemma."
                      }
                    },
                    "cor-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a corollary."
                      }
                    },
                    "prp-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a proposition."
                      }
                    },
                    "cnj-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a conjecture."
                      }
                    },
                    "def-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to a definition."
                      }
                    },
                    "exm-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to an example."
                      }
                    },
                    "exr-prefix": {
                      string: {
                        description: "The prefix used for an inline reference to an exercise."
                      }
                    },
                    "fig-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for figures."
                    },
                    "tbl-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for tables."
                    },
                    "eq-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for equations."
                    },
                    "sec-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for sections."
                    },
                    "lst-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for listings."
                    },
                    "thm-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for theorems."
                    },
                    "lem-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for lemmas."
                    },
                    "cor-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for corollaries."
                    },
                    "prp-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for propositions."
                    },
                    "cnj-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for conjectures."
                    },
                    "def-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for definitions."
                    },
                    "exm-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for examples."
                    },
                    "exr-labels": {
                      ref: "crossref-labels-schema",
                      description: "The numbering scheme used for exercises."
                    },
                    "lof-title": {
                      string: {
                        description: "The title used for the list of figures."
                      }
                    },
                    "lot-title": {
                      string: {
                        description: "The title used for the list of tables."
                      }
                    },
                    "lol-title": {
                      string: {
                        description: "The title used for the list of listings."
                      }
                    },
                    labels: {
                      ref: "crossref-labels-schema",
                      description: "The number scheme used for references."
                    },
                    "subref-labels": {
                      ref: "crossref-labels-schema",
                      description: "The number scheme used for sub references."
                    },
                    "ref-hyperlink": {
                      boolean: {
                        default: true,
                        description: "Whether cross references should be hyper-linked."
                      }
                    },
                    "appendix-title": {
                      string: {
                        description: "The title used for appendix."
                      }
                    },
                    "appendix-delim": {
                      string: {
                        description: "The delimiter beween appendix number and title."
                      }
                    }
                  }
                }
              }
            ]
          }
        }
      ],
      "schema/document-editor.yml": [
        {
          name: "editor",
          schema: {
            anyOf: [
              {
                enum: [
                  "source",
                  "visual"
                ]
              },
              {
                object: {
                  hidden: true,
                  properties: {
                    mode: {
                      enum: [
                        "source",
                        "visual"
                      ],
                      description: "Default editing mode for document"
                    },
                    markdown: {
                      object: {
                        properties: {
                          wrap: {
                            anyOf: [
                              {
                                enum: [
                                  "sentence",
                                  "none"
                                ]
                              },
                              "number"
                            ],
                            description: "A column number (e.g. 72), `sentence`, or `none`"
                          },
                          canonical: {
                            boolean: {
                              description: "Write standard visual editor markdown from source mode."
                            }
                          },
                          references: {
                            object: {
                              properties: {
                                location: {
                                  schema: {
                                    enum: [
                                      "block",
                                      "section",
                                      "document"
                                    ],
                                    description: "Location to write references (`block`, `section`, or `document`)"
                                  }
                                },
                                prefix: {
                                  string: {
                                    description: "Unique prefix for references (`none` to prevent automatic prefixes)"
                                  }
                                }
                              }
                            },
                            description: "Reference writing options for visual editor"
                          }
                        }
                      },
                      description: "Markdown writing options for visual editor"
                    }
                  }
                }
              }
            ]
          },
          description: "Visual editor configuration"
        }
      ],
      "schema/document-epub.yml": [
        {
          name: "identifier",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: {
            anyOf: [
              "string",
              {
                object: {
                  closed: true,
                  properties: {
                    text: {
                      string: {
                        description: "The identifier value."
                      }
                    },
                    schema: {
                      enum: [
                        "ISBN-10",
                        "GTIN-13",
                        "UPC",
                        "ISMN-10",
                        "DOI",
                        "LCCN",
                        "GTIN-14",
                        "ISBN-13",
                        "Legal deposit number",
                        "URN",
                        "OCLC",
                        "ISMN-13",
                        "ISBN-A",
                        "JP",
                        "OLCC"
                      ],
                      description: "The identifier schema (e.g. `DOI`, `ISBN-A`, etc.)"
                    }
                  }
                }
              }
            ]
          },
          description: "The identifier for this publication."
        },
        {
          name: "creator",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: {
            ref: "epub-contributor"
          },
          description: "Creators of this publication."
        },
        {
          name: "contributor",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: {
            ref: "epub-contributor"
          },
          description: "Contributors to this publication."
        },
        {
          name: "subject",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: {
            anyOf: [
              "string",
              {
                object: {
                  closed: true,
                  properties: {
                    text: {
                      string: {
                        description: "The subject text."
                      }
                    },
                    authority: {
                      string: {
                        description: "An EPUB reserved authority value."
                      }
                    },
                    term: {
                      string: {
                        description: "The subject term (defined by the schema)."
                      }
                    }
                  }
                }
              }
            ]
          },
          description: "The subject of the publication."
        },
        {
          name: "type",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "string",
          description: {
            short: "Text describing the specialized type of this publication.",
            long: "Text describing the specialized type of this publication.\n\nAn informative registry of specialized EPUB Publication \ntypes for use with this element is maintained in the \n[TypesRegistry](https://www.w3.org/publishing/epub3/epub-packages.html#bib-typesregistry), \nbut Authors may use any text string as a value.\n"
          }
        },
        {
          name: "format",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "string",
          description: "Text describing the format of this publication."
        },
        {
          name: "relation",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "string",
          description: "Text describing the relation of this publication."
        },
        {
          name: "coverage",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "string",
          description: "Text describing the coverage of this publication."
        },
        {
          name: "rights",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "string",
          description: "Text describing the rights of this publication."
        },
        {
          name: "belongs-to-collection",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "string",
          description: "Identifies the name of a collection to which the EPUB Publication belongs."
        },
        {
          name: "group-position",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "number",
          description: "Indicates the numeric position in which this publication \nbelongs relative to other works belonging to the same \n`belongs-to-collection` field.\n"
        },
        {
          name: "page-progression-direction",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: {
            enum: [
              "ltr",
              "rtl"
            ]
          },
          description: "Sets the global direction in which content flows (`ltr` or `rtl`)"
        },
        {
          name: "ibooks",
          description: "iBooks specific metadata options.",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: {
            object: {
              closed: true,
              properties: {
                version: {
                  string: {
                    description: "What is new in this version of the book."
                  }
                },
                "specified-fonts": {
                  boolean: {
                    description: "Whether this book provides embedded fonts in a flowing or fixed layout book."
                  }
                },
                "scroll-axis": {
                  enum: [
                    "vertical",
                    "horizontal",
                    "default"
                  ],
                  description: "The scroll direction for this book (`vertical`, `horizontal`, or `default`)"
                }
              }
            }
          }
        },
        {
          name: "epub-metadata",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "path",
          description: {
            short: "Look in the specified XML file for metadata for the EPUB.\nThe file should contain a series of [Dublin Core elements](https://www.dublincore.org/specifications/dublin-core/dces/).\n",
            long: 'Look in the specified XML file for metadata for the EPUB.\nThe file should contain a series of [Dublin Core elements](https://www.dublincore.org/specifications/dublin-core/dces/).\nFor example:\n\n```xml\n<dc:rights>Creative Commons</dc:rights>\n<dc:language>es-AR</dc:language>\n```\n\nBy default, pandoc will include the following metadata elements:\n`<dc:title>` (from the document title), `<dc:creator>` (from the\ndocument authors), `<dc:date>` (from the document date, which should\nbe in [ISO 8601 format]), `<dc:language>` (from the `lang`\nvariable, or, if is not set, the locale), and `<dc:identifier\nid="BookId">` (a randomly generated UUID). Any of these may be\noverridden by elements in the metadata file.\n\nNote: if the source document is Markdown, a YAML metadata block\nin the document can be used instead.\n'
          }
        },
        {
          name: "epub-subdirectory",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: {
            anyOf: [
              "path",
              null
            ]
          },
          default: "EPUB",
          description: "Specify the subdirectory in the OCF container that is to hold the\nEPUB-specific contents. The default is `EPUB`. To put the EPUB \ncontents in the top level, use an empty string.\n"
        },
        {
          name: "epub-fonts",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: {
            arrayOf: "path"
          },
          description: {
            short: "Embed the specified fonts in the EPUB",
            long: 'Embed the specified fonts in the EPUB. Wildcards can also be used: for example,\n`DejaVuSans-*.ttf`. To use the embedded fonts, you will need to add declarations\nlike the following to your CSS:\n\n```css\n@font-face {\n  font-family: DejaVuSans;\n  font-style: normal;\n  font-weight: normal;\n  src:url("DejaVuSans-Regular.ttf");\n}\n```\n'
          }
        },
        {
          name: "epub-chapter-level",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "number",
          default: 1,
          description: {
            short: "Specify the heading level at which to split the EPUB into separate\nchapter files.\n",
            long: "Specify the heading level at which to split the EPUB into separate\nchapter files. The default is to split into chapters at level-1\nheadings. This option only affects the internal composition of the\nEPUB, not the way chapters and sections are displayed to users. Some\nreaders may be slow if the chapter files are too large, so for large\ndocuments with few level-1 headings, one might want to use a chapter\nlevel of 2 or 3.\n"
          }
        },
        {
          name: "epub-cover-image",
          tags: {
            formats: [
              "$epub-all"
            ]
          },
          schema: "path",
          description: "Use the specified image as the EPUB cover. It is recommended\nthat the image be less than 1000px in width and height.\n"
        }
      ],
      "schema/document-execute.yml": [
        {
          name: "engine",
          hidden: true,
          schema: {
            string: {
              completions: [
                "jupyter",
                "knitr"
              ]
            }
          },
          description: "Engine used for executable code blocks."
        },
        {
          name: "jupyter",
          schema: {
            anyOf: [
              "boolean",
              "string",
              {
                object: {
                  hidden: true,
                  properties: {
                    kernelspec: {
                      object: {
                        properties: {
                          display_name: {
                            string: {
                              description: "The name to display in the UI."
                            }
                          },
                          language: {
                            string: {
                              description: "The name of the language the kernel implements."
                            }
                          },
                          name: {
                            string: {
                              description: "The name of the kernel."
                            }
                          }
                        },
                        required: "all"
                      }
                    }
                  }
                }
              }
            ]
          },
          description: "Configures the Jupyter engine."
        },
        {
          name: "knitr",
          schema: {
            anyOf: [
              "boolean",
              {
                object: {
                  closed: true,
                  properties: {
                    opts_knit: {
                      object: {
                        description: "Knit options."
                      }
                    },
                    opts_chunk: {
                      object: {
                        description: "Knitr chunk options."
                      }
                    }
                  }
                }
              }
            ]
          },
          description: "Set Knitr options."
        },
        {
          name: "cache",
          tags: {
            "execute-only": true
          },
          schema: {
            anyOf: [
              "boolean",
              {
                enum: [
                  "refresh"
                ]
              }
            ]
          },
          default: false,
          description: {
            short: "Cache results of computations.",
            long: "Cache results of computations (using the [knitr cache](https://yihui.org/knitr/demo/cache/) \nfor R documents, and [Jupyter Cache](https://jupyter-cache.readthedocs.io/en/latest/) \nfor Jupyter documents).\n\nNote that cache invalidation is triggered by changes in chunk source code \n(or other cache attributes you've defined). \n\n- `true`: Cache results\n- `false`: Do not cache results\n- `refresh`: Force a refresh of the cache even if has not been otherwise invalidated.\n"
          }
        },
        {
          name: "freeze",
          tags: {
            "execute-only": true
          },
          schema: {
            anyOf: [
              "boolean",
              {
                enum: [
                  "auto"
                ]
              }
            ]
          },
          default: false,
          description: {
            short: "Re-use previous computational output when rendering",
            long: "Control the re-use of previous computational output when rendering.\n\n- `true`: Never recompute previously generated computational output during a global project render\n- `false` (default): Recompute previously generated computational output\n- `auto`: Re-compute previously generated computational output only in case their source file changes\n"
          }
        },
        {
          name: "server",
          hidden: true,
          schema: {
            anyOf: [
              {
                enum: [
                  "shiny"
                ]
              },
              {
                object: {
                  properties: {
                    type: {
                      enum: [
                        "shiny"
                      ],
                      description: "Type of server to run behind the document (e.g. `shiny`)"
                    },
                    "ojs-export": {
                      maybeArrayOf: "string",
                      description: "OJS variables to export to server."
                    },
                    "ojs-import": {
                      maybeArrayOf: "string",
                      description: "Server reactive values to import into OJS."
                    }
                  }
                }
              }
            ]
          },
          description: "Document server"
        },
        {
          name: "daemon",
          hidden: true,
          schema: {
            anyOf: [
              "number",
              "boolean"
            ]
          },
          default: 300,
          description: {
            short: "Run Jupyter kernels within a peristent daemon (to mitigate kernel startup time).",
            long: "Run Jupyter kernels within a peristent daemon (to mitigate kernel startup time).\nBy default a daemon with a timeout of 300 seconds will be used. Set `daemon`\nto another timeout value or to `false` to disable it altogether.\n"
          }
        },
        {
          name: "daemon-restart",
          schema: "boolean",
          hidden: true,
          default: false,
          description: "Restart any running Jupyter daemon before rendering."
        },
        {
          name: "enabled",
          schema: "boolean",
          default: true,
          hidden: true,
          description: "Enable code cell execution."
        },
        {
          name: "ipynb",
          schema: "boolean",
          default: false,
          hidden: true,
          description: "Execute code cell execution in Jupyter notebooks."
        },
        {
          name: "debug",
          hidden: true,
          schema: "boolean",
          default: false,
          description: "Show code-execution related debug information."
        }
      ],
      "schema/document-figures.yml": [
        {
          name: "fig-width",
          schema: "number",
          description: {
            short: "Default width for figures generated by Matplotlib or R graphics",
            long: "Default width for figures generated by Matplotlib or R graphics.\n\nNote that with the Jupyter engine, this option has no effect when\nprovided at the cell level; it can only be provided with\ndocument or project metadata.\n"
          }
        },
        {
          name: "fig-height",
          schema: "number",
          description: {
            short: "Default height for figures generated by Matplotlib or R graphics",
            long: "Default width for figures generated by Matplotlib or R graphics.\n\nNote that with the Jupyter engine, this option has no effect when\nprovided at the cell level; it can only be provided with\ndocument or project metadata.\n"
          }
        },
        {
          name: "fig-format",
          schema: {
            enum: [
              "retina",
              "png",
              "jpeg",
              "svg",
              "pdf"
            ]
          },
          description: "Default format for figures generated by Matplotlib or R graphics (`retina`, `png`, `jpeg`, `svg`, or `pdf`)"
        },
        {
          name: "fig-dpi",
          schema: "number",
          description: {
            short: "Default DPI for figures generated by Matplotlib or R graphics",
            long: "Default DPI for figures generated by Matplotlib or R graphics.\n\nNote that with the Jupyter engine, this option has no effect when\nprovided at the cell level; it can only be provided with\ndocument or project metadata.\n"
          }
        },
        {
          name: "fig-asp",
          tags: {
            engine: "knitr"
          },
          schema: "number",
          description: {
            short: "The aspect ratio of the plot, i.e., the ratio of height/width.\n",
            long: "The aspect ratio of the plot, i.e., the ratio of height/width. When `fig-asp` is specified, \nthe height of a plot (the option `fig-height`) is calculated from `fig-width * fig-asp`.\n\nThe `fig-asp` option is only available within the knitr engine.\n"
          }
        },
        {
          name: "fig-responsive",
          tags: {
            formats: [
              "$html-all"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Whether to make images in this document responsive."
        }
      ],
      "schema/document-fonts.yml": [
        {
          name: "mainfont",
          schema: "string",
          tags: {
            formats: [
              "$html-doc",
              "context",
              "$pdf-all"
            ]
          },
          description: {
            short: "Sets the main font for the document.",
            long: "For HTML output, sets the CSS `font-family` on the HTML element.\n\nFor LaTeX output, the main font family for use with `xelatex` or \n`lualatex`. Takes the name of any system font, using the\n[`fontspec`](https://ctan.org/pkg/fontspec) package. \n\nFor ConTeXt output, the main font family. Use the name of any \nsystem font. See [ConTeXt Fonts](https://wiki.contextgarden.net/Fonts) for more\ninformation.\n"
          }
        },
        {
          name: "monofont",
          schema: "string",
          tags: {
            formats: [
              "$html-doc",
              "context",
              "$pdf-all"
            ]
          },
          description: {
            short: "Sets the font used for when displaying code.",
            long: "For HTML output, sets the CSS font-family property on code elements.\n\nFor PowerPoint output, sets the font used for code.\n\nFor LaTeX output, the monospace font family for use with `xelatex` or \n`lualatex`: take the name of any system font, using the\n[`fontspec`](https://ctan.org/pkg/fontspec) package.  \n\nFor ConTeXt output, the monspace font family. Use the name of any \nsystem font. See [ConTeXt Fonts](https://wiki.contextgarden.net/Fonts) for more\ninformation.\n"
          }
        },
        {
          name: "fontsize",
          schema: "string",
          tags: {
            formats: [
              "$html-doc",
              "context",
              "$pdf-all"
            ]
          },
          description: {
            short: "Sets the main font size for the document.",
            long: "For HTML output, sets the base CSS `font-size` property.\n\nFor LaTeX and ConTeXt output, sets the font size for the document body text.\n"
          }
        },
        {
          name: "fontenc",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          default: "T1",
          description: {
            short: "Allows font encoding to be specified through `fontenc` package.",
            long: "Allows font encoding to be specified through [`fontenc`](https://www.ctan.org/pkg/fontenc) package.\n\nSee [LaTeX Font Encodings Guide](https://ctan.org/pkg/encguide) for addition information on font encoding.\n"
          }
        },
        {
          name: "fontfamily",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all",
              "ms"
            ]
          },
          default: "Latin Modern",
          description: {
            short: "Font package to use when compiling a PDF with the `pdflatex` `pdf-engine`.",
            long: "Font package to use when compiling a PDf with the `pdflatex` `pdf-engine`. \n\nSee [The LaTeX Font Catalogue](https://tug.org/FontCatalogue/) for a \nsummary of font options available.\n\nFor groff (`ms`) files, the font family for example, `T` or `P`.\n"
          }
        },
        {
          name: "fontfamilyoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "Options for the package used as `fontfamily`.",
            long: "Options for the package used as `fontfamily`.\n\nFor example, to use the Libertine font with proportional lowercase\n(old-style) figures through the [`libertinus`](https://ctan.org/pkg/libertinus) package:\n\n```yaml\nfontfamily: libertinus\nfontfamilyoptions:\n  - osf\n  - p\n```\n"
          }
        },
        {
          name: "sansfont",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The sans serif font family for use with `xelatex` or `lualatex`.",
            long: "The sans serif font family for use with `xelatex` or \n`lualatex`. Takes the name of any system font, using the\n[`fontspec`](https://ctan.org/pkg/fontspec) package.\n"
          }
        },
        {
          name: "mathfont",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The math font family for use with `xelatex` or `lualatex`.",
            long: "The math font family for use with `xelatex` or \n`lualatex`. Takes the name of any system font, using the\n[`fontspec`](https://ctan.org/pkg/fontspec) package.\n"
          }
        },
        {
          name: "CJKmainfont",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The CJK main font family for use with `xelatex` or `lualatex`.",
            long: "The CJK main font family for use with `xelatex` or \n`lualatex` using the [`xecjk`](https://ctan.org/pkg/xecjk) package.\n"
          }
        },
        {
          name: "mainfontoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The main font options for use with `xelatex` or `lualatex`.",
            long: "The main font options for use with `xelatex` or `lualatex` allowing\nany options available through [`fontspec`](https://ctan.org/pkg/fontspec).\n\nFor example, to use the [TeX Gyre](http://www.gust.org.pl/projects/e-foundry/tex-gyre) \nversion of Palatino with lowercase figures:\n\n```yaml\nmainfont: TeX Gyre Pagella\nmainfontoptions:\n  - Numbers=Lowercase\n  - Numbers=Proportional    \n```\n"
          }
        },
        {
          name: "sansfontoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The sans serif font options for use with `xelatex` or `lualatex`.",
            long: "The sans serif font options for use with `xelatex` or `lualatex` allowing\nany options available through [`fontspec`](https://ctan.org/pkg/fontspec).\n"
          }
        },
        {
          name: "monofontoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The monospace font options for use with `xelatex` or `lualatex`.",
            long: "The monospace font options for use with `xelatex` or `lualatex` allowing\nany options available through [`fontspec`](https://ctan.org/pkg/fontspec).\n"
          }
        },
        {
          name: "mathfontoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The math font options for use with `xelatex` or `lualatex`.",
            long: "The math font options for use with `xelatex` or `lualatex` allowing\nany options available through [`fontspec`](https://ctan.org/pkg/fontspec).\n"
          }
        },
        {
          name: "CJKoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "The CJK font options for use with `xelatex` or `lualatex`.",
            long: "The CJK font options for use with `xelatex` or `lualatex` allowing\nany options available through [`fontspec`](https://ctan.org/pkg/fontspec).\n"
          }
        },
        {
          name: "microtypeoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "Options to pass to the microtype package.",
            long: "Options to pass to the [microtype](https://ctan.org/pkg/microtype) package."
          }
        },
        {
          name: "pointsize",
          schema: "string",
          tags: {
            formats: [
              "ms"
            ]
          },
          description: "The point size, for example, `10p`."
        },
        {
          name: "lineheight",
          schema: "string",
          tags: {
            formats: [
              "ms"
            ]
          },
          description: "The line height, for example, `12p`."
        },
        {
          name: "linestretch",
          schema: {
            anyOf: [
              "string",
              "number"
            ]
          },
          tags: {
            formats: [
              "$html-doc",
              "context",
              "$pdf-all"
            ]
          },
          description: {
            short: "Sets the line height or spacing for text in the document.",
            long: "For HTML output sets the CSS `line-height` property on the html \nelement, which is preferred to be unitless.\n\nFor LaTeX output, adjusts line spacing using the \n[setspace](https://ctan.org/pkg/setspace) package, e.g. 1.25, 1.5.\n"
          }
        },
        {
          name: "interlinespace",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "context"
            ]
          },
          description: "Adjusts line spacing using the `\\setupinterlinespace` command."
        },
        {
          name: "linkstyle",
          schema: {
            string: {
              completions: [
                "normal",
                "bold",
                "slanted",
                "boldslanted",
                "type",
                "cap",
                "small"
              ]
            }
          },
          tags: {
            formats: [
              "context"
            ]
          },
          description: "The typeface style for links in the document."
        },
        {
          name: "whitespace",
          schema: "string",
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "Set the spacing between paragraphs, for example `none`, `small.",
            long: "Set the spacing between paragraphs, for example `none`, `small` \nusing the [`setupwhitespace`](https://wiki.contextgarden.net/Command/setupwhitespace) \ncommand.\n"
          }
        }
      ],
      "schema/document-footnotes.yml": [
        {
          name: "footnotes-hover",
          schema: "boolean",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          default: true,
          description: "Enables a hover popup for footnotes that shows the footnote contents."
        },
        {
          name: "links-as-notes",
          schema: "boolean",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          default: false,
          description: "Causes links to be printed as footnotes."
        },
        {
          name: "reference-location",
          tags: {
            formats: [
              "$markdown-all",
              "muse",
              "$html-files",
              "pdf"
            ]
          },
          schema: {
            enum: [
              "block",
              "section",
              "margin",
              "document"
            ]
          },
          default: "document",
          description: {
            short: "Location for footnotes and references\n",
            long: "Specify location for footnotes. Also controls the location of references, if `reference-links` is set.\n\n- `block`: Place at end of current top-level block\n- `section`: Place at end of current section\n- `margin`: Place at the margin\n- `document`: Place at end of document\n"
          }
        }
      ],
      "schema/document-formatting.yml": [
        {
          name: "indenting",
          schema: {
            maybeArrayOf: {
              string: {
                completions: [
                  "yes",
                  "no",
                  "none",
                  "small",
                  "medium",
                  "big",
                  "first",
                  "next",
                  "odd",
                  "even",
                  "normal"
                ]
              }
            }
          },
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "Set the indentation of paragraphs with one or more options.",
            long: "Set the indentation of paragraphs with one or more options.\n\nSee [ConTeXt Indentation](https://wiki.contextgarden.net/Indentation) for additional information.\n"
          }
        },
        {
          name: "adjusting",
          schema: {
            enum: [
              "l",
              "r",
              "c",
              "b"
            ]
          },
          tags: {
            formats: [
              "man"
            ]
          },
          description: "Adjusts text to the left, right, center, or both margins (`l`, `r`, `c`, or `b`)."
        },
        {
          name: "hyphenate",
          schema: "boolean",
          default: true,
          tags: {
            formats: [
              "man"
            ]
          },
          description: {
            short: "Whether to hyphenate text at line breaks even in words that do not contain hyphens.",
            long: "Whether to hyphenate text at line breaks even in words that do not contain \nhyphens if it is necessary to do so to lay out words on a line without excessive spacing\n"
          }
        }
      ],
      "schema/document-hidden.yml": [
        {
          name: "to",
          alias: "writer",
          schema: "string",
          default: "html",
          hidden: true,
          description: {
            short: "Format to write to (e.g. html)",
            long: "Format to write to. Extensions can be individually enabled or disabled by appending +EXTENSION or -EXTENSION to the format name (e.g. gfm+footnotes)\n"
          }
        },
        {
          name: "input-file",
          schema: "path",
          hidden: true,
          description: "Input file to read from"
        },
        {
          name: "input-files",
          schema: {
            arrayOf: "path"
          },
          hidden: true,
          description: "Input files to read from"
        },
        {
          name: "defaults",
          schema: {
            arrayOf: "path"
          },
          hidden: true,
          description: "Include options from the specified defaults files"
        },
        {
          name: "variables",
          schema: "object",
          hidden: true,
          description: "Pandoc metadata variables"
        },
        {
          name: "metadata",
          schema: "object",
          hidden: true,
          description: "Pandoc metadata variables"
        },
        {
          name: "request-headers",
          schema: {
            ref: "pandoc-format-request-headers"
          },
          hidden: true,
          description: "Headers to include with HTTP requests by Pandoc"
        },
        {
          name: "trace",
          schema: "boolean",
          default: false,
          description: "Display trace debug output."
        },
        {
          name: "fail-if-warnings",
          schema: "boolean",
          default: false,
          description: "Exit with error status if there are any warnings."
        },
        {
          name: "dump-args",
          schema: "boolean",
          default: false,
          hidden: true,
          description: "Print information about command-line arguments to *stdout*, then exit."
        },
        {
          name: "ignore-args",
          schema: "boolean",
          default: false,
          hidden: true,
          description: "Ignore command-line arguments (for use in wrapper scripts)."
        },
        {
          name: "file-scope",
          schema: "boolean",
          hidden: true,
          default: false,
          description: "Parse each file individually before combining for multifile documents."
        },
        {
          name: "data-dir",
          schema: "path",
          hidden: true,
          description: "Specify the user data directory to search for pandoc data files."
        },
        {
          name: "verbosity",
          schema: {
            enum: [
              "ERROR",
              "WARNING",
              "INFO"
            ]
          },
          default: "WARNING",
          hidden: true,
          description: "Level of program output (`INFO`, `ERROR`, or `WARNING`)"
        },
        {
          name: "log-file",
          hidden: true,
          schema: "path",
          description: "Write log messages in machine-readable JSON format to FILE."
        },
        {
          name: "track-changes",
          tags: {
            formats: [
              "docx"
            ]
          },
          hidden: true,
          schema: {
            enum: [
              "accept",
              "reject",
              "all"
            ]
          },
          default: "accept",
          description: {
            short: "Specify what to do with insertions, deletions, and comments produced by \nthe MS Word \u201CTrack Changes\u201D feature.\n",
            long: 'Specify what to do with insertions, deletions, and comments\nproduced by the MS Word "Track Changes" feature.  \n\n- `accept` (default): Process all insertions and deletions.\n- `reject`: Ignore them.\n- `all`: Include all insertions, deletions, and comments, wrapped\n  in spans with `insertion`, `deletion`, `comment-start`, and\n  `comment-end` classes, respectively. The author and time of\n  change is included. \n\nNotes:\n\n- Both `accept` and `reject` ignore comments.\n\n- `all` is useful for scripting: only\n  accepting changes from a certain reviewer, say, or before a\n  certain date. If a paragraph is inserted or deleted,\n  `track-changes: all` produces a span with the class\n  `paragraph-insertion`/`paragraph-deletion` before the\n  affected paragraph break. \n\n- This option only affects the docx reader.\n'
          }
        },
        {
          name: "strip-empty-paragraphs",
          schema: "boolean",
          hidden: true,
          description: {
            short: "Ignore paragraphs with no content.",
            long: "*Deprecated.  Use the `+empty_paragraphs` extension instead.*\nIgnore paragraphs with no content.  This option is useful\nfor converting word processing documents where users have\nused empty paragraphs to create inter-paragraph space.\n"
          }
        },
        {
          name: "keep-source",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          schema: "boolean",
          default: false,
          hidden: true,
          description: {
            short: "Embed the input file source code in the generated HTML",
            long: "Embed the input file source code in the generated HTML. A hidden div with \nclass `quarto-embedded-source-code` will be added to the document. This\noption is not normally used directly but rather in the implementation\nof the `code-tools` option.\n"
          }
        },
        {
          name: "keep-hidden",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          schema: "boolean",
          default: false,
          hidden: true,
          description: "Keep hidden source code and output (marked with class `.hidden`)"
        },
        {
          name: "prefer-html",
          tags: {
            formats: [
              "$markdown-all"
            ]
          },
          schema: "boolean",
          default: false,
          hidden: true,
          description: {
            short: "Generate HTML output (if necessary) even when targeting markdown.",
            long: "Generate HTML output (if necessary) even when targeting markdown. Enables the \nembedding of more sophisticated output (e.g. Jupyter widgets) in markdown.\n"
          }
        },
        {
          name: "output-divs",
          schema: "boolean",
          default: true,
          hidden: true,
          description: "Indicates that computational output should not be written within divs. \nThis is necessary for some formats (e.g. `pptx`) to properly layout\nfigures.\n"
        },
        {
          name: "merge-includes",
          schema: "boolean",
          default: true,
          hidden: true,
          description: "Disable merging of string based and file based includes (some formats, \nspecifically ePub, do not correctly handle this merging)\n"
        }
      ],
      "schema/document-includes.yml": [
        {
          name: "header-includes",
          disabled: [
            "$office-all",
            "$jats-all",
            "ipynb"
          ],
          hidden: true,
          schema: {
            maybeArrayOf: "string"
          },
          description: "Content to include at the end of the document header."
        },
        {
          name: "include-before",
          disabled: [
            "$office-all",
            "$jats-all",
            "ipynb"
          ],
          hidden: true,
          schema: {
            maybeArrayOf: "string"
          },
          description: "Content to include at the beginning of the document body (e.g. after the `<body>` tag in HTML, or the `\\begin{document}` command in LaTeX)."
        },
        {
          name: "include-after",
          disabled: [
            "$office-all",
            "$jats-all",
            "ipynb"
          ],
          hidden: true,
          schema: {
            maybeArrayOf: "string"
          },
          description: "Content to include at the end of the document body (before the `</body>` tag in HTML, or the `\\end{document}` command in LaTeX)."
        },
        {
          name: "include-before-body",
          disabled: [
            "$office-all",
            "$jats-all",
            "ipynb"
          ],
          schema: {
            maybeArrayOf: {
              anyOf: [
                "path",
                {
                  ref: "smart-include"
                }
              ]
            }
          },
          description: 'Include contents at the beginning of the document body\n(e.g. after the `<body>` tag in HTML, or the `\\begin{document}` command \nin LaTeX).\n\nA string value or an object with key "file" indicates a filename whose contents are to be included\n\nAn object with key "text" indicates textual content to be included\n'
        },
        {
          name: "include-after-body",
          disabled: [
            "$office-all",
            "$jats-all",
            "ipynb"
          ],
          schema: {
            maybeArrayOf: {
              anyOf: [
                "path",
                {
                  ref: "smart-include"
                }
              ]
            }
          },
          description: 'Include contents at the end of the document body (before\nthe `</body>` tag in HTML, or the `\\end{document}` command in LaTeX).\n\nA string value or an object with key "file" indicates a filename whose contents are to be included\n\nAn object with key "text" indicates textual content to be included\n'
        },
        {
          name: "include-in-header",
          disabled: [
            "$office-all",
            "$jats-all",
            "ipynb"
          ],
          schema: {
            maybeArrayOf: {
              anyOf: [
                "path",
                {
                  ref: "smart-include"
                }
              ]
            }
          },
          description: 'Include contents at the end of the header. This can\nbe used, for example, to include special CSS or JavaScript in HTML \ndocuments.\n\nA string value or an object with key "file" indicates a filename whose contents are to be included\n\nAn object with key "text" indicates textual content to be included\n'
        },
        {
          name: "resources",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$html-all"
            ]
          },
          description: "Path (or glob) to files to publish with this document."
        },
        {
          name: "headertext",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "Text to be in a running header.",
            long: "Text to be in a running header.\n\nProvide a single option or up to four options for different placements \n(odd page inner, odd page outer, even page innner, even page outer).\n"
          }
        },
        {
          name: "footertext",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "Text to be in a running footer.",
            long: "Text to be in a running footer.\n\nProvide a single option or up to four options for different placements \n(odd page inner, odd page outer, even page innner, even page outer).\n\nSee [ConTeXt Headers and Footers](https://wiki.contextgarden.net/Headers_and_Footers) for more information.\n"
          }
        },
        {
          name: "includesource",
          schema: "boolean",
          tags: {
            formats: [
              "context"
            ]
          },
          default: false,
          description: "Whether to include all source documents as file attachments in the PDF file."
        },
        {
          name: "footer",
          schema: "string",
          tags: {
            formats: [
              "man"
            ]
          },
          description: "The footer for man pages."
        },
        {
          name: "header",
          schema: "string",
          tags: {
            formats: [
              "man"
            ]
          },
          description: "The header for man pages."
        },
        {
          name: "metadata-file",
          schema: "path",
          hidden: true,
          description: {
            short: "Include file with YAML metadata",
            long: "Read metadata from the supplied YAML (or JSON) file. This\noption can be used with every input format, but string scalars\nin the YAML file will always be parsed as Markdown. Generally,\nthe input will be handled the same as in YAML metadata blocks.\nMetadata values specified inside the document, or by using `-M`, \noverwrite values specified with this option.\n"
          }
        },
        {
          name: "metadata-files",
          schema: {
            arrayOf: "path"
          },
          description: {
            short: "Include files with YAML metadata",
            long: "Read metadata from the supplied YAML (or JSON) files. This\noption can be used with every input format, but string scalars\nin the YAML file will always be parsed as Markdown. Generally,\nthe input will be handled the same as in YAML metadata blocks.\nValues in files specified later in the list will be preferred\nover those specified earlier. Metadata values specified inside \nthe document, or by using `-M`, overwrite values specified with\nthis option.\n"
          }
        }
      ],
      "schema/document-language.yml": [
        {
          name: "lang",
          schema: "string",
          description: {
            short: "Identifies the main language of the document (e.g. `en` or `en-GB`).",
            long: "Identifies the main language of the document using IETF language tags \n(following the [BCP 47](https://www.rfc-editor.org/info/bcp47) standard), \nsuch as `en` or `en-GB`. The [Language subtag lookup](https://r12a.github.io/app-subtags/) \ntool can look up or verify these tags. \n\nThis affects most formats, and controls hyphenation \nin PDF output when using LaTeX (through [`babel`](https://ctan.org/pkg/babel) \nand [`polyglossia`](https://ctan.org/pkg/polyglossia)) or ConTeXt.\n"
          }
        },
        {
          name: "language",
          schema: {
            anyOf: [
              "path",
              "object"
            ]
          },
          description: "YAML file containing custom language translations"
        },
        {
          name: "dir",
          schema: {
            enum: [
              "rtl",
              "ltr"
            ]
          },
          description: {
            short: "The base script direction for the document (`rtl` or `ltr`).",
            long: "The base script direction for the document (`rtl` or `ltr`).\n\nFor bidirectional documents, native pandoc `span`s and\n`div`s with the `dir` attribute can\nbe used to override the base direction in some output\nformats.  This may not always be necessary if the final\nrenderer (e.g. the browser, when generating HTML) supports\nthe [Unicode Bidirectional Algorithm].\n\nWhen using LaTeX for bidirectional documents, only the\n`xelatex` engine is fully supported (use\n`--pdf-engine=xelatex`).\n"
          }
        }
      ],
      "schema/document-latexmk.yml": [
        {
          name: "latex-auto-mk",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: "boolean",
          default: true,
          description: {
            short: "Use Quarto's built-in PDF rendering wrapper",
            long: "Use Quarto's built-in PDF rendering wrapper (includes support \nfor automatically installing missing LaTeX packages)\n"
          }
        },
        {
          name: "latex-auto-install",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Enable/disable automatic LaTeX package installation"
        },
        {
          name: "latex-min-runs",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: "number",
          default: 1,
          description: "Minimum number of compilation passes."
        },
        {
          name: "latex-max-runs",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: "number",
          default: 10,
          description: "Maximum number of compilation passes."
        },
        {
          name: "latex-clean",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Clean intermediates after compilation."
        },
        {
          name: "latex-makeindex",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: "string",
          default: "makeindex",
          description: "Program to use for `makeindex`."
        },
        {
          name: "latex-makeindex-opts",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: {
            arrayOf: "string"
          },
          description: "Array of command line options for `makeindex`."
        },
        {
          name: "latex-tlmgr-opts",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: {
            arrayOf: "string"
          },
          description: "Array of command line options for `tlmgr`."
        },
        {
          name: "latex-output-dir",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: "string",
          description: "Output directory for intermediates and PDF."
        },
        {
          name: "latex-tinytex",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: "boolean",
          description: "Set to `false` to prevent an installation of TinyTex from being used to compile PDF documents."
        },
        {
          name: "latex-input-paths",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: {
            arrayOf: "string"
          },
          description: "Array of paths LaTeX should search for inputs."
        }
      ],
      "schema/document-layout.yml": [
        {
          name: "documentclass",
          schema: {
            string: {
              completions: [
                "scrartcl",
                "scrbook",
                "scrreprt",
                "scrlttr2",
                "article",
                "book",
                "report",
                "memoir"
              ]
            }
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          default: "scrartcl",
          description: "The document class."
        },
        {
          name: "classoption",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$html-files",
              "$pdf-all"
            ]
          },
          description: {
            short: "Options for the document class,",
            long: "For LaTeX/PDF output, the options set for the document\nclass.\n\nFor HTML output using KaTeX, you can render display\nmath equations flush left using `classoption: fleqn`\n"
          }
        },
        {
          name: "pagestyle",
          schema: {
            string: {
              completions: [
                "plain",
                "empty",
                "headings"
              ]
            }
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          default: "plain",
          description: "Control the `\\pagestyle{}` for the document."
        },
        {
          name: "papersize",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "The paper size for the document."
        },
        {
          name: "layout",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "The options for margins and text layout for this document.",
            long: "The options for margins and text layout for this document.\n\nSee [ConTeXt Layout](https://wiki.contextgarden.net/Layout) for additional information.\n"
          }
        },
        {
          name: "page-layout",
          schema: {
            enum: [
              "article",
              "full",
              "custom"
            ]
          },
          default: "article",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "The page layout to use for this document (`article`, `full`, or `custom`)"
        },
        {
          name: "page-width",
          tags: {
            formats: [
              "docx",
              "$odt-all"
            ]
          },
          schema: "number",
          description: {
            short: "Target page width for output (used to compute columns widths for `layout` divs)\n",
            long: "Target page width for output (used to compute columns widths for `layout` divs).\nDefaults to 6.5 inches, which corresponds to default letter page settings in \ndocx and odt.\n"
          }
        },
        {
          name: "appendix-style",
          schema: {
            anyOf: [
              {
                enum: [
                  "default",
                  "plain",
                  "none"
                ]
              }
            ]
          },
          default: "default",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: {
            short: "The layout of the appendix for this document (`none`, `plain`, or `default`)",
            long: "The layout of the appendix for this document (`none`, `plain`, or `default`).\n\nTo completely disable any styling of the appendix, choose the appendix style `none`. For minimal styling, choose `plain.`\n"
          }
        },
        {
          name: "title-block-style",
          schema: {
            anyOf: [
              {
                enum: [
                  "default",
                  "plain",
                  "none"
                ]
              }
            ]
          },
          default: "default",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: {
            short: "The layout of the title block for this document (`none`, `plain`, or `default`).",
            long: "The layout of the title block for this document (`none`, `plain`, or `default`).\n\nTo completely disable any styling of the title block, choose the style `none`. For minimal styling, choose `plain.`\n"
          }
        },
        {
          name: "title-block-banner",
          schema: {
            anyOf: [
              "string",
              "boolean"
            ]
          },
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: {
            short: "Apply a banner style treatment to the title block.",
            long: "Applies a banner style treatment for the title block. You may specify one of the following values:\n\n`true`\n: Will enable the banner style display and automatically select a background color based upon the theme.\n\n`<css color value>`\n: If you provide a CSS color value, the banner will be enabled and the background color set to the provided CSS color.\n\n`<path>`\n: If you provide the path to a file, the banner will be enabled and the background image will be set to the file path.\n\nSee `title-block-banner-color` if you'd like to control the color of the title block banner text.\n"
          }
        },
        {
          name: "title-block-banner-color",
          schema: "string",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: {
            short: "Sets the color of text elements in a banner style title block.",
            long: "Sets the color of text elements in a banner style title block. Use one of the following values:\n\n`body` | `body-bg`\n: Will set the text color to the body text color or body background color, respectively.\n\n`<css color value>`\n: If you provide a CSS color value, the text color will be set to the provided CSS color.\n"
          }
        },
        {
          name: "title-block-categories",
          schema: "boolean",
          default: true,
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: {
            short: "Enables or disables the display of categories in the title block."
          }
        },
        {
          name: "max-width",
          schema: "string",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          description: "Adds a css `max-width` to the body Element."
        },
        {
          name: "margin-left",
          schema: "string",
          tags: {
            formats: [
              "$html-files",
              "context",
              "$pdf-all"
            ]
          },
          description: {
            short: "Sets the left margin of the document.",
            long: "For HTML output, sets the `margin-left` property on the Body element.\n\nFor LaTeX output, sets the left margin if `geometry` is not \nused (otherwise `geometry` overrides this value)\n\nFor ConTeXt output, sets the left margin if `layout` is not used, \notherwise `layout` overrides these.\n\nFor `wkhtmltopdf` sets the left page margin.\n"
          }
        },
        {
          name: "margin-right",
          schema: "string",
          tags: {
            formats: [
              "$html-files",
              "context",
              "$pdf-all"
            ]
          },
          description: {
            short: "Sets the right margin of the document.",
            long: "For HTML output, sets the `margin-right` property on the Body element.\n\nFor LaTeX output, sets the right margin if `geometry` is not \nused (otherwise `geometry` overrides this value)\n\nFor ConTeXt output, sets the right margin if `layout` is not used, \notherwise `layout` overrides these.\n\nFor `wkhtmltopdf` sets the right page margin.\n"
          }
        },
        {
          name: "margin-top",
          schema: "string",
          tags: {
            formats: [
              "$html-files",
              "context",
              "$pdf-all"
            ]
          },
          description: {
            short: "Sets the top margin of the document.",
            long: "For HTML output, sets the `margin-top` property on the Body element.\n\nFor LaTeX output, sets the top margin if `geometry` is not \nused (otherwise `geometry` overrides this value)\n\nFor ConTeXt output, sets the top margin if `layout` is not used, \notherwise `layout` overrides these.\n\nFor `wkhtmltopdf` sets the top page margin.\n"
          }
        },
        {
          name: "margin-bottom",
          schema: "string",
          tags: {
            formats: [
              "$html-files",
              "context",
              "$pdf-all"
            ]
          },
          description: {
            short: "Sets the bottom margin of the document.",
            long: "For HTML output, sets the `margin-bottom` property on the Body element.\n\nFor LaTeX output, sets the bottom margin if `geometry` is not \nused (otherwise `geometry` overrides this value)\n\nFor ConTeXt output, sets the bottom margin if `layout` is not used, \notherwise `layout` overrides these.\n\nFor `wkhtmltopdf` sets the bottom page margin.\n"
          }
        },
        {
          name: "geometry",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "Options for the geometry package.",
            long: "Options for the [geometry](https://ctan.org/pkg/geometry) package. For example:\n\n```yaml\ngeometry:\n  - top=30mm\n  - left=20mm\n  - heightrounded\n```\n"
          }
        },
        {
          name: "hyperrefoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "Additional non-color options for the hyperref package.",
            long: "Options for the [hyperref](https://ctan.org/pkg/hyperref) package. For example:\n\n```yaml\nhyperrefoptions:\n  - linktoc=all\n  - pdfwindowui\n  - pdfpagemode=FullScreen      \n```\n\nTo customize link colors, please see the [Quarto PDF reference](https://quarto.org/docs/reference/formats/pdf.html#colors).\n"
          }
        },
        {
          name: "indent",
          schema: {
            anyOf: [
              "boolean",
              "string"
            ]
          },
          tags: {
            formats: [
              "$pdf-all",
              "ms"
            ]
          },
          default: false,
          description: {
            short: "Whether to use document class settings for indentation.",
            long: "Whether to use document class settings for indentation. If the document \nclass settings are not used, the default LaTeX template removes indentation \nand adds space between paragraphs\n\nFor groff (`ms`) documents, the paragraph indent, for example, `2m`.\n"
          }
        },
        {
          name: "block-headings",
          schema: "boolean",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: {
            short: "Make `\\paragraph` and `\\subparagraph` free-standing rather than run-in.",
            long: "Make `\\paragraph` and `\\subparagraph` (fourth- and\nfifth-level headings, or fifth- and sixth-level with book\nclasses) free-standing rather than run-in; requires further\nformatting to distinguish from `\\subsubsection` (third- or\nfourth-level headings). Instead of using this option,\n[KOMA-Script](https://ctan.org/pkg/koma-script) can adjust headings \nmore extensively:\n\n```yaml\nheader-includes: |\n  \\RedeclareSectionCommand[\n    beforeskip=-10pt plus -2pt minus -1pt,\n    afterskip=1sp plus -1sp minus 1sp,\n    font=\\normalfont\\itshape]{paragraph}\n  \\RedeclareSectionCommand[\n    beforeskip=-10pt plus -2pt minus -1pt,\n    afterskip=1sp plus -1sp minus 1sp,\n    font=\\normalfont\\scshape,\n    indent=0pt]{subparagraph}\n```\n"
          }
        }
      ],
      "schema/document-library.yml": [
        {
          name: "reveal-js-url",
          schema: "path",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          description: "Directory containing reveal.js files."
        },
        {
          name: "s5-url",
          schema: "string",
          tags: {
            formats: [
              "s5"
            ]
          },
          description: "The base url for s5 presentations."
        },
        {
          name: "slidy-url",
          schema: "string",
          tags: {
            formats: [
              "slidy"
            ]
          },
          description: "The base url for Slidy presentations."
        },
        {
          name: "slideous-url",
          schema: "string",
          tags: {
            formats: [
              "slideous"
            ]
          },
          description: "The base url for Slideous presentations."
        }
      ],
      "schema/document-links.yml": [
        {
          name: "link-external-icon",
          tags: {
            formats: [
              "$html-doc",
              "revealjs"
            ]
          },
          schema: "boolean",
          description: "Show a special icon next to links that leave the current site."
        },
        {
          name: "link-external-newwindow",
          tags: {
            formats: [
              "$html-doc",
              "revealjs"
            ]
          },
          schema: "boolean",
          description: "Open external links in a new browser window or tab (rather than navigating the current tab)."
        },
        {
          name: "link-external-filter",
          tags: {
            formats: [
              "$html-doc",
              "revealjs"
            ]
          },
          schema: "string",
          description: {
            short: "A regular expression that can be used to determine whether a link is an internal link.",
            long: "A regular expression that can be used to determine whether a link is an internal link. For example, \nthe following will treat links that start with http://www.quarto.org as internal links (and others\nwill be considered external):\n\n```\n^(?:http:|https:)\\/\\/www\\.quarto\\.org\\/custom\n```\n"
          }
        }
      ],
      "schema/document-listing.yml": [
        {
          name: "listing",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              {
                maybeArrayOf: {
                  anyOf: [
                    "string",
                    {
                      ref: "website-listing"
                    }
                  ]
                }
              }
            ]
          },
          description: "Automatically generate the contents of a page from a list of Quarto documents or other custom data."
        }
      ],
      "schema/document-metadata.yml": [
        {
          name: "keywords",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$asciidoc-all",
              "$html-files",
              "$pdf-all",
              "context"
            ]
          },
          description: "List of keywords to be included in the document metadata."
        },
        {
          name: "subject",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all",
              "$office-all"
            ]
          },
          description: "The document subject"
        },
        {
          name: "description",
          schema: "string",
          tags: {
            formats: [
              "$office-all"
            ]
          },
          description: "The document description. Some applications show this as `Comments` metadata."
        },
        {
          name: "category",
          schema: "string",
          tags: {
            formats: [
              "$office-all"
            ]
          },
          description: "The document category."
        },
        {
          name: "license",
          schema: "string",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: {
            short: "The License for this document, if any. (e.g. `CC BY`)",
            long: "The license for this document, if any. \n\nCreative Commons licenses `CC BY`, `CC BY-SA`, `CC BY-ND`, `CC BY-NC` will automatically generate a license link\nin the document appendix. Other license text will be placed in the appendix verbatim.\n"
          }
        },
        {
          name: "title-meta",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "Sets the title metadata for the document"
        },
        {
          name: "pagetitle",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          schema: "string",
          description: "Sets the title metadata for the document"
        },
        {
          name: "title-prefix",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          schema: "string",
          description: "Specify STRING as a prefix at the beginning of the title that appears in \nthe HTML header (but not in the title as it appears at the beginning of the body)\n"
        },
        {
          name: "description-meta",
          schema: "string",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          description: "Sets the description metadata for the document"
        },
        {
          name: "author-meta",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all",
              "$html-files"
            ]
          },
          description: "Sets the author metadata for the document"
        },
        {
          name: "date-meta",
          schema: "string",
          tags: {
            formats: [
              "$html-all",
              "$pdf-all"
            ]
          },
          description: "Sets the date metadata for the document"
        }
      ],
      "schema/document-numbering.yml": [
        {
          name: "number-sections",
          schema: "boolean",
          default: false,
          description: {
            short: "Number section headings",
            long: "Number section headings rendered output. By default, sections are not numbered.\nSections with class `.unnumbered` will never be numbered, even if `number-sections`\nis specified.\n"
          }
        },
        {
          name: "number-depth",
          schema: "number",
          tags: {
            formats: [
              "$html-all",
              "$pdf-all",
              "docx"
            ]
          },
          description: {
            short: "The depth to which sections should be numbered.",
            long: "By default, all headings in your document create a \nnumbered section. You customize numbering depth using \nthe `number-depth` option. \n\nFor example, to only number sections immediately below \nthe chapter level, use this:\n\n```yaml  \nnumber-depth: 1\n```\n"
          }
        },
        {
          name: "secnumdepth",
          schema: "number",
          hidden: true,
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "The numbering depth for sections. (Use `number-depth` instead)."
        },
        {
          name: "number-offset",
          schema: {
            maybeArrayOf: "number"
          },
          default: [
            0,
            0,
            0,
            0,
            0,
            0
          ],
          description: {
            short: "Offset for section headings in output (offsets are 0 by default)",
            long: 'Offset for section headings in output (offsets are 0 by default)\nThe first number is added to the section number for\ntop-level headings, the second for second-level headings, and so on.\nSo, for example, if you want the first top-level heading in your\ndocument to be numbered "6", specify `number-offset: 5`. If your\ndocument starts with a level-2 heading which you want to be numbered\n"1.5", specify `number-offset: [1,4]`. Implies `number-sections`\n'
          }
        },
        {
          name: "shift-heading-level-by",
          schema: "number",
          description: {
            short: "Shift heading levels by a positive or negative integer. For example, with \n`shift-heading-level-by: -1`, level 2 headings become level 1 headings.\n",
            long: "Shift heading levels by a positive or negative integer.\nFor example, with `shift-heading-level-by: -1`, level 2\nheadings become level 1 headings, and level 3 headings\nbecome level 2 headings.  Headings cannot have a level\nless than 1, so a heading that would be shifted below level 1\nbecomes a regular paragraph.  Exception: with a shift of -N,\na level-N heading at the beginning of the document\nreplaces the metadata title.\n"
          }
        },
        {
          name: "pagenumbering",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "Sets the page numbering style and location for the document.",
            long: "Sets the page numbering style and location for the document using the\n`\\setuppagenumbering` command. \n\nSee [ConTeXt Page Numbering](https://wiki.contextgarden.net/Command/setuppagenumbering) \nfor additional information.\n"
          }
        },
        {
          name: "top-level-division",
          tags: {
            formats: [
              "$pdf-all",
              "context",
              "$docbook-all",
              "tei"
            ]
          },
          schema: {
            enum: [
              "default",
              "section",
              "chapter",
              "part"
            ]
          },
          description: {
            short: "Treat top-level headings as the given division type (`default`, `section`, `chapter`, or `part`). The hierarchy\norder is part, chapter, then section; all headings are shifted such \nthat the top-level heading becomes the specified type.\n",
            long: "Treat top-level headings as the given division type (`default`, `section`, `chapter`, or `part`). The hierarchy\norder is part, chapter, then section; all headings are shifted such \nthat the top-level heading becomes the specified type.  \n\nThe default behavior is to determine the\nbest division type via heuristics: unless other conditions\napply, `section` is chosen. When the `documentclass`\nvariable is set to `report`, `book`, or `memoir` (unless the\n`article` option is specified), `chapter` is implied as the\nsetting for this option. If `beamer` is the output format,\nspecifying either `chapter` or `part` will cause top-level\nheadings to become `\\part{..}`, while second-level headings\nremain as their default type.\n"
          }
        }
      ],
      "schema/document-ojs.yml": [
        {
          name: "ojs-engine",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          schema: "boolean",
          description: "If `true`, force the presence of the OJS runtime. If `false`, force the absence instead.\nIf unset, the OJS runtime is included only if OJS cells are present in the document.\n"
        }
      ],
      "schema/document-options.yml": [
        {
          name: "reference-doc",
          tags: {
            formats: [
              "$office-all",
              "odt"
            ]
          },
          schema: "path",
          description: "Use the specified file as a style reference in producing a docx, \npptx, or odt file.\n"
        },
        {
          name: "theme",
          tags: {
            formats: [
              "$html-doc",
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              "string",
              {
                arrayOf: "string"
              },
              {
                object: {
                  closed: true,
                  properties: {
                    light: {
                      maybeArrayOf: {
                        string: {
                          description: "The light theme name, theme scss file, or a mix of both."
                        }
                      }
                    },
                    dark: {
                      maybeArrayOf: {
                        string: {
                          description: "The dark theme name, theme scss file, or a mix of both."
                        }
                      }
                    }
                  }
                }
              }
            ]
          },
          description: "Theme name, theme scss file, or a mix of both."
        },
        {
          name: "minimal",
          schema: "boolean",
          default: false,
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "Disables the built in html features like theming, anchor sections, code block behavior, and more."
        },
        {
          name: "document-css",
          schema: "boolean",
          hidden: true,
          default: true,
          tags: {
            formats: [
              "$html-files"
            ]
          },
          description: "Enables inclusion of Pandoc default CSS for this document."
        },
        {
          name: "css",
          tags: {
            formats: [
              "$html-all"
            ]
          },
          schema: {
            maybeArrayOf: "path"
          },
          description: "One or more CSS style sheets."
        },
        {
          name: "anchor-sections",
          schema: "boolean",
          default: true,
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "Enables hover over a section title to see an anchor link."
        },
        {
          name: "smooth-scroll",
          schema: "boolean",
          default: false,
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "Enables smooth scrolling within the page."
        },
        {
          name: "html-math-method",
          tags: {
            formats: [
              "$html-doc",
              "$epub-all",
              "gfm"
            ]
          },
          schema: {
            anyOf: [
              {
                ref: "math-methods"
              },
              {
                object: {
                  properties: {
                    method: {
                      ref: "math-methods"
                    },
                    url: "string"
                  },
                  required: [
                    "method"
                  ]
                }
              }
            ]
          },
          description: {
            short: "Method use to render math in HTML output",
            long: "Method use to render math in HTML output (`plain`, `webtex`, `gladtex`, `mathml`, `mathjax`, `katex`).\n\nSee the Pandoc documentation on [Math Rendering in HTML](https://pandoc.org/MANUAL.html#math-rendering-in-html)\nfor additional details.\n"
          }
        },
        {
          name: "section-divs",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Wrap sections in `<section>` tags and attach identifiers to the enclosing `<section>`\nrather than the heading itself.\n"
        },
        {
          name: "identifier-prefix",
          tags: {
            formats: [
              "$html-files",
              "$docbook-all",
              "$markdown-all",
              "haddock"
            ]
          },
          schema: "string",
          description: {
            short: "Specify a prefix to be added to all identifiers and internal links.",
            long: "Specify a prefix to be added to all identifiers and internal links in HTML and\nDocBook output, and to footnote numbers in Markdown and Haddock output. \nThis is useful for preventing duplicate identifiers when generating fragments\nto be included in other pages.\n"
          }
        },
        {
          name: "email-obfuscation",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          schema: {
            enum: [
              "none",
              "references",
              "javascript"
            ]
          },
          default: "none",
          description: {
            short: "Method for obfuscating mailto: links in HTML documents.",
            long: "Specify a method for obfuscating `mailto:` links in HTML documents.\n\n- `javascript`: Obfuscate links using JavaScript.\n- `references`: Obfuscate links by printing their letters as decimal or hexadecimal character references.\n- `none` (default): Do not obfuscate links.\n"
          }
        },
        {
          name: "html-q-tags",
          tags: {
            formats: [
              "$html-all"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Use `<q>` tags for quotes in HTML."
        },
        {
          name: "pdf-engine",
          tags: {
            formats: [
              "$pdf-all",
              "ms",
              "context"
            ]
          },
          schema: {
            string: {
              completions: [
                "pdflatex",
                "lualatex",
                "xelatex",
                "latexmk",
                "tectonic",
                "wkhtmltopdf",
                "weasyprint",
                "prince",
                "context",
                "pdfroff"
              ]
            }
          },
          description: {
            short: "Use the specified engine when producing PDF output.",
            long: "Use the specified engine when producing PDF output. If the engine is not\nin your PATH, the full path of the engine may be specified here. If this\noption is not specified, Quarto uses the following defaults\ndepending on the output format in use:\n\n- `latex`: `xelatex` (other options: `pdflatex`, `lualatex`,\n  `tectonic`, `latexmk`)\n- `context`: `context`\n- `html`:  `wkhtmltopdf` (other options: `prince`, `weasyprint`;\n  see [print-css.rocks](https://print-css.rocks) for a good\n  introduction to PDF generation from HTML/CSS.)\n- `ms`:  `pdfroff`\n"
          }
        },
        {
          name: "pdf-engine-opt",
          tags: {
            formats: [
              "$pdf-all",
              "ms",
              "context"
            ]
          },
          schema: "string",
          description: {
            short: "Use the given string as a command-line argument to the `pdf-engine`.",
            long: "Use the given string as a command-line argument to the pdf-engine.\nFor example, to use a persistent directory foo for latexmk\u2019s auxiliary\nfiles, use `pdf-engine-opt: -outdir=foo`. Note that no check for \nduplicate options is done.\n"
          }
        },
        {
          name: "beamerarticle",
          schema: "boolean",
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "Whether to produce a Beamer article from this presentation."
        },
        {
          name: "beameroption",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "Add an extra Beamer option using `\\setbeameroption{}`."
        },
        {
          name: "aspectratio",
          schema: {
            enum: [
              43,
              169,
              1610,
              149,
              141,
              54,
              32
            ]
          },
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "The aspect ratio for this presentation."
        },
        {
          name: "logo",
          schema: "path",
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "The logo image for slides."
        },
        {
          name: "titlegraphic",
          schema: "path",
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "The image for the title slide."
        },
        {
          name: "navigation",
          schema: {
            enum: [
              "empty",
              "frame",
              "vertical",
              "horizontal"
            ]
          },
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "Controls navigation symbols for the presentation (`empty`, `frame`, `vertical`, or `horizontal`)"
        },
        {
          name: "section-titles",
          schema: "boolean",
          tags: {
            formats: [
              "beamer"
            ]
          },
          default: true,
          description: "Whether to enable title pages for new sections."
        },
        {
          name: "colortheme",
          schema: "string",
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "The Beamer color theme for this presentation."
        },
        {
          name: "fonttheme",
          schema: "string",
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "The Beamer font theme for this presentation."
        },
        {
          name: "innertheme",
          schema: "string",
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "The Beamer inner theme for this presentation."
        },
        {
          name: "outertheme",
          schema: "string",
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "The Beamer outer theme for this presentation."
        },
        {
          name: "themeoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "beamer"
            ]
          },
          description: "Options passed to LaTeX Beamer themes."
        },
        {
          name: "section",
          schema: "number",
          tags: {
            formats: [
              "man"
            ]
          },
          description: "The section number in man pages."
        },
        {
          name: "variant",
          tags: {
            formats: [
              "$markdown-all"
            ]
          },
          schema: "string",
          description: 'Enable and disable extensions for markdown output (e.g. "+emoji")\n'
        },
        {
          name: "markdown-headings",
          tags: {
            formats: [
              "$markdown-all",
              "ipynb"
            ]
          },
          schema: {
            enum: [
              "setext",
              "atx"
            ]
          },
          default: "atx",
          description: "Specify whether to use `atx` (`#`-prefixed) or\n`setext` (underlined) headings for level 1 and 2\nheadings (`atx` or `setext`).\n"
        },
        {
          name: "keep-yaml",
          tags: {
            formats: [
              "$markdown-all"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Preserve the original YAML front matter in rendered markdown"
        },
        {
          name: "ipynb-output",
          tags: {
            formats: [
              "ipynb"
            ]
          },
          schema: {
            enum: [
              "none",
              "all",
              "best"
            ]
          },
          default: "best",
          description: {
            short: "Determines which ipynb cell output formats are rendered (`none`, `all`, or `best`).",
            long: "Determines which ipynb cell output formats are rendered.\n\n- `all`: Preserve all of the data formats included in the original.\n- `none`: Omit the contents of data cells.\n- `best` (default): Instruct pandoc to try to pick the\n  richest data block in each output cell that is compatible\n  with the output format.\n"
          }
        },
        {
          name: "quarto-required",
          schema: "string",
          description: {
            short: "semver version range for required quarto version",
            long: "A semver version range describing the supported quarto versions for this document\nor project.\n\nExamples:\n\n- `>= 1.1.0`: Require at least quarto version 1.1\n- `1.*`: Require any quarto versions whose major version number is 1\n"
          }
        }
      ],
      "schema/document-pdfa.yml": [
        {
          name: "pdfa",
          schema: {
            anyOf: [
              "boolean",
              "string"
            ]
          },
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "Adds the necessary setup to the document preamble to generate PDF/A of the type specified.",
            long: "Adds the necessary setup to the document preamble to generate PDF/A of the type specified.\n\nIf the value is set to `true`, `1b:2005` will be used as default.\n\nTo successfully generate PDF/A the required\nICC color profiles have to be available and the content and all\nincluded files (such as images) have to be standard conforming.\nThe ICC profiles and output intent may be specified using the\nvariables `pdfaiccprofile` and `pdfaintent`.  See also [ConTeXt\nPDFA](https://wiki.contextgarden.net/PDF/A) for more details.\n"
          }
        },
        {
          name: "pdfaiccprofile",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "When used in conjunction with `pdfa`, specifies the ICC profile to use \nin the PDF, e.g. `default.cmyk`.\n",
            long: "When used in conjunction with `pdfa`, specifies the ICC profile to use \nin the PDF, e.g. `default.cmyk`.\n\nIf left unspecified, `sRGB.icc` is used as default. May be repeated to \ninclude multiple profiles. Note that the profiles have to be available \non the system. They can be obtained from \n[ConTeXt ICC Profiles](https://wiki.contextgarden.net/PDFX#ICC_profiles).\n"
          }
        },
        {
          name: "pdfaintent",
          schema: "string",
          tags: {
            formats: [
              "context"
            ]
          },
          description: {
            short: "When used in conjunction with `pdfa`, specifies the output intent for the colors.",
            long: "When used in conjunction with `pdfa`, specifies the output intent for\nthe colors, for example `ISO coated v2 300\\letterpercent\\space (ECI)`\n\nIf left unspecified, `sRGB IEC61966-2.1` is used as default.\n"
          }
        }
      ],
      "schema/document-references.yml": [
        {
          name: "bibliography",
          schema: {
            maybeArrayOf: "path"
          },
          description: "Document bibliography (BibTeX or CSL). May be a single file or a list of files\n"
        },
        {
          name: "csl",
          schema: "path",
          description: "Citation Style Language file to use for formatting references."
        },
        {
          name: "citations-hover",
          schema: "boolean",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          default: true,
          description: "Enables a hover popup for citation that shows the reference information."
        },
        {
          name: "citation-location",
          schema: {
            enum: [
              "document",
              "margin"
            ]
          },
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          default: "document",
          description: "Where citation information should be displayed (`document` or `margin`)"
        },
        {
          name: "cite-method",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          schema: {
            enum: [
              "citeproc",
              "natbib",
              "biblatex"
            ]
          },
          default: "citeproc",
          description: "Method used to format citations (`citeproc`, `natbib`, or `biblatex`).\n"
        },
        {
          name: "citeproc",
          schema: "boolean",
          default: true,
          description: {
            short: "Turn on built-in citation processing",
            long: "Turn on built-in citation processing. To use this feature, you will need\nto have a document containing citations and a source of bibliographic data: \neither an external bibliography file or a list of `references` in the \ndocument's YAML metadata. You can optionally also include a `csl` \ncitation style file.\n"
          }
        },
        {
          name: "biblatexoptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "A list of options for BibLaTeX."
        },
        {
          name: "natbiboptions",
          schema: {
            maybeArrayOf: "string"
          },
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "One or more options to provide for `natbib` when generating a bibliography."
        },
        {
          name: "biblio-style",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "The bibliography style to use (e.g. `\\bibliographystyle{dinat}`) when using `natbib` or `biblatex`."
        },
        {
          name: "biblio-title",
          schema: "string",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "The bibliography title to use when using `natbib` or `biblatex`."
        },
        {
          name: "biblio-config",
          schema: "boolean",
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "Controls whether to output bibliography configuration for `natbib` or `biblatex` when cite method is not `citeproc`."
        },
        {
          name: "citation-abbreviations",
          schema: "path",
          description: {
            short: "JSON file containing abbreviations of journals that should be used in formatted bibliographies.",
            long: 'JSON file containing abbreviations of journals that should be\nused in formatted bibliographies when `form="short"` is\nspecified. The format of the file can be illustrated with an\nexample:\n\n```json\n{ "default": {\n    "container-title": {\n      "Lloyd\'s Law Reports": "Lloyd\'s Rep",\n      "Estates Gazette": "EG",\n      "Scots Law Times": "SLT"\n    }\n  }\n}\n```\n'
          }
        }
      ],
      "schema/document-render.yml": [
        {
          name: "from",
          alias: "reader",
          schema: "string",
          default: "markdown",
          description: {
            short: "Format to read from",
            long: "Format to read from. Extensions can be individually enabled or disabled by appending +EXTENSION or -EXTENSION to the format name (e.g. markdown+emoji).\n"
          }
        },
        {
          name: "output-file",
          schema: {
            ref: "pandoc-format-output-file"
          },
          default: "Input filename with output extension (e.g. .pdf, .html, etc.)",
          description: "Output file to write to"
        },
        {
          name: "output-ext",
          schema: "string",
          description: "Extension to use for generated output file\n"
        },
        {
          name: "template",
          disabled: [
            "$office-all",
            "ipynb"
          ],
          schema: "path",
          description: "Use the specified file as a custom template for the generated document.\n"
        },
        {
          name: "template-partials",
          disabled: [
            "$office-all",
            "ipynb"
          ],
          schema: {
            maybeArrayOf: "path"
          },
          description: "Include the specified files as partials accessible to the template for the generated content.\n"
        },
        {
          name: "standalone",
          schema: "boolean",
          default: true,
          description: "Produce output with an appropriate header and footer (e.g. a standalone HTML, LaTeX, TEI, or RTF file, not a fragment)\n"
        },
        {
          name: "embed-resources",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          schema: "boolean",
          default: false,
          description: {
            short: "Produce a standalone HTML file with no external dependencies",
            long: 'Produce a standalone HTML file with no external dependencies, using\n`data:` URIs to incorporate the contents of linked scripts, stylesheets,\nimages, and videos. The resulting file should be "self-contained," in the\nsense that it needs no external files and no net access to be displayed\nproperly by a browser. This option works only with HTML output formats,\nincluding `html4`, `html5`, `html+lhs`, `html5+lhs`, `s5`, `slidy`,\n`slideous`, `dzslides`, and `revealjs`. Scripts, images, and stylesheets at\nabsolute URLs will be downloaded; those at relative URLs will be sought\nrelative to the working directory (if the first source\nfile is local) or relative to the base URL (if the first source\nfile is remote).  Elements with the attribute\n`data-external="1"` will be left alone; the documents they\nlink to will not be incorporated in the document.\nLimitation: resources that are loaded dynamically through\nJavaScript cannot be incorporated; as a result, some\nadvanced features (e.g.  zoom or speaker notes) may not work\nin an offline "self-contained" `reveal.js` slide show.\n'
          }
        },
        {
          name: "self-contained",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          schema: "boolean",
          default: false,
          description: {
            short: "Produce a standalone HTML file with no external dependencies",
            long: "Produce a standalone HTML file with no external dependencies. Note that\nthis option has been deprecated in favor of `embed-resources`.\n"
          }
        },
        {
          name: "self-contained-math",
          tags: {
            formats: [
              "$html-files"
            ]
          },
          schema: "boolean",
          default: false,
          description: {
            short: "Embed math libraries (e.g. MathJax) within `self-contained` output.",
            long: "Embed math libraries (e.g. MathJax) within `self-contained` output.\nNote that math libraries are not embedded by default because they are \n quite large and often time consuming to download.\n"
          }
        },
        {
          name: "filters",
          schema: {
            ref: "pandoc-format-filters"
          },
          description: "Specify executables or Lua scripts to be used as a filter transforming\nthe pandoc AST after the input is parsed and before the output is written.\n"
        },
        {
          name: "shortcodes",
          schema: {
            ref: "pandoc-shortcodes"
          },
          description: "Speicfy Lua scripts that implement shortcode handlers\n"
        },
        {
          name: "keep-md",
          schema: "boolean",
          default: false,
          tags: {
            contexts: [
              "document-execute"
            ]
          },
          description: "Keep the markdown file generated by executing code"
        },
        {
          name: "keep-ipynb",
          schema: "boolean",
          default: false,
          tags: {
            contexts: [
              "document-execute"
            ]
          },
          description: "Keep the notebook file generated from executing code."
        },
        {
          name: "ipynb-filters",
          schema: {
            arrayOf: "string"
          },
          tags: {
            contexts: [
              "document-execute"
            ]
          },
          description: "Filters to pre-process ipynb files before rendering to markdown"
        },
        {
          name: "keep-tex",
          tags: {
            formats: [
              "pdf",
              "beamer"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Keep the intermediate tex file used during render."
        },
        {
          name: "extract-media",
          schema: "path",
          description: {
            short: "Extract images and other media contained in or linked from the source document to the\npath DIR.\n",
            long: "Extract images and other media contained in or linked from the source document to the\npath DIR, creating it if necessary, and adjust the images references in the document\nso they point to the extracted files. Media are downloaded, read from the file\nsystem, or extracted from a binary container (e.g. docx), as needed. The original\nfile paths are used if they are relative paths not containing ... Otherwise filenames\nare constructed from the SHA1 hash of the contents.\n"
          }
        },
        {
          name: "resource-path",
          schema: {
            arrayOf: "path"
          },
          default: [
            "."
          ],
          description: "List of paths to search for images and other resources.\n"
        },
        {
          name: "default-image-extension",
          schema: "string",
          description: {
            short: "Specify a default extension to use when image paths/URLs have no extension.\n",
            long: "Specify a default extension to use when image paths/URLs have no\nextension.  This allows you to use the same source for formats that\nrequire different kinds of images.  Currently this option only affects\nthe Markdown and LaTeX readers.\n"
          }
        },
        {
          name: "abbreviations",
          schema: "string",
          description: {
            short: "Specifies a custom abbreviations file, with abbreviations one to a line.\n",
            long: "Specifies a custom abbreviations file, with abbreviations one to a line.\nThis list is used when reading Markdown input: strings found in this list\nwill be followed by a nonbreaking space, and the period will not produce sentence-ending space in formats like LaTeX.  The strings may not contain\nspaces.\n"
          }
        },
        {
          name: "dpi",
          schema: "number",
          default: 96,
          description: {
            short: "Specify the default dpi (dots per inch) value for conversion from pixels to inch/\ncentimeters and vice versa.\n",
            long: "Specify the default dpi (dots per inch) value for conversion from pixels to inch/\ncentimeters and vice versa. (Technically, the correct term would be ppi: pixels per\ninch.) The default is `96`. When images contain information about dpi internally, the\nencoded value is used instead of the default specified by this option.\n"
          }
        }
      ],
      "schema/document-reveal-content.yml": [
        {
          name: "logo",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "path",
          description: "Logo image (placed in bottom right corner of slides)"
        },
        {
          name: "footer",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "string",
          description: {
            short: "Footer to include on all slides",
            long: "Footer to include on all slides. Can also be set per-slide by including a\ndiv with class `.footer` on the slide.\n"
          }
        },
        {
          name: "scrollable",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: {
            short: "Allow content that overflows slides vertically to scroll",
            long: "`true` to allow content that overflows slides vertically to scroll. This can also\nbe set per-slide by including the `.scrollable` class on the slide title.\n"
          }
        },
        {
          name: "smaller",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: {
            short: "Use a smaller default font for slide content",
            long: "`true` to use a smaller default font for slide content. This can also\nbe set per-slide by including the `.smaller` class on the slide title.\n"
          }
        }
      ],
      "schema/document-reveal-hidden.yml": [
        {
          name: "embedded",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          hidden: true,
          default: false,
          description: "Flags if the presentation is running in an embedded mode\n"
        },
        {
          name: "display",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "string",
          hidden: true,
          default: "block",
          description: "The display mode that will be used to show slides"
        }
      ],
      "schema/document-reveal-layout.yml": [
        {
          name: "auto-stretch",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "For slides with a single top-level image, automatically stretch it to fill the slide."
        },
        {
          name: "width",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              "number",
              "string"
            ]
          },
          default: 1050,
          description: {
            short: "The 'normal' width of the presentation",
            long: 'The "normal" width of the presentation, aspect ratio will\nbe preserved when the presentation is scaled to fit different\nresolutions. Can be specified using percentage units.\n'
          }
        },
        {
          name: "height",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              "number",
              "string"
            ]
          },
          default: 700,
          description: {
            short: "The 'normal' height of the presentation",
            long: 'The "normal" height of the presentation, aspect ratio will\nbe preserved when the presentation is scaled to fit different\nresolutions. Can be specified using percentage units.\n'
          }
        },
        {
          name: "margin",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: 0.1,
          description: "Factor of the display size that should remain empty around the content"
        },
        {
          name: "min-scale",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: 0.2,
          description: "Bounds for smallest possible scale to apply to content"
        },
        {
          name: "max-scale",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: 2,
          description: "Bounds for largest possible scale to apply to content"
        },
        {
          name: "center",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Vertical centering of slides"
        },
        {
          name: "disable-layout",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Disables the default reveal.js slide layout (scaling and centering)\n"
        }
      ],
      "schema/document-reveal-media.yml": [
        {
          name: "preview-links",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              {
                enum: [
                  "auto"
                ]
              },
              "boolean"
            ]
          },
          default: "auto",
          description: {
            short: "Open links in an iframe preview overlay (`true`, `false`, or `auto`)",
            long: "Open links in an iframe preview overlay.\n\n- `true`: Open links in iframe preview overlay\n- `false`: Do not open links in iframe preview overlay\n- `auto` (default): Open links in iframe preview overlay, in fullscreen mode.\n"
          }
        },
        {
          name: "auto-play-media",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              null,
              true,
              false
            ]
          },
          default: null,
          description: "Autoplay embedded media (`null`, `true`, or `false`). Default is `null` (only when `autoplay` \nattribute is specified)\n"
        },
        {
          name: "preload-iframes",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              null,
              true,
              false
            ]
          },
          default: null,
          description: {
            short: "Global override for preloading lazy-loaded iframes (`null`, `true`, or `false`).",
            long: "Global override for preloading lazy-loaded iframes\n\n- `null`:   Iframes with data-src AND data-preload will be loaded when within\n  the `viewDistance`, iframes with only data-src will be loaded when visible\n- `true`:   All iframes with data-src will be loaded when within the viewDistance\n- `false`:  All iframes with data-src will be loaded only when visible\n"
          }
        },
        {
          name: "view-distance",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: 3,
          description: "Number of slides away from the current slide to pre-load resources for"
        },
        {
          name: "mobile-view-distance",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: 2,
          description: "Number of slides away from the current slide to pre-load resources for (on mobile devices).\n"
        },
        {
          name: "parallax-background-image",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "path",
          description: "Parallax background image"
        },
        {
          name: "parallax-background-size",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "string",
          description: "Parallax background size (e.g. '2100px 900px')"
        },
        {
          name: "parallax-background-horizontal",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: 200,
          description: "Number of pixels to move the parallax background horizontally per slide."
        },
        {
          name: "parallax-background-vertical",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: 50,
          description: "Number of pixels to move the parallax background vertically per slide."
        }
      ],
      "schema/document-reveal-navigation.yml": [
        {
          name: "progress",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Display a presentation progress bar"
        },
        {
          name: "history",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Push each slide change to the browser history\n"
        },
        {
          name: "navigation-mode",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "linear",
              "vertical",
              "grid"
            ]
          },
          default: "linear",
          description: {
            short: "Navigation progression (`linear`, `vertical`, or `grid`)",
            long: "Changes the behavior of navigation directions.\n\n- `linear`: Removes the up/down arrows. Left/right arrows step through all\n  slides (both horizontal and vertical).\n\n- `vertical`: Left/right arrow keys step between horizontal slides, up/down\n  arrow keys step between vertical slides. Space key steps through\n  all slides (both horizontal and vertical).\n\n- `grid`: When this is enabled, stepping left/right from a vertical stack\n  to an adjacent vertical stack will land you at the same vertical\n  index.\n"
          }
        },
        {
          name: "touch",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Enable touch navigation on devices with touch input\n"
        },
        {
          name: "keyboard",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Enable keyboard shortcuts for navigation"
        },
        {
          name: "mouse-wheel",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Enable slide navigation via mouse wheel"
        },
        {
          name: "hide-inactive-cursor",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Hide cursor if inactive"
        },
        {
          name: "hide-cursor-time",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: 5e3,
          description: "Time before the cursor is hidden (in ms)"
        },
        {
          name: "loop",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Loop the presentation"
        },
        {
          name: "shuffle",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Randomize the order of slides each time the presentation loads"
        },
        {
          name: "controls",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              {
                enum: [
                  "auto"
                ]
              }
            ]
          },
          default: "auto",
          description: {
            short: "Show arrow controls for navigating through slides (`true`, `false`, or `auto`).",
            long: "Show arrow controls for navigating through slides.\n\n- `true`: Always show controls\n- `false`: Never show controls\n- `auto` (default): Show controls when vertical slides are present or when the deck is embedded in an iframe.\n"
          }
        },
        {
          name: "controls-layout",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "edges",
              "bottom-right"
            ]
          },
          default: "edges",
          description: "Location for navigation controls (`edges` or `bottom-right`)"
        },
        {
          name: "controls-tutorial",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Help the user learn the controls by providing visual hints."
        },
        {
          name: "controls-back-arrows",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "faded",
              "hidden",
              "visible"
            ]
          },
          default: "faded",
          description: "Visibility rule for backwards navigation arrows (`faded`, `hidden`, or `visible`).\n"
        },
        {
          name: "auto-slide",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              "number",
              {
                enum: [
                  false
                ]
              }
            ]
          },
          default: 0,
          description: "Automatically progress all slides at the specified interval"
        },
        {
          name: "auto-slide-stoppable",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Stop auto-sliding after user input"
        },
        {
          name: "auto-slide-method",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "string",
          default: "navigateNext",
          description: "Navigation method to use when auto sliding (defaults to navigateNext)"
        },
        {
          name: "default-timing",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          description: "Expected average seconds per slide (used by pacing timer in speaker view)"
        },
        {
          name: "pause",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Flags whether it should be possible to pause the presentation (blackout)\n"
        },
        {
          name: "help",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Show a help overlay when the `?` key is pressed\n"
        },
        {
          name: "hash",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Add the current slide to the URL hash"
        },
        {
          name: "hash-type",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "number",
              "title"
            ]
          },
          default: "title",
          description: "URL hash type (`number` or `title`)"
        },
        {
          name: "hash-one-based-index",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Use 1 based indexing for hash links to match slide number\n"
        },
        {
          name: "respond-to-hash-changes",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Monitor the hash and change slides accordingly\n"
        },
        {
          name: "fragment-in-url",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Include the current fragment in the URL"
        },
        {
          name: "slide-tone",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Play a subtle sound when changing slides"
        }
      ],
      "schema/document-reveal-print.yml": [
        {
          name: "pdf-separate-fragments",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Prints each fragment on a separate slide"
        },
        {
          name: "pdf-page-height-offset",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: -1,
          description: {
            short: "Offset used to reduce the height of content within exported PDF pages.",
            long: "Offset used to reduce the height of content within exported PDF pages.\nThis exists to account for environment differences based on how you\nprint to PDF. CLI printing options, like phantomjs and wkpdf, can end\non precisely the total height of the document whereas in-browser\nprinting has to end one pixel before.\n"
          }
        }
      ],
      "schema/document-reveal-tools.yml": [
        {
          name: "overview",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Enable the slide overview mode"
        },
        {
          name: "menu",
          description: "Configuration for revealjs menu.",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              {
                object: {
                  properties: {
                    side: {
                      enum: [
                        "left",
                        "right"
                      ],
                      default: "left",
                      description: "Side of the presentation where the menu will be shown (`left` or `right`)"
                    },
                    width: {
                      string: {
                        completions: [
                          "normal",
                          "wide",
                          "third",
                          "half",
                          "full"
                        ]
                      },
                      default: "normal",
                      description: "Width of the menu"
                    },
                    numbers: {
                      boolean: {
                        default: false,
                        description: "Add slide numbers to menu items"
                      }
                    },
                    "use-text-content-for-missing-titles": {
                      boolean: {
                        default: true,
                        description: "For slides with no title, attempt to use the start of the text content as the title instead.\n"
                      }
                    }
                  }
                }
              }
            ]
          }
        },
        {
          name: "chalkboard",
          description: "Configuration for revealjs chalkboard.",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              {
                object: {
                  properties: {
                    theme: {
                      enum: [
                        "chalkboard",
                        "whiteboard"
                      ],
                      default: "chalkboard",
                      description: "Visual theme for drawing surface (`chalkboard` or `whiteboard`)"
                    },
                    "boardmarker-width": {
                      number: {
                        default: 3,
                        description: "The drawing width of the boardmarker. Defaults to 3. Larger values draw thicker lines.\n"
                      }
                    },
                    "chalk-width": {
                      number: {
                        default: 7,
                        description: "The drawing width of the chalk. Defaults to 7. Larger values draw thicker lines.\n"
                      }
                    },
                    src: {
                      path: {
                        description: "Optional file name for pre-recorded drawings (download drawings using the `D` key)\n"
                      }
                    },
                    "read-only": {
                      boolean: {
                        default: false,
                        description: "Configuration option to prevent changes to existing drawings\n"
                      }
                    },
                    buttons: {
                      boolean: {
                        default: true,
                        description: "Add chalkboard buttons at the bottom of the slide\n"
                      }
                    },
                    transition: {
                      number: {
                        description: "Gives the duration (in ms) of the transition for a slide change, \nso that the notes canvas is drawn after the transition is completed.\n"
                      }
                    }
                  }
                }
              }
            ]
          }
        },
        {
          name: "multiplex",
          description: "Configuraiotn for reveal presentation multiplexing.",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              {
                object: {
                  properties: {
                    url: {
                      string: {
                        default: "https://reveal-multiplex.glitch.me/",
                        description: "Multiplex token server (defaults to Reveal-hosted server)\n"
                      }
                    },
                    id: {
                      string: {
                        description: "Unique presentation id provided by multiplex token server"
                      }
                    },
                    secret: {
                      string: {
                        description: "Secret provided by multiplex token server"
                      }
                    }
                  }
                }
              }
            ]
          }
        }
      ],
      "schema/document-reveal-transitions.yml": [
        {
          name: "transition",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "none",
              "fade",
              "slide",
              "convex",
              "concave",
              "zoom"
            ]
          },
          default: "none",
          description: {
            short: "Transition style for slides",
            long: "Transition style for slides backgrounds.\n(`none`, `fade`, `slide`, `convex`, `concave`, or `zoom`)\n"
          }
        },
        {
          name: "transition-speed",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "default",
              "fast",
              "slow"
            ]
          },
          default: "default",
          description: "Slide transition speed (`default`, `fast`, or `slow`)"
        },
        {
          name: "background-transition",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "none",
              "fade",
              "slide",
              "convex",
              "concave",
              "zoom"
            ]
          },
          default: "none",
          description: {
            short: "Transition style for full page slide backgrounds",
            long: "Transition style for full page slide backgrounds.\n(`none`, `fade`, `slide`, `convex`, `concave`, or `zoom`)\n"
          }
        },
        {
          name: "fragments",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Turns fragments on and off globally"
        },
        {
          name: "auto-animate",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Globally enable/disable auto-animate (enabled by default)"
        },
        {
          name: "auto-animate-easing",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "string",
          default: "ease",
          description: {
            short: "Default CSS easing function for auto-animation",
            long: "Default CSS easing function for auto-animation.\nCan be overridden per-slide or per-element via attributes.\n"
          }
        },
        {
          name: "auto-animate-duration",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "number",
          default: 1,
          description: {
            short: "Duration (in seconds) of auto-animate transition",
            long: "Duration (in seconds) of auto-animate transition.\nCan be overridden per-slide or per-element via attributes.\n"
          }
        },
        {
          name: "auto-animate-unmatched",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: {
            short: "Auto-animate unmatched elements.",
            long: "Auto-animate unmatched elements.\nCan be overridden per-slide or per-element via attributes.\n"
          }
        },
        {
          name: "auto-animate-styles",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            arrayOf: {
              enum: [
                "opacity",
                "color",
                "background-color",
                "padding",
                "font-size",
                "line-height",
                "letter-spacing",
                "border-width",
                "border-color",
                "border-radius",
                "outline",
                "outline-offset"
              ]
            }
          },
          description: {
            short: "CSS properties that can be auto-animated (positional styles like top, left, etc.\nare always animated).\n"
          }
        }
      ],
      "schema/document-slides.yml": [
        {
          name: "incremental",
          tags: {
            formats: [
              "pptx",
              "beamer",
              "$html-pres"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Make list items in slide shows display incrementally (one by one). \nThe default is for lists to be displayed all at once.\n"
        },
        {
          name: "slide-level",
          tags: {
            formats: [
              "pptx",
              "beamer",
              "$html-pres"
            ]
          },
          schema: "number",
          default: 2,
          description: {
            short: "Specifies that headings with the specified level create slides.\nHeadings above this level in the hierarchy are used to divide \nthe slide show into sections.\n",
            long: "Specifies that headings with the specified level create slides.\nHeadings above this level in the hierarchy are used to divide \nthe slide show into sections; headings below this level create \nsubheads within a slide. Valid values are 0-6. If a slide level\nof 0 is specified, slides will not be split automatically on \nheadings, and horizontal rules must be used to indicate slide \nboundaries. If a slide level is not specified explicitly, the\nslide level will be set automatically based on the contents of\nthe document\n"
          }
        },
        {
          name: "slide-number",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            anyOf: [
              "boolean",
              {
                enum: [
                  "h.v",
                  "h/v",
                  "c",
                  "c/t"
                ]
              }
            ]
          },
          default: false,
          description: {
            short: "Display the page number of the current slide",
            long: "Display the page number of the current slide\n\n- `true`:    Show slide number\n- `false`:   Hide slide number\n\nCan optionally be set as a string that specifies the number formatting:\n\n- `h.v`:   Horizontal . vertical slide number\n- `h/v`:   Horizontal / vertical slide number\n- `c`:   Flattened slide number\n- `c/t`:   Flattened slide number / total slides (default)\n"
          }
        },
        {
          name: "show-slide-number",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "all",
              "print",
              "speaker"
            ]
          },
          default: "all",
          description: "Contexts in which the slide number appears (`all`, `print`, or `speaker`)"
        },
        {
          name: "title-slide-attributes",
          schema: {
            object: {
              properties: {
                "data-background-color": {
                  string: {
                    description: "CSS color for title slide background"
                  }
                },
                "data-background-image": {
                  string: {
                    description: "URL or path to the background image."
                  }
                },
                "data-background-size": {
                  string: {
                    description: "CSS background size (defaults to `cover`)"
                  }
                },
                "data-background-position": {
                  string: {
                    description: "CSS background position (defaults to `center`)"
                  }
                },
                "data-background-repeat": {
                  string: {
                    description: "CSS background repeat (defaults to `no-repeat`)"
                  }
                },
                "data-background-opacity": {
                  string: {
                    description: "Opacity of the background image on a 0-1 scale. \n0 is transparent and 1 is fully opaque.\n"
                  }
                }
              }
            }
          },
          tags: {
            formats: [
              "revealjs"
            ]
          },
          description: {
            short: "Additional attributes for the title slide of a reveal.js presentation.",
            long: "Additional attributes for the title slide of a reveal.js presentation as a map of \nattribute names and values. For example\n\n```yaml\n  title-slide-attributes:\n      data-background-image: /path/to/title_image.png\n      data-background-size: contain      \n```\n\n(Note that the data- prefix is required here, as it isn\u2019t added automatically.)\n"
          }
        },
        {
          name: "title-slide-style",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: {
            enum: [
              "pandoc",
              "default"
            ]
          },
          default: "default",
          description: "The title slide style. Use `pandoc` to select the Pandoc default title slide style."
        },
        {
          name: "center-title-slide",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: true,
          description: "Vertical centering of title slide"
        },
        {
          name: "show-notes",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Make speaker notes visible to all viewers\n"
        },
        {
          name: "rtl",
          tags: {
            formats: [
              "revealjs"
            ]
          },
          schema: "boolean",
          default: false,
          description: "Change the presentation direction to be RTL\n"
        }
      ],
      "schema/document-tables.yml": [
        {
          name: "df-print",
          schema: {
            enum: [
              "default",
              "kable",
              "tibble",
              "paged"
            ]
          },
          tags: {
            engine: "knitr"
          },
          default: "kable",
          description: {
            short: "Method used to print tables in Knitr engine documents (`default`,\n`kable`, `tibble`, or `paged`). Uses `default` if not specified.\n",
            long: "Method used to print tables in Knitr engine documents:\n\n-  `default`: Use the default S3 method for the data frame.\n-  `kable`: Markdown table using the `knitr::kable()` function.\n-  `tibble`: Plain text table using the `tibble` package.\n-  `paged`: HTML table with paging for row and column overflow.\n\nThe default printing method is `kable`.\n"
          }
        }
      ],
      "schema/document-text.yml": [
        {
          name: "wrap",
          tags: {
            formats: [
              "!$pdf-all",
              "!$office-all",
              "!$odt-all",
              "!$html-all",
              "!$docbook-all"
            ]
          },
          schema: {
            enum: [
              "auto",
              "none",
              "preserve"
            ]
          },
          default: "auto",
          description: {
            short: "Determine how text is wrapped in the output (`auto`, `none`, or `preserve`).",
            long: "Determine how text is wrapped in the output (the source code, not the rendered\nversion). \n\n- `auto` (default): Pandoc will attempt to wrap lines to the column width specified by `columns` (default 72). \n- `none`: Pandoc will not wrap lines at all. \n- `preserve`: Pandoc will attempt to preserve the wrapping from the source\n  document. Where there are nonsemantic newlines in the source, there will be\n  nonsemantic newlines in the output as well.\n"
          }
        },
        {
          name: "columns",
          tags: {
            formats: [
              "!$pdf-all",
              "!$office-all",
              "!$odt-all",
              "!$html-all",
              "!$docbook-all"
            ]
          },
          schema: "number",
          description: {
            short: "Specify length of lines in characters.",
            long: "Specify length of lines in characters. This affects text wrapping in generated source\ncode (see `wrap`). It also affects calculation of column widths for plain text\ntables.\n"
          }
        },
        {
          name: "tab-stop",
          tags: {
            formats: [
              "!$pdf-all",
              "!$office-all",
              "!$odt-all",
              "!$html-all",
              "!$docbook-all"
            ]
          },
          schema: "number",
          description: {
            short: "Specify the number of spaces per tab (default is 4).",
            long: "Specify the number of spaces per tab (default is 4). Note that tabs\nwithin normal textual input are always converted to spaces. Tabs \nwithin code are also converted, however this can be disabled with\n`preserve-tabs: false`.\n"
          }
        },
        {
          name: "preserve-tabs",
          tags: {
            formats: [
              "!$pdf-all",
              "!$office-all",
              "!$odt-all",
              "!$html-all",
              "!$docbook-all"
            ]
          },
          schema: "boolean",
          default: false,
          description: {
            short: "Preserve tabs within code instead of converting them to spaces.\n",
            long: "Preserve tabs within code instead of converting them to spaces.\n(By default, pandoc converts tabs to spaces before parsing its input.) \nNote that this will only affect tabs in literal code spans and code blocks. \nTabs in regular text are always treated as spaces.\n"
          }
        },
        {
          name: "eol",
          tags: {
            formats: [
              "!$pdf-all",
              "!$office-all",
              "!$odt-all",
              "!$html-all",
              "!$docbook-all"
            ]
          },
          schema: {
            enum: [
              "lf",
              "crlf",
              "native"
            ]
          },
          description: {
            short: "Manually specify line endings (`lf`, `crlf`, or `native`).",
            long: "Manually specify line endings: \n\n- `crlf`: Use Windows line endings\n- `lf`: Use macOS/Linux/UNIX line endings\n- `native` (default): Use line endings appropriate to the OS on which pandoc is being run).\n"
          }
        },
        {
          name: "strip-comments",
          schema: "boolean",
          tags: {
            formats: [
              "$markdown-all",
              "textile",
              "$html-files"
            ]
          },
          description: {
            short: "Strip out HTML comments in source, rather than passing them on to output.",
            long: "Strip out HTML comments in the Markdown source,\nrather than passing them on to Markdown, Textile or HTML\noutput as raw HTML.  This does not apply to HTML comments\ninside raw HTML blocks when the `markdown_in_html_blocks`\nextension is not set.\n"
          }
        },
        {
          name: "ascii",
          tags: {
            formats: [
              "$html-all",
              "$pdf-all",
              "$markdown-all",
              "ms"
            ]
          },
          schema: "boolean",
          description: {
            short: "Use only ASCII characters in output.",
            long: "Use only ASCII characters in output. Currently supported for XML\nand HTML formats (which use entities instead of UTF-8 when this\noption is selected), CommonMark, gfm, and Markdown (which use\nentities), roff ms (which use hexadecimal escapes), and to a\nlimited degree LaTeX (which uses standard commands for accented\ncharacters when possible). roff man output uses ASCII by default.\n"
          }
        }
      ],
      "schema/document-toc.yml": [
        {
          name: "toc",
          alias: "table-of-contents",
          tags: {
            formats: [
              "!man",
              "!$docbook-all",
              "!$jats-all"
            ]
          },
          schema: "boolean",
          description: {
            short: "Include an automatically generated table of contents",
            long: "Include an automatically generated table of contents (or, in\nthe case of `latex`, `context`, `docx`, `odt`,\n`opendocument`, `rst`, or `ms`, an instruction to create\none) in the output document. This option has no effect\nif `standalone` is `false`.\n\nNote that if you are producing a PDF via `ms`, the table\nof contents will appear at the beginning of the\ndocument, before the title.  If you would prefer it to\nbe at the end of the document, use the option\n`pdf-engine-opt: --no-toc-relocation`.\n"
          }
        },
        {
          name: "toc-depth",
          tags: {
            formats: [
              "!man",
              "!$docbook-all",
              "!$jats-all"
            ]
          },
          schema: "number",
          description: "Specify the number of section levels to include in the table of contents.\nThe default is 3\n"
        },
        {
          name: "toc-location",
          schema: {
            enum: [
              "body",
              "left",
              "right"
            ]
          },
          default: "right",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "Location for table of contents (`body`, `left`, or `right` (default)).\n"
        },
        {
          name: "toc-title",
          schema: "string",
          tags: {
            formats: [
              "$epub-all",
              "$odt-all",
              "$office-all",
              "$pdf-all",
              "$html-doc",
              "revealjs"
            ]
          },
          description: "The title used for the table of contents."
        },
        {
          name: "lof",
          schema: "boolean",
          default: false,
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "Print a list of figures in the document."
        },
        {
          name: "lot",
          schema: "boolean",
          default: false,
          tags: {
            formats: [
              "$pdf-all"
            ]
          },
          description: "Print a list of tables in the document."
        }
      ],
      "schema/document-website.yml": [
        {
          name: "search",
          schema: "boolean",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          default: true,
          description: "Setting this to false prevents this document from being included in searches."
        },
        {
          name: "aliases",
          schema: {
            arrayOf: "string"
          },
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "URLs that alias this document, when included in a website."
        },
        {
          name: "image",
          schema: "path",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: {
            short: "The path to a preview image for this document.",
            long: "The path to a preview image for this content. By default, \nQuarto will use the image value from the site: metadata. \nIf you provide an image, you may also optionally provide \nan image-width and image-height to improve \nthe appearance of your Twitter Card.\n\nIf image is not provided, Quarto will automatically attempt \nto locate a preview image.\n"
          }
        },
        {
          name: "image-height",
          schema: "string",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "The height of the preview image for this document."
        },
        {
          name: "image-width",
          schema: "string",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "The width of the preview image for this document."
        },
        {
          name: "image-alt",
          schema: "string",
          tags: {
            formats: [
              "$html-doc"
            ]
          },
          description: "The alt text for preview image on this page."
        }
      ],
      "schema/format-aliases.yml": {
        aliases: {
          "epub-all": [
            "epub",
            "epub2",
            "epub3"
          ],
          "pdf-all": [
            "latex",
            "pdf",
            "beamer"
          ],
          "markdown-all": [
            "markdown",
            "gfm",
            "commonmark",
            "commonmark_x",
            "markua",
            "md"
          ],
          "office-all": [
            "docx",
            "pptx"
          ],
          "docbook-all": [
            "docbook",
            "docbook4",
            "docbook5"
          ],
          "odt-all": [
            "odt",
            "opendocument"
          ],
          "html-doc": [
            "html",
            "html4",
            "html5"
          ],
          "html-pres": [
            "slidy",
            "slideous",
            "s5",
            "revealjs",
            "dzslides"
          ],
          "pres-all": [
            "pptx",
            "beamer",
            "$html-pres"
          ],
          "html-files": [
            "$html-doc",
            "$html-pres"
          ],
          "html-all": [
            "$html-files",
            "$epub-all"
          ],
          "asciidoc-all": [
            "asciidoc",
            "asciidoctor"
          ],
          "jats-all": [
            "jats",
            "jats_archiving",
            "jats_articleauthoring",
            "jats_publishing"
          ],
          "pandoc-all": [
            "asciidoc",
            "asciidoctor",
            "beamer",
            "biblatex",
            "bibtex",
            "commonmark",
            "commonmark_x",
            "context",
            "csljson",
            "docbook",
            "docbook4",
            "docbook5",
            "docx",
            "dokuwiki",
            "dzslides",
            "epub",
            "epub2",
            "epub3",
            "fb2",
            "gfm",
            "haddock",
            "html",
            "html4",
            "html5",
            "icml",
            "ipynb",
            "jats",
            "jats_archiving",
            "jats_articleauthoring",
            "jats_publishing",
            "jira",
            "json",
            "latex",
            "man",
            "markdown",
            "markdown_github",
            "markdown_mmd",
            "markdown_phpextra",
            "markdown_strict",
            "markua",
            "mediawiki",
            "ms",
            "muse",
            "native",
            "odt",
            "opendocument",
            "opml",
            "org",
            "pdf",
            "plain",
            "pptx",
            "revealjs",
            "rst",
            "rtf",
            "s5",
            "slideous",
            "slidy",
            "tei",
            "texinfo",
            "textile",
            "xwiki",
            "zimwiki",
            "md"
          ]
        }
      },
      "schema/groups.yml": {
        cell: {
          attributes: {
            title: "Attributes"
          },
          codeoutput: {
            title: "Code Output"
          },
          textoutput: {
            title: "Cell Output"
          },
          figure: {
            title: "Figures"
          },
          table: {
            title: "Tables"
          },
          layout: {
            title: "Panel Layout"
          },
          pagelayout: {
            title: "Page Columns"
          },
          cache: {
            title: "Cache"
          },
          include: {
            title: "Include"
          }
        },
        document: {
          attributes: {
            title: "Title & Author"
          },
          options: {
            title: "Format Options"
          },
          toc: {
            title: "Table of Contents"
          },
          numbering: {
            title: "Numbering"
          },
          slides: {
            title: "Slides"
          },
          "reveal-content": {
            title: "Slide Content"
          },
          "reveal-tools": {
            title: "Slide Tools"
          },
          "reveal-transitions": {
            title: "Transitions"
          },
          "reveal-navigation": {
            title: "Navigation"
          },
          "reveal-print": {
            title: "Print to PDF"
          },
          "reveal-media": {
            title: "Media"
          },
          "reveal-layout": {
            title: "Slide Layout"
          },
          "reveal-hidden": {
            title: "Reveal Hidden"
          },
          epub: {
            title: "ePub Options"
          },
          fonts: {
            title: "Fonts"
          },
          colors: {
            title: "Colors"
          },
          layout: {
            title: "Layout"
          },
          formatting: {
            title: "Formatting"
          },
          code: {
            title: "Code"
          },
          execute: {
            title: "Execution",
            description: "Execution options should be specified within the `execute` key. For example:\n\n```yaml\nexecute:\n  echo: false\n  warning: false\n```\n"
          },
          figures: {
            title: "Figures"
          },
          tables: {
            title: "Tables"
          },
          links: {
            title: "Links"
          },
          references: {
            title: "References"
          },
          footnotes: {
            title: "Footnotes"
          },
          crossref: {
            title: "Crossrefs"
          },
          citation: {
            title: "Citation"
          },
          language: {
            title: "Language"
          },
          comments: {
            title: "Comments"
          },
          includes: {
            title: "Includes"
          },
          metadata: {
            title: "Metadata"
          },
          render: {
            title: "Rendering"
          },
          latexmk: {
            title: "Latexmk"
          },
          website: {
            title: "Website"
          },
          pdfa: {
            title: "PDF/A"
          },
          text: {
            title: "Text Output"
          },
          library: {
            title: "Library"
          },
          editor: {
            title: "Editor"
          },
          hidden: {
            title: "Hidden"
          }
        }
      },
      "schema/project.yml": [
        {
          name: "project",
          description: "Project configuration.",
          schema: {
            object: {
              closed: true,
              properties: {
                title: {
                  schema: "string"
                },
                type: {
                  string: {
                    completions: [
                      "default",
                      "website",
                      "book"
                    ],
                    description: "Project type (`default`, `website`, or `book`)"
                  }
                },
                render: {
                  arrayOf: "path",
                  description: "Files to render (defaults to all files)"
                },
                "execute-dir": {
                  enum: [
                    "file",
                    "project"
                  ],
                  description: {
                    short: "Working directory for computations",
                    long: "Control the working directory for computations. \n\n- `file`: Use the directory of the file that is currently executing.\n- `project`: Use the root directory of the project.\n"
                  }
                },
                "output-dir": {
                  path: {
                    description: "Output directory"
                  }
                },
                "lib-dir": {
                  path: {
                    description: "HTML library (JS/CSS/etc.) directory"
                  }
                },
                resources: {
                  maybeArrayOf: {
                    schema: "path",
                    description: "Additional file resources to be copied to output directory"
                  }
                },
                preview: {
                  description: "Options for `quarto preview`",
                  schema: {
                    ref: "project-preview"
                  }
                },
                "pre-render": {
                  description: "Scripts to run as a pre-render step",
                  schema: {
                    maybeArrayOf: "string"
                  }
                },
                "post-render": {
                  description: "Scripts to run as a post-render step",
                  schema: {
                    maybeArrayOf: "string"
                  }
                },
                detect: {
                  description: "Array of paths used to detect the project type within a directory",
                  schema: {
                    arrayOf: {
                      arrayOf: "string"
                    }
                  },
                  hidden: true
                }
              }
            }
          }
        },
        {
          name: "website",
          description: "Website configuration.",
          schema: {
            ref: "base-website"
          }
        },
        {
          name: "book",
          description: "Book configuration.",
          schema: {
            object: {
              super: [
                {
                  resolveRef: "book-schema"
                },
                {
                  resolveRef: "csl-item"
                }
              ]
            }
          }
        },
        {
          name: "type",
          hidden: true,
          schema: {
            enum: [
              "cd93424f-d5ba-4e95-91c6-1890eab59fc7"
            ]
          },
          errorMessage: "type key not supported at project type-level. Use `project: type: ...` instead.",
          description: "internal-schema-hack"
        }
      ],
      "schema/schema.yml": [
        {
          id: "schema/scalar",
          anyOf: [
            "number",
            "boolean",
            "string",
            {
              enum: [
                null
              ]
            }
          ]
        },
        {
          id: "schema/description",
          anyOf: [
            "string",
            {
              object: {
                closed: true,
                properties: {
                  short: "string",
                  long: "string"
                }
              }
            }
          ]
        },
        {
          id: "schema/base",
          object: {
            closed: true,
            properties: {
              additionalCompletions: {
                arrayOf: "string"
              },
              completions: {
                arrayOf: "string"
              },
              id: "string",
              hidden: "boolean",
              tags: "object",
              errorDescription: "string",
              description: {
                ref: "schema/description"
              },
              default: "any"
            }
          }
        },
        {
          id: "schema/enum",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              enum: {
                anyOf: [
                  {
                    arrayOf: {
                      ref: "schema/scalar"
                    }
                  },
                  {
                    object: {
                      closed: true,
                      super: {
                        resolveRef: "schema/base"
                      },
                      properties: {
                        values: {
                          arrayOf: {
                            ref: "schema/scalar"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          id: "schema/null",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              null: {
                ref: "schema/schema"
              }
            }
          }
        },
        {
          id: "schema/explicit-schema",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              schema: {
                ref: "schema/schema"
              }
            }
          }
        },
        {
          id: "schema/string",
          anyOf: [
            {
              object: {
                closed: true,
                super: {
                  resolveRef: "schema/base"
                },
                properties: {
                  pattern: "string"
                }
              }
            },
            {
              object: {
                closed: true,
                super: {
                  resolveRef: "schema/base"
                },
                properties: {
                  string: {
                    ref: "schema/schema"
                  },
                  path: {
                    ref: "schema/schema"
                  },
                  pattern: {
                    ref: "schema/schema"
                  }
                }
              }
            }
          ]
        },
        {
          id: "schema/number",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              number: {
                ref: "schema/schema"
              }
            }
          }
        },
        {
          id: "schema/boolean",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              boolean: {
                ref: "schema/schema"
              }
            }
          }
        },
        {
          id: "schema/resolve-ref",
          object: {
            closed: true,
            properties: {
              resolveRef: "string"
            }
          }
        },
        {
          id: "schema/ref",
          object: {
            closed: true,
            properties: {
              ref: "string",
              description: {
                ref: "schema/description"
              }
            }
          }
        },
        {
          id: "schema/maybe-array-of",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              maybeArrayOf: {
                ref: "schema/schema"
              }
            }
          }
        },
        {
          id: "schema/array-of",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              arrayOf: {
                anyOf: [
                  {
                    ref: "schema/schema"
                  },
                  {
                    object: {
                      closed: true,
                      super: {
                        resolveRef: "schema/base"
                      },
                      properties: {
                        length: "number",
                        schema: {
                          ref: "schema/schema"
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          id: "schema/all-of",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              allOf: {
                anyOf: [
                  {
                    arrayOf: {
                      ref: "schema/schema"
                    }
                  },
                  {
                    object: {
                      super: {
                        resolveRef: "schema/base"
                      },
                      properties: {
                        schemas: {
                          arrayOf: {
                            ref: "schema/schema"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          id: "schema/any-of",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              anyOf: {
                anyOf: [
                  {
                    arrayOf: {
                      ref: "schema/schema"
                    }
                  },
                  {
                    object: {
                      super: {
                        resolveRef: "schema/base"
                      },
                      properties: {
                        schemas: {
                          arrayOf: {
                            ref: "schema/schema"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          id: "schema/record",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              record: {
                anyOf: [
                  {
                    object: {
                      additionalProperties: {
                        ref: "schema/schema"
                      }
                    }
                  },
                  {
                    object: {
                      closed: true,
                      super: {
                        resolveRef: "schema/base"
                      },
                      properties: {
                        properties: {
                          object: {
                            additionalProperties: {
                              ref: "schema/schema"
                            }
                          }
                        }
                      },
                      required: [
                        "properties"
                      ]
                    }
                  }
                ]
              }
            }
          }
        },
        {
          id: "schema/object",
          object: {
            closed: true,
            super: {
              resolveRef: "schema/base"
            },
            properties: {
              object: {
                object: {
                  super: {
                    resolveRef: "schema/base"
                  },
                  closed: true,
                  properties: {
                    namingConvention: {
                      anyOf: [
                        {
                          enum: [
                            "ignore"
                          ]
                        },
                        {
                          arrayOf: {
                            enum: [
                              "camelCase",
                              "camel-case",
                              "camel_case",
                              "capitalizationCase",
                              "capitalization-case",
                              "capitalization_case",
                              "underscoreCase",
                              "underscore-case",
                              "underscore_case",
                              "snakeCase",
                              "snake-case",
                              "snake_case",
                              "dashCase",
                              "dash-case",
                              "dash_case",
                              "kebabCase",
                              "kebab-case",
                              "kebab_case"
                            ]
                          }
                        }
                      ]
                    },
                    properties: {
                      object: {
                        additionalProperties: {
                          ref: "schema/schema"
                        }
                      }
                    },
                    patternProperties: {
                      object: {
                        additionalProperties: {
                          ref: "schema/schema"
                        }
                      }
                    },
                    propertyNames: {
                      ref: "schema/schema"
                    },
                    additionalProperties: {
                      ref: "schema/schema"
                    },
                    super: {
                      maybeArrayOf: {
                        ref: "schema/schema"
                      }
                    },
                    required: {
                      anyOf: [
                        {
                          enum: [
                            "all"
                          ]
                        },
                        {
                          arrayOf: "string"
                        }
                      ]
                    },
                    closed: "boolean",
                    description: {
                      ref: "schema/description"
                    },
                    completions: {
                      arrayOf: "string"
                    }
                  }
                }
              }
            }
          }
        },
        {
          id: "schema/schema",
          anyOf: [
            {
              ref: "schema/enum"
            },
            {
              ref: "schema/null"
            },
            {
              ref: "schema/explicit-schema"
            },
            {
              ref: "schema/string"
            },
            {
              ref: "schema/number"
            },
            {
              ref: "schema/boolean"
            },
            {
              ref: "schema/ref"
            },
            {
              ref: "schema/resolve-ref"
            },
            {
              ref: "schema/any-of"
            },
            {
              ref: "schema/array-of"
            },
            {
              ref: "schema/maybe-array-of"
            },
            {
              ref: "schema/all-of"
            },
            {
              ref: "schema/record"
            },
            {
              ref: "schema/object"
            },
            {
              enum: [
                "number",
                "boolean",
                "path",
                "string",
                null,
                "null",
                "object",
                "any"
              ]
            }
          ],
          description: "be a yaml schema"
        },
        {
          id: "schema/schema-field",
          object: {
            properties: {
              name: "string",
              schema: {
                ref: "schema/schema"
              },
              hidden: "boolean",
              alias: "string",
              disabled: {
                maybeArrayOf: "string"
              },
              enabled: {
                maybeArrayOf: "string"
              },
              description: {
                ref: "schema/description"
              },
              tags: "object",
              errorMessage: "string"
            },
            required: [
              "name",
              "schema",
              "description"
            ],
            propertyNames: {
              enum: [
                "name",
                "schema",
                "hidden",
                "alias",
                "disabled",
                "enabled",
                "description",
                "tags",
                "errorMessage",
                "default"
              ]
            }
          }
        }
      ],
      "pandoc/formats.yml": [
        "asciidoc",
        "asciidoctor",
        "beamer",
        "biblatex",
        "bibtex",
        "commonmark",
        "commonmark_x",
        "context",
        "csljson",
        "docbook",
        "docbook4",
        "docbook5",
        "docx",
        "dokuwiki",
        "dzslides",
        "epub",
        "epub2",
        "epub3",
        "fb2",
        "gfm",
        "haddock",
        "html",
        "html4",
        "html5",
        "icml",
        "ipynb",
        "jats",
        "jats_archiving",
        "jats_articleauthoring",
        "jats_publishing",
        "jira",
        "json",
        "latex",
        "man",
        "markdown",
        "markdown_github",
        "markdown_mmd",
        "markdown_phpextra",
        "markdown_strict",
        "markua",
        "mediawiki",
        "ms",
        "muse",
        "native",
        "odt",
        "opendocument",
        "opml",
        "org",
        "pdf",
        "plain",
        "pptx",
        "revealjs",
        "rst",
        "rtf",
        "s5",
        "slideous",
        "slidy",
        "tei",
        "texinfo",
        "textile",
        "xwiki",
        "zimwiki"
      ],
      "schema/html-descriptions.yml": [
        {
          short: "Automatically generate sidebar contents.",
          long: "Automatically generate sidebar contents. Pass <code>true</code> to\ninclude all documents in the site, a directory name to include only\ndocuments in that directory, or a glob (or list of globs) to include\ndocuments based on a pattern.\nSubdirectories will create sections (use an <code>index.qmd</code> in\nthe directory to provide its title). Order will be alphabetical unless a\nnumeric <code>order</code> field is provided in document metadata."
        },
        "Accessible label for the item.",
        "Alias for href",
        "Link to file contained with the project or external URL",
        {
          short: "Name of bootstrap icon (e.g.&nbsp;<code>github</code>,\n<code>twitter</code>, <code>share</code>)",
          long: 'Name of bootstrap icon (e.g.&nbsp;<code>github</code>,\n<code>twitter</code>, <code>share</code>) See <a href="https://icons.getbootstrap.com/" class="uri">https://icons.getbootstrap.com/</a> for a list of available\nicons'
        },
        "Text to display for item (defaults to the document title if not\nprovided)",
        "Alias for href",
        "The Github repo that will be used to store comments.",
        "The label that will be assigned to issues created by Utterances.",
        {
          short: "The Github theme that should be used for Utterances.",
          long: "The Github theme that should be used for Utterances\n(<code>github-light</code>, <code>github-dark</code>,\n<code>github-dark-orange</code>, <code>icy-dark</code>,\n<code>dark-blue</code>, <code>photon-dark</code>,\n<code>body-light</code>, or <code>gruvbox-dark</code>)"
        },
        {
          short: "How posts should be mapped to Github issues",
          long: "How posts should be mapped to Github issues (<code>pathname</code>,\n<code>url</code>, <code>title</code> or <code>og:title</code>)"
        },
        {
          short: "The Github repo that will be used to store comments.",
          long: "The Github repo that will be used to store comments.\nIn order to work correctly, the repo must be public, with the giscus\napp installed, and the discussions feature must be enabled."
        },
        {
          short: "The Github repository identifier.",
          long: 'The Github repository identifier.\nYou can quickly find this by using the configuration tool at <a href="https://giscus.app">https://giscus.app</a>. If this is not\nprovided, Quarto will attempt to discover it at render time.'
        },
        {
          short: "The discussion category where new discussions will be created.",
          long: "The discussion category where new discussions will be created. It is\nrecommended to use a category with the <strong>Announcements</strong>\ntype so that new discussions can only be created by maintainers and\ngiscus."
        },
        {
          short: "The Github category identifier.",
          long: 'The Github category identifier.\nYou can quickly find this by using the configuration tool at <a href="https://giscus.app">https://giscus.app</a>. If this is not\nprovided, Quarto will attempt to discover it at render time.'
        },
        {
          short: "The mapping between the page and the embedded discussion.",
          long: "The mapping between the page and the embedded discussion."
        },
        "Display reactions for the discussion\u2019s main post before the\ncomments.",
        "Specify <code>loading: lazy</code> to defer loading comments until\nthe user scrolls near the comments container.",
        "Place the comment input box above or below the comments.",
        "The giscus theme to use when displaying comments.",
        "The language that should be used when displaying the commenting\ninterface.",
        "Controls whether the sidebar opens automatically on startup.",
        "Controls whether the in-document highlights are shown by default\n(<code>always</code> or <code>never</code>)",
        "Controls the overall look of the sidebar (<code>classic</code> or\n<code>clean</code>)",
        "Controls whether the experimental New Note button should be shown in\nthe notes tab in the sidebar.",
        "Specify a URL to direct a user to, in a new tab. when they click on\nthe annotation author link in the header of an annotation.",
        "Alternative annotation services which the client should connect to\ninstead of connecting to the public Hypothesis service at\nhypothes.is.",
        "The base URL of the service API.",
        "The domain name which the annotation service is associated with.",
        "An OAuth 2 grant token which the client can send to the service in\norder to get an access token for making authenticated requests to the\nservice.",
        "A flag indicating whether users should be able to leave groups of\nwhich they are a member.",
        "A flag indicating whether annotation cards should show links that\ntake the user to see an annotation in context.",
        "An array of Group IDs or the literal string\n<code>$rpc:requestGroups</code>",
        "The URL to an image for the annotation service. This image will\nappear to the left of the name of the currently selected group.",
        "Settings to adjust the commenting sidebar\u2019s look and feel.",
        "Secondary color for elements of the commenting UI.",
        "The main background color of the commenting UI.",
        "The background color for call to action buttons.",
        "The font family for selection text in the annotation card.",
        "The font family for the actual annotation value that the user writes\nabout the page or selection.",
        "A CSS selector specifying the containing element into which the\nsidebar iframe will be placed.",
        "Defines a focused filter set for the available annotations on a\npage.",
        "The username of the user to focus on.",
        "The userid of the user to focus on.",
        "The display name of the user to focus on.",
        "Host url and port number of receiving iframe",
        "Number of nested iframes deep the client is relative from the\nreceiving iframe.",
        "The root URL from which assets are loaded.",
        "The URL for the sidebar application which displays annotations.",
        {
          short: "The title of the page",
          long: "The title of the page. Note that by default Quarto will automatically\nuse the title metadata from the page. Specify this field if you\u2019d like\nto override the title for this provider."
        },
        {
          short: "A short description of the content.",
          long: "A short description of the content. Note that by default Quarto will\nautomatically use the description metadata from the page. Specify this\nfield if you\u2019d like to override the description for this provider."
        },
        {
          short: "The path to a preview image for the content.",
          long: "The path to a preview image for the content. By default, Quarto will\nuse the <code>image</code> value from the format metadata. If you\nprovide an image, you may also optionally provide an\n<code>image-width</code> and <code>image-height</code>."
        },
        {
          short: "The alt text for the preview image.",
          long: "The alt text for the preview image. By default, Quarto will use the\n<code>image-alt</code> value from the format metadata. If you provide an\nimage, you may also optionally provide an <code>image-width</code> and\n<code>image-height</code>."
        },
        "Image width (pixels)",
        "Image height (pixels)",
        "Port to listen on (defaults to random value between 3000 and\n8000)",
        "Hostname to bind to (defaults to 127.0.0.1)",
        "Use an exernal application to preview the project.",
        "Open a web browser to view the preview (defaults to true)",
        "Re-render input files when they change (defaults to true)",
        "Navigate the browser automatically when outputs are updated (defaults\nto true)",
        "Time (in seconds) after which to exit if there are no active\nclients",
        "Serve project preview using the specified command. Interpolate the\n<code>--port</code> into the command using <code>{port}</code>.",
        "Additional command line arguments for preview command.",
        "Environment variables to set for preview command.",
        "Regular expression for detecting when the server is ready.",
        "Sites published from project",
        "Unique identifier for site",
        "Published URL for site",
        {
          short: "The title of the page",
          long: "The title of the page. Note that by default Quarto will automatically\nuse the title metadata from the page. Specify this field if you\u2019d like\nto override the title for this provider."
        },
        {
          short: "A short description of the content.",
          long: "A short description of the content. Note that by default Quarto will\nautomatically use the description metadata from the page. Specify this\nfield if you\u2019d like to override the description for this provider."
        },
        {
          short: "The path to a preview image for the content.",
          long: "The path to a preview image for the content. By default, Quarto will\nuse the <code>image</code> value from the format metadata. If you\nprovide an image, you may also optionally provide an\n<code>image-width</code> and <code>image-height</code>."
        },
        {
          short: "The alt text for the preview image.",
          long: "The alt text for the preview image. By default, Quarto will use the\n<code>image-alt</code> value from the format metadata. If you provide an\nimage, you may also optionally provide an <code>image-width</code> and\n<code>image-height</code>."
        },
        "Image width (pixels)",
        "Image height (pixels)",
        {
          short: "Card style",
          long: 'Card style (<code>summary</code> or\n<code>summary_large_image</code>).\nIf this is not provided, the best style will automatically selected\nbased upon other metadata. You can learn more about Twitter Card styles\n<a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards">here</a>.'
        },
        "<code>@username</code> of the content creator (must be a quoted\nstring)",
        "<code>@username</code> of the website (must be a quoted string)",
        {
          short: "The title of the page",
          long: "The title of the page. Note that by default Quarto will automatically\nuse the title metadata from the page. Specify this field if you\u2019d like\nto override the title for this provider."
        },
        {
          short: "A short description of the content.",
          long: "A short description of the content. Note that by default Quarto will\nautomatically use the description metadata from the page. Specify this\nfield if you\u2019d like to override the description for this provider."
        },
        {
          short: "The path to a preview image for the content.",
          long: "The path to a preview image for the content. By default, Quarto will\nuse the <code>image</code> value from the format metadata. If you\nprovide an image, you may also optionally provide an\n<code>image-width</code> and <code>image-height</code>."
        },
        {
          short: "The alt text for the preview image.",
          long: "The alt text for the preview image. By default, Quarto will use the\n<code>image-alt</code> value from the format metadata. If you provide an\nimage, you may also optionally provide an <code>image-width</code> and\n<code>image-height</code>."
        },
        "Image width (pixels)",
        "Image height (pixels)",
        "Locale of open graph metadata",
        {
          short: "Name that should be displayed for the overall site",
          long: "Name that should be displayed for the overall site. If not explicitly\nprovided in the <code>open-graph</code> metadata, Quarto will use the\nwebsite or book <code>title</code> by default."
        },
        "Footer left content",
        "Footer right content",
        "Footer center content",
        "Footer border (<code>true</code>, <code>false</code>, or a border\ncolor)",
        "Footer background color",
        "Footer foreground color",
        "Website title",
        "Website description",
        "The path to the favicon for this website",
        "Base URL for published website",
        "Path to site (defaults to <code>/</code>). Not required if you\nspecify <code>site-url</code>.",
        "Base URL for website source code repository",
        "Subdirectory of repository containing website",
        "Branch of website source code (defaults to <code>main</code>)",
        {
          short: "Links to source repository actions",
          long: "Links to source repository actions (<code>none</code> or one or more\nof <code>edit</code>, <code>source</code>, <code>issue</code>)"
        },
        {
          short: "Links to source repository actions",
          long: "Links to source repository actions (<code>none</code> or one or more\nof <code>edit</code>, <code>source</code>, <code>issue</code>)"
        },
        "Displays a \u2018reader-mode\u2019 tool which allows users to hide the sidebar\nand table of contents when viewing a page.",
        "Enable Google Analytics for this website",
        "The Google tracking Id or measurement Id of this website.",
        {
          short: "Storage options for Google Analytics data",
          long: 'Storage option for Google Analytics data using on of these two\nvalues:\n<code>cookies</code>: Use cookies to store unique user and session\nidentification (default).\n<code>none</code>: Do not use cookies to store unique user and\nsession identification.\nFor more about choosing storage options see <a href="https://quarto.org/docs/websites/website-tools.html#storage">Storage</a>.'
        },
        {
          short: "Anonymize the user ip address.",
          long: 'Anonymize the user ip address. For more about this feature, see <a href="https://support.google.com/analytics/answer/2763052?hl=en">IP\nAnonymization (or IP masking) in Google Analytics</a>.'
        },
        {
          short: "The version number of Google Analytics to use.",
          long: "The version number of Google Analytics to use."
        },
        {
          short: "Request cookie consent before enabling scripts that set cookies",
          long: 'Quarto includes the ability to request cookie consent before enabling\nscripts that set cookies, using <a href="https://www.cookieconsent.com/">Cookie Consent</a>.\nThe user\u2019s cookie preferences will automatically control Google\nAnalytics (if enabled) and can be used to control custom scripts you add\nas well. For more information see <a href="https://quarto.org/docs/websites/website-tools.html#custom-scripts-and-cookie-consent">Custom\nScripts and Cookie Consent</a>.'
        },
        {
          short: "The type of consent that should be requested",
          long: "The type of consent that should be requested, using one of these two\nvalues:"
        },
        {
          short: "The style of the consent banner that is displayed",
          long: "The style of the consent banner that is displayed:"
        },
        "Whether to use a dark or light appearance for the consent banner\n(<code>light</code> or <code>dark</code>).",
        "The url to the website\u2019s cookie or privacy policy.",
        {
          short: "The text to display for the cookie preferences link in the website\nfooter.",
          long: ""
        },
        "Provide full text search for website",
        "Location for search widget (<code>navbar</code> or\n<code>sidebar</code>)",
        "Type of search UI (<code>overlay</code> or <code>textbox</code>)",
        "Number of matches to display (defaults to 20)",
        "Matches after which to collapse additional results",
        "Provide button for copying search link",
        "Use external Algolia search index",
        "The name of the index to use when performing a search",
        "The unique ID used by Algolia to identify your application",
        "The Search-Only API key to use to connect to Algolia",
        "Enable tracking of Algolia analytics events",
        "Enable the display of the Algolia logo in the search results\nfooter.",
        "Field that contains the URL of index entries",
        "Field that contains the title of index entries",
        "Field that contains the text of index entries",
        "Field that contains the section of index entries",
        "Additional parameters to pass when executing a search",
        "Top navigation options",
        "The navbar title. Uses the project title if none is specified.",
        "Path to a logo image that will be displayed to the left of the\ntitle.",
        "Alternate text for the logo image.",
        "Target href from navbar logo / title. By default, the logo and title\nlink to the root page of the site (/index.html).",
        "The navbar\u2019s background color (named or hex color).",
        "The navbar\u2019s foreground color (named or hex color).",
        "Include a search box in the navbar.",
        "Always show the navbar (keeping it pinned).",
        "Collapse the navbar into a menu when the display becomes narrow.",
        "The responsive breakpoint below which the navbar will collapse into a\nmenu (<code>sm</code>, <code>md</code>, <code>lg</code> (default),\n<code>xl</code>, <code>xxl</code>).",
        "List of items for the left side of the navbar.",
        "List of items for the right side of the navbar.",
        "Side navigation options",
        "The identifier for this sidebar.",
        "The sidebar title. Uses the project title if none is specified.",
        "The subtitle for this sidebar.",
        "Path to a logo image that will be displayed in the sidebar.",
        "Include a search control in the sidebar.",
        "List of sidebar tools",
        "List of items for the sidebar",
        "The style of sidebar (<code>docked</code> or\n<code>floating</code>).",
        "The sidebar\u2019s background color (named or hex color).",
        "The sidebar\u2019s foreground color (named or hex color).",
        "Whether to show a border on the sidebar (defaults to true for\n\u2018docked\u2019 sidebars)",
        "Alignment of the items within the sidebar (<code>left</code>,\n<code>right</code>, or <code>center</code>)",
        "The depth at which the sidebar contents should be collapsed by\ndefault.",
        "When collapsed, pin the collapsed sidebar to the top of the page.",
        "Markdown to place above sidebar content (text or file path)",
        "Markdown to place below sidebar content (text or file path)",
        "The identifier for this sidebar.",
        "The sidebar title. Uses the project title if none is specified.",
        "The subtitle for this sidebar.",
        "Path to a logo image that will be displayed in the sidebar.",
        "Include a search control in the sidebar.",
        "List of sidebar tools",
        "List of items for the sidebar",
        "The style of sidebar (<code>docked</code> or\n<code>floating</code>).",
        "The sidebar\u2019s background color (named or hex color).",
        "The sidebar\u2019s foreground color (named or hex color).",
        "Whether to show a border on the sidebar (defaults to true for\n\u2018docked\u2019 sidebars)",
        "Alignment of the items within the sidebar (<code>left</code>,\n<code>right</code>, or <code>center</code>)",
        "The depth at which the sidebar contents should be collapsed by\ndefault.",
        "When collapsed, pin the collapsed sidebar to the top of the page.",
        "Markdown to place above sidebar content (text or file path)",
        "Markdown to place below sidebar content (text or file path)",
        "Markdown to insert at the beginning of each page\u2019s body (below the\ntitle and author block).",
        "Markdown to insert below each page\u2019s body.",
        "Markdown to place above margin content (text or file path)",
        "Markdown to place below margin content (text or file path)",
        "Provide next and previous article links in footer",
        "Shared page footer",
        "Default site thumbnail image for <code>twitter</code>\n/<code>open-graph</code>",
        "Publish open graph metadata",
        "Publish twitter card metadata",
        "Book title",
        "Description metadata for HTML version of book",
        "The path to the favicon for this website",
        "Base URL for published website",
        "Path to site (defaults to <code>/</code>). Not required if you\nspecify <code>site-url</code>.",
        "Base URL for website source code repository",
        "Subdirectory of repository containing website",
        "Branch of website source code (defaults to <code>main</code>)",
        {
          short: "Links to source repository actions",
          long: "Links to source repository actions (<code>none</code> or one or more\nof <code>edit</code>, <code>source</code>, <code>issue</code>)"
        },
        {
          short: "Links to source repository actions",
          long: "Links to source repository actions (<code>none</code> or one or more\nof <code>edit</code>, <code>source</code>, <code>issue</code>)"
        },
        "Displays a \u2018reader-mode\u2019 tool which allows users to hide the sidebar\nand table of contents when viewing a page.",
        "Enable Google Analytics for this website",
        "The Google tracking Id or measurement Id of this website.",
        {
          short: "Storage options for Google Analytics data",
          long: 'Storage option for Google Analytics data using on of these two\nvalues:\n<code>cookies</code>: Use cookies to store unique user and session\nidentification (default).\n<code>none</code>: Do not use cookies to store unique user and\nsession identification.\nFor more about choosing storage options see <a href="https://quarto.org/docs/websites/website-tools.html#storage">Storage</a>.'
        },
        {
          short: "Anonymize the user ip address.",
          long: 'Anonymize the user ip address. For more about this feature, see <a href="https://support.google.com/analytics/answer/2763052?hl=en">IP\nAnonymization (or IP masking) in Google Analytics</a>.'
        },
        {
          short: "The version number of Google Analytics to use.",
          long: "The version number of Google Analytics to use."
        },
        {
          short: "Request cookie consent before enabling scripts that set cookies",
          long: 'Quarto includes the ability to request cookie consent before enabling\nscripts that set cookies, using <a href="https://www.cookieconsent.com/">Cookie Consent</a>.\nThe user\u2019s cookie preferences will automatically control Google\nAnalytics (if enabled) and can be used to control custom scripts you add\nas well. For more information see <a href="https://quarto.org/docs/websites/website-tools.html#custom-scripts-and-cookie-consent">Custom\nScripts and Cookie Consent</a>.'
        },
        {
          short: "The type of consent that should be requested",
          long: "The type of consent that should be requested, using one of these two\nvalues:"
        },
        {
          short: "The style of the consent banner that is displayed",
          long: "The style of the consent banner that is displayed:"
        },
        "Whether to use a dark or light appearance for the consent banner\n(<code>light</code> or <code>dark</code>).",
        "The url to the website\u2019s cookie or privacy policy.",
        {
          short: "The text to display for the cookie preferences link in the website\nfooter.",
          long: ""
        },
        "Provide full text search for website",
        "Location for search widget (<code>navbar</code> or\n<code>sidebar</code>)",
        "Type of search UI (<code>overlay</code> or <code>textbox</code>)",
        "Number of matches to display (defaults to 20)",
        "Matches after which to collapse additional results",
        "Provide button for copying search link",
        "Use external Algolia search index",
        "The name of the index to use when performing a search",
        "The unique ID used by Algolia to identify your application",
        "The Search-Only API key to use to connect to Algolia",
        "Enable tracking of Algolia analytics events",
        "Enable the display of the Algolia logo in the search results\nfooter.",
        "Field that contains the URL of index entries",
        "Field that contains the title of index entries",
        "Field that contains the text of index entries",
        "Field that contains the section of index entries",
        "Additional parameters to pass when executing a search",
        "Top navigation options",
        "The navbar title. Uses the project title if none is specified.",
        "Path to a logo image that will be displayed to the left of the\ntitle.",
        "Alternate text for the logo image.",
        "Target href from navbar logo / title. By default, the logo and title\nlink to the root page of the site (/index.html).",
        "The navbar\u2019s background color (named or hex color).",
        "The navbar\u2019s foreground color (named or hex color).",
        "Include a search box in the navbar.",
        "Always show the navbar (keeping it pinned).",
        "Collapse the navbar into a menu when the display becomes narrow.",
        "The responsive breakpoint below which the navbar will collapse into a\nmenu (<code>sm</code>, <code>md</code>, <code>lg</code> (default),\n<code>xl</code>, <code>xxl</code>).",
        "List of items for the left side of the navbar.",
        "List of items for the right side of the navbar.",
        "Side navigation options",
        "The identifier for this sidebar.",
        "The sidebar title. Uses the project title if none is specified.",
        "The subtitle for this sidebar.",
        "Path to a logo image that will be displayed in the sidebar.",
        "Include a search control in the sidebar.",
        "List of sidebar tools",
        "List of items for the sidebar",
        "The style of sidebar (<code>docked</code> or\n<code>floating</code>).",
        "The sidebar\u2019s background color (named or hex color).",
        "The sidebar\u2019s foreground color (named or hex color).",
        "Whether to show a border on the sidebar (defaults to true for\n\u2018docked\u2019 sidebars)",
        "Alignment of the items within the sidebar (<code>left</code>,\n<code>right</code>, or <code>center</code>)",
        "The depth at which the sidebar contents should be collapsed by\ndefault.",
        "When collapsed, pin the collapsed sidebar to the top of the page.",
        "Markdown to place above sidebar content (text or file path)",
        "Markdown to place below sidebar content (text or file path)",
        "The identifier for this sidebar.",
        "The sidebar title. Uses the project title if none is specified.",
        "The subtitle for this sidebar.",
        "Path to a logo image that will be displayed in the sidebar.",
        "Include a search control in the sidebar.",
        "List of sidebar tools",
        "List of items for the sidebar",
        "The style of sidebar (<code>docked</code> or\n<code>floating</code>).",
        "The sidebar\u2019s background color (named or hex color).",
        "The sidebar\u2019s foreground color (named or hex color).",
        "Whether to show a border on the sidebar (defaults to true for\n\u2018docked\u2019 sidebars)",
        "Alignment of the items within the sidebar (<code>left</code>,\n<code>right</code>, or <code>center</code>)",
        "The depth at which the sidebar contents should be collapsed by\ndefault.",
        "When collapsed, pin the collapsed sidebar to the top of the page.",
        "Markdown to place above sidebar content (text or file path)",
        "Markdown to place below sidebar content (text or file path)",
        "Markdown to insert at the beginning of each page\u2019s body (below the\ntitle and author block).",
        "Markdown to insert below each page\u2019s body.",
        "Markdown to place above margin content (text or file path)",
        "Markdown to place below margin content (text or file path)",
        "Provide next and previous article links in footer",
        "Shared page footer",
        "Default site thumbnail image for <code>twitter</code>\n/<code>open-graph</code>",
        "Publish open graph metadata",
        "Publish twitter card metadata",
        "Book subtitle",
        "Author or authors of the book",
        "Author or authors of the book",
        "Book publication date",
        "Format string for dates in the book",
        "Book abstract",
        "Book part and chapter files",
        "Book appendix files",
        "Book references file",
        "Base name for single-file output (e.g.&nbsp;PDF, ePub)",
        "Cover image (used in HTML and ePub formats)",
        "Alternative text for cover image (used in HTML format)",
        "Sharing buttons to include on navbar or sidebar (one or more of\n<code>twitter</code>, <code>facebook</code>, <code>linkedin</code>)",
        "Sharing buttons to include on navbar or sidebar (one or more of\n<code>twitter</code>, <code>facebook</code>, <code>linkedin</code>)",
        "Download buttons for other formats to include on navbar or sidebar\n(one or more of <code>pdf</code>, <code>epub</code>, and\n<code>docx</code>)",
        "Download buttons for other formats to include on navbar or sidebar\n(one or more of <code>pdf</code>, <code>epub</code>, and\n<code>docx</code>)",
        "Custom tools for navbar or sidebar",
        "The Digital Object Identifier for this book.",
        "Part title or path to input file",
        "Path to chapter input file",
        {
          short: "The role of this creator or contributor.",
          long: 'The role of this creator or contributor using <a href="https://loc.gov/marc/relators/relaterm.html">MARC relators</a>.\nHuman readable translations to commonly used relators (e.g.&nbsp;\u2018author\u2019,\n\u2018editor\u2019) will attempt to be automatically translated.'
        },
        "An alternate version of the creator or contributor text used for\nalphabatizing.",
        "The text describing the creator or contributor (for example, creator\nname).",
        {
          short: "The role of this creator or contributor.",
          long: 'The role of this creator or contributor using <a href="https://loc.gov/marc/relators/relaterm.html">MARC relators</a>.\nHuman readable translations to commonly used relators (e.g.&nbsp;\u2018author\u2019,\n\u2018editor\u2019) will attempt to be automatically translated.'
        },
        "An alternate version of the creator or contributor text used for\nalphabatizing.",
        "The text describing the creator or contributor (for example, creator\nname).",
        {
          short: "The target id for the about page.",
          long: "The target id of this about page. When the about page is rendered, it\nwill place read the contents of a <code>div</code> with this id into the\nabout template that you have selected (and replace the contents with the\nrendered about content).\nIf no such <code>div</code> is defined on the page, a\n<code>div</code> with this id will be created and appended to the end of\nthe page."
        },
        {
          short: "The template to use to layout this about page.",
          long: "The template to use to layout this about page. Choose from:"
        },
        {
          short: "The path to the main image on the about page.",
          long: "The path to the main image on the about page. If not specified, the\n<code>image</code> provided for the document itself will be used."
        },
        {
          short: "A valid CSS width for the about page image.",
          long: "A valid CSS width for the about page image."
        },
        {
          short: "The shape of the image on the about page.",
          long: "The shape of the image on the about page."
        },
        {
          short: "The id of this listing.",
          long: "The id of this listing. When the listing is rendered, it will place\nthe contents into a <code>div</code> with this id. If no such\n<code>div</code> is defined on the page, a <code>div</code> with this id\nwill be created and appended to the end of the page.\nIn no <code>id</code> is provided for a listing, Quarto will\nsynthesize one when rendering the page."
        },
        {
          short: "The type of listing to create.",
          long: "The type of listing to create. Choose one of:"
        },
        "The files or path globs of Quarto documents or YAML files that should\nbe included in the listing.",
        {
          short: "Sort items in the listing by these fields.",
          long: "Sort items in the listing by these fields. The sort key is made up of\na field name followed by a direction <code>asc</code> or\n<code>desc</code>.\nFor example: <code>date asc</code>"
        },
        "The maximum number of items to include in this listing.",
        "The number of items to display on a page.",
        {
          short: "Shows or hides the sorting control for the listing.",
          long: "Shows or hides the sorting control for the listing. To control the\nfields that will be displayed in the sorting control, provide a list of\nfield names."
        },
        {
          short: "Shows or hides the filtering control for the listing.",
          long: "Shows or hides the filtering control for the listing. To control the\nfields that will be used to filter the listing, provide a list of field\nnames. By default all fields of the listing will be used when\nfiltering."
        },
        {
          short: "Display item categories from this listing in the margin of the\npage.",
          long: "Display item categories from this listing in the margin of the\npage."
        },
        "Enables an RSS feed for the listing.",
        "The number of items to include in your feed. Defaults to 20.",
        {
          short: "Whether to include full or partial content in the feed.",
          long: "Whether to include full or partial content in the feed."
        },
        {
          short: "The title for this feed.",
          long: "The title for this feed. Defaults to the site title provided the\nQuarto project."
        },
        {
          short: "The path to an image for this feed.",
          long: "The path to an image for this feed. If not specified, the image for\nthe page the listing appears on will be used, otherwise an image will be\nused if specified for the site in the Quarto project."
        },
        {
          short: "The description of this feed.",
          long: "The description of this feed. If not specified, the description for\nthe page the listing appears on will be used, otherwise the description\nof the site will be used if specified in the Quarto project."
        },
        {
          short: "The language of the feed.",
          long: 'The language of the feed. Omitted if not specified. See <a href="https://www.rssboard.org/rss-language-codes">https://www.rssboard.org/rss-language-codes</a>\nfor a list of valid language codes.'
        },
        "A list of categories for which to create separate RSS feeds\ncontaining only posts with that category.",
        "A list of categories for which to create separate RSS feeds\ncontaining only posts with that category.",
        {
          short: "The date format to use when displaying dates (e.g.&nbsp;d-M-yyy).",
          long: 'The date format to use when displaying dates (e.g.&nbsp;d-M-yyy). Learn\nmore about supported date formatting values <a href="https://deno.land/std@0.125.0/datetime">here</a>.'
        },
        {
          short: "The maximum length (in characters) of the description displayed in\nthe listing.",
          long: "The maximum length (in characters) of the description displayed in\nthe listing. Defaults to 175."
        },
        "The default image to use if an item in the listing doesn\u2019t have an\nimage.",
        "In <code>default</code> type listings, whether to place the image on\nthe right or left side of the post content (<code>left</code> or\n<code>right</code>).",
        {
          short: "The height of the image being displayed.",
          long: "The height of the image being displayed (a CSS height string).\nThe width is automatically determined and the image will fill the\nrectangle without scaling (cropped to fill)."
        },
        {
          short: "In <code>grid</code> type listings, the number of columns in the grid\ndisplay.",
          long: "In grid type listings, the number of columns in the grid display.\nDefaults to 3."
        },
        {
          short: "In <code>grid</code> type listings, whether to display a border\naround the item card.",
          long: "In grid type listings, whether to display a border around the item\ncard. Defaults to <code>true</code>."
        },
        {
          short: "In <code>grid</code> type listings, the alignment of the content\nwithin the card.",
          long: "In grid type listings, the alignment of the content within the card\n(<code>left</code> (default), <code>right</code>, or\n<code>center</code>)."
        },
        {
          short: "In <code>table</code> type listings, display the table rows with\nalternating background colors.",
          long: "In table type listings, display the table rows with alternating\nbackground colors. Defaults to <code>false</code>."
        },
        {
          short: "In <code>table</code> type listings, highlight rows of the table when\nthe user hovers the mouse over them.",
          long: "In table type listings, highlight rows of the table when the user\nhovers the mouse over them. Defaults to false."
        },
        {
          short: "The path to a custom listing template.",
          long: "The path to a custom listing template."
        },
        {
          short: "The list of fields to include in this listing",
          long: "The list of fields to include in this listing."
        },
        {
          short: "A mapping of display names for listing fields.",
          long: "A mapping that provides display names for specific fields. For\nexample, to display the title column as \u2018Report\u2019 in a table listing you\nwould write:"
        },
        {
          short: "Provides the date type for the field of a listing item.",
          long: "Provides the date type for the field of a listing item. Unknown\nfields are treated as strings unless a type is provided. Valid types are\n<code>date</code>, <code>number</code>."
        },
        {
          short: "This list of fields to display as links in a table listing.",
          long: "The list of fields to display as hyperlinks to the source document\nwhen the listing type is a table. By default, only the\n<code>title</code> or <code>filename</code> is displayed as a link."
        },
        {
          short: "Fields that items in this listing must have populated.",
          long: "Fields that items in this listing must have populated. If a listing\nis rendered and one more items in this listing is missing a required\nfield, an error will occur and the render will."
        },
        "The family name.",
        "The given name.",
        "The family name.",
        "The given name.",
        "Abstract of the item (e.g.&nbsp;the abstract of a journal article)",
        "A url to the abstract for this item.",
        "Date the item has been accessed.",
        {
          short: "Short markup, decoration, or annotation to the item (e.g., to\nindicate items included in a review).",
          long: "Short markup, decoration, or annotation to the item (e.g., to\nindicate items included in a review);\nFor descriptive text (e.g., in an annotated bibliography), use\n<code>note</code> instead"
        },
        "Archive storing the item",
        "Collection the item is part of within an archive.",
        "Storage location within an archive (e.g.&nbsp;a box and folder\nnumber).",
        "Geographic location of the archive.",
        "The author(s) of the item.",
        "Issuing or judicial authority (e.g.&nbsp;\u201CUSPTO\u201D for a patent, \u201CFairfax\nCircuit Court\u201D for a legal case).",
        {
          short: "Date the item was initially available",
          long: "Date the item was initially available (e.g.&nbsp;the online publication\ndate of a journal article before its formal publication date; the date a\ntreaty was made available for signing)."
        },
        "Call number (to locate the item in a library).",
        "The person leading the session containing a presentation (e.g.&nbsp;the\norganizer of the <code>container-title</code> of a\n<code>speech</code>).",
        "Chapter number (e.g.&nbsp;chapter number in a book; track number on an\nalbum).",
        {
          short: "Identifier of the item in the input data file (analogous to BiTeX\nentrykey).",
          long: "Identifier of the item in the input data file (analogous to BiTeX\nentrykey);\nUse this variable to facilitate conversion between word-processor and\nplain-text writing systems; For an identifer intended as formatted\noutput label for a citation (e.g.&nbsp;\u201CFerr78\u201D), use\n<code>citation-label</code> instead"
        },
        {
          short: "Label identifying the item in in-text citations of label styles\n(e.g.&nbsp;\u201CFerr78\u201D).",
          long: "Label identifying the item in in-text citations of label styles\n(e.g.&nbsp;\u201CFerr78\u201D);\nMay be assigned by the CSL processor based on item metadata; For the\nidentifier of the item in the input data file, use\n<code>citation-key</code> instead"
        },
        "Index (starting at 1) of the cited reference in the bibliography\n(generated by the CSL processor).",
        "Editor of the collection holding the item (e.g.&nbsp;the series editor for\na book).",
        "Number identifying the collection holding the item (e.g.&nbsp;the series\nnumber for a book)",
        "Title of the collection holding the item (e.g.&nbsp;the series title for a\nbook; the lecture series title for a presentation).",
        "Person compiling or selecting material for an item from the works of\nvarious persons or bodies (e.g.&nbsp;for an anthology).",
        "Composer (e.g.&nbsp;of a musical score).",
        "Author of the container holding the item (e.g.&nbsp;the book author for a\nbook chapter).",
        {
          short: "Title of the container holding the item.",
          long: "Title of the container holding the item (e.g.&nbsp;the book title for a\nbook chapter, the journal title for a journal article; the album title\nfor a recording; the session title for multi-part presentation at a\nconference)"
        },
        "Short/abbreviated form of container-title;",
        "A minor contributor to the item; typically cited using \u201Cwith\u201D before\nthe name when listed in a bibliography.",
        "Curator of an exhibit or collection (e.g.&nbsp;in a museum).",
        "Physical (e.g.&nbsp;size) or temporal (e.g.&nbsp;running time) dimensions of\nthe item.",
        "Director (e.g.&nbsp;of a film).",
        "Minor subdivision of a court with a <code>jurisdiction</code> for a\nlegal item",
        "Digital Object Identifier (e.g.&nbsp;\u201C10.1128/AEM.02591-07\u201D)",
        "(Container) edition holding the item (e.g.&nbsp;\u201C3\u201D when citing a chapter\nin the third edition of a book).",
        "The editor of the item.",
        "Managing editor (\u201CDirecteur de la Publication\u201D in French).",
        {
          short: "Combined editor and translator of a work.",
          long: "Combined editor and translator of a work.\nThe citation processory must be automatically generate if editor and\ntranslator variables are identical; May also be provided directly in\nitem data."
        },
        "Date the event related to an item took place.",
        "Name of the event related to the item (e.g.&nbsp;the conference name when\nciting a conference paper; the meeting where presentation was made).",
        "Geographic location of the event related to the item\n(e.g.&nbsp;\u201CAmsterdam, The Netherlands\u201D).",
        "Executive producer of the item (e.g.&nbsp;of a television series).",
        {
          short: "Number of a preceding note containing the first reference to the\nitem.",
          long: "Number of a preceding note containing the first reference to the\nitem\nAssigned by the CSL processor; Empty in non-note-based styles or when\nthe item hasn\u2019t been cited in any preceding notes in a document"
        },
        "A url to the full text for this item.",
        {
          short: "Type, class, or subtype of the item",
          long: "Type, class, or subtype of the item (e.g.&nbsp;\u201CDoctoral dissertation\u201D for\na PhD thesis; \u201CNIH Publication\u201D for an NIH technical report);\nDo not use for topical descriptions or categories (e.g.&nbsp;\u201Cadventure\u201D\nfor an adventure movie)"
        },
        "Guest (e.g.&nbsp;on a TV show or podcast).",
        "Host of the item (e.g.&nbsp;of a TV show or podcast).",
        "Illustrator (e.g.&nbsp;of a children\u2019s book or graphic novel).",
        "Interviewer (e.g.&nbsp;of an interview).",
        "International Standard Book Number (e.g.&nbsp;\u201C978-3-8474-1017-1\u201D).",
        "International Standard Serial Number.",
        {
          short: "Issue number of the item or container holding the item",
          long: "Issue number of the item or container holding the item (e.g.&nbsp;\u201C5\u201D when\nciting a journal article from journal volume 2, issue 5);\nUse <code>volume-title</code> for the title of the issue, if any."
        },
        "Date the item was issued/published.",
        "Geographic scope of relevance (e.g.&nbsp;\u201CUS\u201D for a US patent; the court\nhearing a legal case).",
        "Keyword(s) or tag(s) attached to the item.",
        {
          short: "The language of the item.",
          long: "The language of the item;\nShould be entered as an ISO 639-1 two-letter language code\n(e.g.&nbsp;\u201Cen\u201D, \u201Czh\u201D), optionally with a two-letter locale code\n(e.g.&nbsp;\u201Cde-DE\u201D, \u201Cde-AT\u201D)"
        },
        {
          short: "The license information applicable to an item.",
          long: "The license information applicable to an item (e.g.&nbsp;the license an\narticle or software is released under; the copyright information for an\nitem; the classification status of a document)"
        },
        {
          short: "A cite-specific pinpointer within the item.",
          long: "A cite-specific pinpointer within the item (e.g.&nbsp;a page number within\na book, or a volume in a multi-volume work).\nMust be accompanied in the input data by a label indicating the\nlocator type (see the Locators term list)."
        },
        "Description of the item\u2019s format or medium (e.g.&nbsp;\u201CCD\u201D, \u201CDVD\u201D,\n\u201CAlbum\u201D, etc.)",
        "Narrator (e.g.&nbsp;of an audio book).",
        "Descriptive text or notes about an item (e.g.&nbsp;in an annotated\nbibliography).",
        "Number identifying the item (e.g.&nbsp;a report number).",
        "Total number of pages of the cited item.",
        "Total number of volumes, used when citing multi-volume books and\nsuch.",
        "Organizer of an event (e.g.&nbsp;organizer of a workshop or\nconference).",
        {
          short: "The original creator of a work.",
          long: "The original creator of a work (e.g.&nbsp;the form of the author name\nlisted on the original version of a book; the historical author of a\nwork; the original songwriter or performer for a musical piece; the\noriginal developer or programmer for a piece of software; the original\nauthor of an adapted work such as a book adapted into a screenplay)"
        },
        "Issue date of the original version.",
        "Original publisher, for items that have been republished by a\ndifferent publisher.",
        "Geographic location of the original publisher (e.g.&nbsp;\u201CLondon,\nUK\u201D).",
        "Title of the original version (e.g.&nbsp;\u201C\u0412\u043E\u0439\u043D\u0430 \u0438 \u043C\u0438\u0440\u201D, the untranslated\nRussian title of \u201CWar and Peace\u201D).",
        "Range of pages the item (e.g.&nbsp;a journal article) covers in a\ncontainer (e.g.&nbsp;a journal issue).",
        "First page of the range of pages the item (e.g.&nbsp;a journal article)\ncovers in a container (e.g.&nbsp;a journal issue).",
        "Last page of the range of pages the item (e.g.&nbsp;a journal article)\ncovers in a container (e.g.&nbsp;a journal issue).",
        {
          short: "Number of the specific part of the item being cited (e.g.&nbsp;part 2 of a\njournal article).",
          long: "Number of the specific part of the item being cited (e.g.&nbsp;part 2 of a\njournal article).\nUse <code>part-title</code> for the title of the part, if any."
        },
        "Title of the specific part of an item being cited.",
        "A url to the pdf for this item.",
        "Performer of an item (e.g.&nbsp;an actor appearing in a film; a muscian\nperforming a piece of music).",
        "PubMed Central reference number.",
        "PubMed reference number.",
        "Printing number of the item or container holding the item.",
        "Producer (e.g.&nbsp;of a television or radio broadcast).",
        "A public url for this item.",
        "The publisher of the item.",
        "The geographic location of the publisher.",
        "Recipient (e.g.&nbsp;of a letter).",
        {
          short: "Resources related to the procedural history of a legal case or\nlegislation.",
          long: "Resources related to the procedural history of a legal case or\nlegislation;\nCan also be used to refer to the procedural history of other items\n(e.g.&nbsp; \u201CConference canceled\u201D for a presentation accepted as a conference\nthat was subsequently canceled; details of a retraction or correction\nnotice)"
        },
        "Author of the item reviewed by the current item.",
        "Type of the item being reviewed by the current item (e.g.&nbsp;book,\nfilm).",
        "Title of the item reviewed by the current item.",
        "Scale of e.g.&nbsp;a map or model.",
        "Writer of a script or screenplay (e.g.&nbsp;of a film).",
        "Section of the item or container holding the item (e.g.&nbsp;\u201C\xA72.0.1\u201D for\na law; \u201Cpolitics\u201D for a newspaper article).",
        "Creator of a series (e.g.&nbsp;of a television series).",
        "Source from whence the item originates (e.g.&nbsp;a library catalog or\ndatabase).",
        "Publication status of the item (e.g.&nbsp;\u201Cforthcoming\u201D; \u201Cin press\u201D;\n\u201Cadvance online publication\u201D; \u201Cretracted\u201D)",
        "Date the item (e.g.&nbsp;a manuscript) was submitted for publication.",
        "Supplement number of the item or container holding the item (e.g.&nbsp;for\nsecondary legal items that are regularly updated between editions).",
        "The primary title of the item.",
        "Short/abbreviated form of<code>title</code>.",
        "Translator",
        'The <a href="https://docs.citationstyles.org/en/stable/specification.html#appendix-iii-types">type</a>\nof the item.',
        "Uniform Resource Locator\n(e.g.&nbsp;\u201Chttps://aem.asm.org/cgi/content/full/74/9/2766\u201D)",
        "Version of the item (e.g.&nbsp;\u201C2.0.9\u201D for a software program).",
        {
          short: "Volume number of the item (e.g.&nbsp;\u201C2\u201D when citing volume 2 of a book)\nor the container holding the item.",
          long: "Volume number of the item (e.g.&nbsp;\u201C2\u201D when citing volume 2 of a book)\nor the container holding the item (e.g.&nbsp;\u201C2\u201D when citing a chapter from\nvolume 2 of a book).\nUse <code>volume-title</code> for the title of the volume, if\nany."
        },
        {
          short: "Title of the volume of the item or container holding the item.",
          long: "Title of the volume of the item or container holding the item.\nAlso use for titles of periodical special issues, special sections,\nand the like."
        },
        "Disambiguating year suffix in author-date styles (e.g.&nbsp;\u201Ca\u201D in \u201CDoe,\n1999a\u201D).",
        "Textual content to add to includes",
        "Name of file with content to add to includes",
        "Version number according to Semantic Versioning",
        "Specify a default profile and profile groups",
        "Default profile to apply if QUARTO_PROFILE is not defined.",
        "Define a profile group for which at least one profile is always\nactive.",
        {
          short: "Unique label for code cell",
          long: "Unique label for code cell. Used when other code needs to refer to\nthe cell (e.g.&nbsp;for cross references <code>fig-samples</code> or\n<code>tbl-summary</code>)"
        },
        "Classes to apply to cell container",
        "Array of tags for notebook cell",
        {
          short: "Notebook cell identifier",
          long: 'Notebook cell identifier. Note that if there is no cell\n<code>id</code> then <code>label</code> will be used as the cell\n<code>id</code> if it is present. See <a href="https://jupyter.org/enhancement-proposals/62-cell-id/cell-id.html" class="uri">https://jupyter.org/enhancement-proposals/62-cell-id/cell-id.html</a>\nfor additional details on cell ids.'
        },
        {
          short: "Whether to cache a code chunk.",
          long: "Whether to cache a code chunk. When evaluating code chunks for the\nsecond time, the cached chunks are skipped (unless they have been\nmodified), but the objects created in these chunks are loaded from\npreviously saved databases (<code>.rdb</code> and <code>.rdx</code>\nfiles), and these files are saved when a chunk is evaluated for the\nfirst time, or when cached files are not found (e.g., you may have\nremoved them by hand). Note that the filename consists of the chunk\nlabel with an MD5 digest of the R code and chunk options of the code\nchunk, which means any changes in the chunk will produce a different MD5\ndigest, and hence invalidate the cache."
        },
        "A prefix to be used to generate the paths of cache files",
        {
          short: "Variable names to be saved in the cache database.",
          long: "Variable names to be saved in the cache database. By default, all\nvariables created in the current chunks are identified and saved, but\nyou may want to manually specify the variables to be saved, because the\nautomatic detection of variables may not be robust, or you may want to\nsave only a subset of variables."
        },
        {
          short: "Variables names that are not created from the current chunk",
          long: "Variables names that are not created from the current chunk.\nThis option is mainly for <code>autodep: true</code> to work more\nprecisely\u2014a chunk <code>B</code> depends on chunk <code>A</code> when\nany of <code>B</code>\u2019s global variables are <code>A</code>\u2019s local\nvariables. In case the automatic detection of global variables in a\nchunk fails, you may manually specify the names of global variables via\nthis option. In addition, <code>cache-globals: false</code> means\ndetecting all variables in a code chunk, no matter if they are global or\nlocal variables."
        },
        {
          short: "Whether to <code>lazyLoad()</code> or directly <code>load()</code>\nobjects",
          long: 'Whether to <code>lazyLoad()</code> or directly <code>load()</code>\nobjects. For very large objects, lazyloading may not work, so\n<code>cache-lazy: false</code> may be desirable (see <a href="https://github.com/yihui/knitr/issues/572">#572</a>).'
        },
        "Force rebuild of cache for chunk",
        "Prevent comment changes from invalidating the cache for a chunk",
        "Explicitly specify cache dependencies for this chunk (one or more\nchunk labels)",
        "Detect cache dependencies automatically via usage of global\nvariables",
        {
          short: "Evaluate code cells (if <code>false</code> just echos the code into\noutput).",
          long: "Evaluate code cells (if <code>false</code> just echos the code into\noutput)."
        },
        {
          short: "Include cell source code in rendered output.",
          long: "Include cell source code in rendered output."
        },
        {
          short: "Collapse code into an HTML <code>&lt;details&gt;</code> tag so the\nuser can display it on-demand.",
          long: "Collapse code into an HTML <code>&lt;details&gt;</code> tag so the\nuser can display it on-demand."
        },
        "Summary text to use for code blocks collapsed using\n<code>code-fold</code>",
        {
          short: "Choose whether to <code>scroll</code> or <code>wrap</code> when code\nlines are too wide for their container.",
          long: "Choose how to handle code overflow, when code lines are too wide for\ntheir container. One of:"
        },
        {
          short: "Include line numbers in code block output (<code>true</code> or\n<code>false</code>)",
          long: "Include line numbers in code block output (<code>true</code> or\n<code>false</code>).\nFor revealjs output only, you can also specify a string to highlight\nspecific lines (and/or animate between sets of highlighted lines)."
        },
        "Unique label for code listing (used in cross references)",
        "Caption for code listing",
        "Whether to reformat R code.",
        "List of options to pass to <code>tidy</code> handler",
        "Collapse all the source and output blocks from one code chunk into a\nsingle block",
        {
          short: "Whether to add the prompt characters in R code.",
          long: 'Whether to add the prompt characters in R code. See\n<code>prompt</code> and <code>continue</code> on the help page\n<code>?base::options</code>. Note that adding prompts can make it\ndifficult for readers to copy R code from the output, so\n<code>prompt: false</code> may be a better choice. This option may not\nwork well when the <code>engine</code> is not <code>R</code> (<a href="https://github.com/yihui/knitr/issues/1274">#1274</a>).'
        },
        "Whether to syntax highlight the source code",
        "Class name(s) for source code blocks",
        "Attribute(s) for source code blocks",
        "Default width for figures",
        "Default height for figures",
        "Figure caption",
        "Figure subcaptions",
        "Hyperlink target for the figure",
        "Figure horizontal alignment (<code>default</code>, <code>left</code>,\n<code>right</code>, or <code>center</code>)",
        "Alternative text to be used in the <code>alt</code> attribute of HTML\nimages.",
        "LaTeX environment for figure output",
        {
          short: "LaTeX figure position arrangement to be used in\n<code>\\begin{figure}[]</code>.",
          long: 'LaTeX figure position arrangement to be used in\n<code>\\begin{figure}[]</code>.\nComputational figure output that is accompanied by the code that\nproduced it is given a default value of <code>fig-pos="H"</code> (so\nthat the code and figure are not inordinately separated).'
        },
        {
          short: "A short caption (only used in LaTeX output)",
          long: "A short caption (only used in LaTeX output). A short caption is\ninserted in <code>\\caption[]</code>, and usually displayed in the \u201CList\nof Figures\u201D of a PDF document."
        },
        "Default output format for figures (<code>retina</code>,\n<code>png</code>, <code>jpeg</code>, <code>svg</code>, or\n<code>pdf</code>)",
        "Default DPI for figures",
        "The aspect ratio of the plot, i.e., the ratio of height/width. When\n<code>fig-asp</code> is specified, the height of a plot (the option\n<code>fig-height</code>) is calculated from\n<code>fig-width * fig-asp</code>.",
        {
          short: "Width of plot in the output document",
          long: "Width of the plot in the output document, which can be different from\nits physical <code>fig-width</code>, i.e., plots can be scaled in the\noutput document. When used without a unit, the unit is assumed to be\npixels. However, any of the following unit identifiers can be used: px,\ncm, mm, in, inch and %, for example, <code>3in</code>, <code>8cm</code>,\n<code>300px</code> or <code>50%</code>."
        },
        {
          short: "Height of plot in the output document",
          long: "Height of the plot in the output document, which can be different\nfrom its physical <code>fig-height</code>, i.e., plots can be scaled in\nthe output document. Depending on the output format, this option can\ntake special values. For example, for LaTeX output, it can be\n<code>3in</code>, or <code>8cm</code>; for HTML, it can be\n<code>300px</code>."
        },
        {
          short: "How plots in chunks should be kept.",
          long: "How plots in chunks should be kept. Possible values are as\nfollows:"
        },
        {
          short: "How to show/arrange the plots",
          long: "How to show/arrange the plots. Possible values are as follows:"
        },
        "Additional raw LaTeX or HTML options to be applied to figures",
        "Externalize tikz graphics (pre-compile to PDF)",
        "sanitize tikz graphics (escape special LaTeX characters).",
        "Time interval (number of seconds) between animation frames.",
        {
          short: "Extra options for animations",
          long: 'Extra options for animations; see the documentation of the LaTeX <a href="http://ctan.org/pkg/animate"><strong>animate</strong>\npackage.</a>'
        },
        {
          short: "Hook function to create animations in HTML output",
          long: 'Hook function to create animations in HTML output.\nThe default hook (<code>ffmpeg</code>) uses FFmpeg to convert images\nto a WebM video.\nAnother hook function is <code>gifski</code> based on the <a href="https://cran.r-project.org/package=gifski"><strong>gifski</strong></a>\npackage to create GIF animations.'
        },
        "One or more paths of child documents to be knitted and input into the\nmain document.",
        "File containing code to execute for this chunk",
        "String containing code to execute for this chunk",
        "Include chunk when extracting code with\n<code>knitr::purl()</code>",
        {
          short: "2d-array of widths where the first dimension specifies columns and\nthe second rows.",
          long: "2d-array of widths where the first dimension specifies columns and\nthe second rows.\nFor example, to layout the first two output blocks side-by-side on\nthe top with the third block spanning the full width below, use\n<code>[[3,3], [1]]</code>.\nUse negative values to create margin. For example, to create space\nbetween the output blocks in the top row of the previous example, use\n<code>[[3,-1, 3], [1]]</code>."
        },
        "Layout output blocks into columns",
        "Layout output blocks into rows",
        "Horizontal alignment for layout content (<code>default</code>,\n<code>left</code>, <code>right</code>, or <code>center</code>)",
        "Vertical alignment for layout content (<code>default</code>,\n<code>top</code>, <code>center</code>, or <code>bottom</code>)",
        {
          short: "Page column for output",
          long: '<a href="https://quarto.org/docs/authoring/article-layout.html">Page\ncolumn</a> for output'
        },
        {
          short: "Page column for figure output",
          long: '<a href="https://quarto.org/docs/authoring/article-layout.html">Page\ncolumn</a> for figure output'
        },
        {
          short: "Page column for table output",
          long: '<a href="https://quarto.org/docs/authoring/article-layout.html">Page\ncolumn</a> for table output'
        },
        "Where to place figure and table captions (<code>top</code>,\n<code>bottom</code>, or <code>margin</code>)",
        "Where to place figure captions (<code>top</code>,\n<code>bottom</code>, or <code>margin</code>)",
        "Where to place table captions (<code>top</code>, <code>bottom</code>,\nor <code>margin</code>)",
        "Table caption",
        "Table subcaptions",
        {
          short: "Apply explicit table column widths",
          long: "Apply explicit table column widths for markdown grid tables and pipe\ntables that are more than <code>columns</code> characters wide (72 by\ndefault).\nSome formats (e.g.&nbsp;HTML) do an excellent job automatically sizing\ntable columns and so don\u2019t benefit much from column width\nspecifications. Other formats (e.g.&nbsp;LaTeX) require table column sizes in\norder to correctly flow longer cell content (this is a major reason why\ntables &gt; 72 columns wide are assigned explicit widths by Pandoc).\nThis can be specified as:"
        },
        {
          short: "Include the results of executing the code in the output (specify\n<code>asis</code> to treat output as raw markdown with no enclosing\ncontainers).",
          long: "Include the results of executing the code in the output. Possible\nvalues:"
        },
        "Include warnings in rendered output.",
        "Include errors in the output (note that this implies that errors\nexecuting code will not halt processing of the document).",
        "Catch all for preventing any output (code or results) from being\nincluded in output.",
        "Panel type for cell output (<code>tabset</code>, <code>input</code>,\n<code>sidebar</code>, <code>fill</code>, <code>center</code>)",
        {
          short: "Location of output relative to the code that generated it\n(<code>default</code>, <code>fragment</code>, <code>slide</code>,\n<code>column</code>, or <code>column-location</code>)",
          long: "Location of output relative to the code that generated it. The\npossible values are as follows:"
        },
        "Include messages in rendered output.",
        {
          short: "How to display text results",
          long: "How to display text results. Note that this option only applies to\nnormal text output (not warnings, messages, or errors). The possible\nvalues are as follows:"
        },
        {
          short: "Prefix to be added before each line of text output.",
          long: "Prefix to be added before each line of text output. By default, the\ntext output is commented out by <code>##</code>, so if readers want to\ncopy and run the source code from the output document, they can select\nand copy everything from the chunk, since the text output is masked in\ncomments (and will be ignored when running the copied text). Set\n<code>comment: ''</code> to remove the default <code>##</code>."
        },
        "Class name(s) for text/console output",
        "Attribute(s) for text/console output",
        "Class name(s) for warning output",
        "Attribute(s) for warning output",
        "Class name(s) for message output",
        "Attribute(s) for message output",
        "Class name(s) for error output",
        "Attribute(s) for error output",
        {
          short: "Specifies that the page is an \u2018about\u2019 page and which template to use\nwhen laying out the page.",
          long: "Specifies that the page is an \u2018about\u2019 page and which template to use\nwhen laying out the page.\nThe allowed values are either:"
        },
        "Document title",
        "Identifies the subtitle of the document.",
        "Document date",
        "Document date modified",
        "Author or authors of the document",
        {
          short: "The list of organizations with which contributors are affiliated.",
          long: 'The list of organizations with which contributors are affiliated.\nEach institution is added as an [<code>&lt;aff&gt;</code>] element to\nthe author\u2019s contrib-group. See the Pandoc <a href="https://pandoc.org/jats.html">JATS documentation</a> for details\non <code>affiliation</code> fields.'
        },
        {
          short: "Licensing and copyright information.",
          long: 'Licensing and copyright information. This information is rendered via\nthe <a href="https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/permissions.html"><code>&lt;permissions&gt;</code></a>\nelement. The variables <code>type</code>, <code>link</code>, and\n<code>text</code> should always be used together. See the Pandoc <a href="https://pandoc.org/jats.html">JATS documentation</a> for details\non <code>copyright</code> fields.'
        },
        {
          short: "Information concerning the article that identifies or describes\nit.",
          long: 'Information concerning the article that identifies or describes it.\nThe key-value pairs within this map are typically used within the <a href="https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/article-meta.html"><code>&lt;article-meta&gt;</code></a>\nelement. See the Pandoc <a href="https://pandoc.org/jats.html">JATS\ndocumentation</a> for details on <code>article</code> fields.'
        },
        {
          short: "Information on the journal in which the article is published.",
          long: 'Information on the journal in which the article is published. See the\nPandoc <a href="https://pandoc.org/jats.html">JATS documentation</a> for\ndetails on <code>journal</code> fields.'
        },
        "Author affiliations for the presentation.",
        "Summary of document",
        "Title used to label document abstract",
        'Additional notes concerning the whole article. Added to the article\u2019s\nfrontmatter via the <a href="https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/notes.html"><code>&lt;notes&gt;</code></a>\nelement.',
        'List of keywords. Items are used as contents of the <a href="https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/kwd.html"><code>&lt;kwd&gt;</code></a>\nelement; the elements are grouped in a <a href="https://jats.nlm.nih.gov/publishing/tag-library/1.2/element/kwd-group.html"><code>&lt;kwd-group&gt;</code></a>\nwith the <a href="https://jats.nlm.nih.gov/publishing/tag-library/1.2/attribute/kwd-group-type.html"><code>kwd-group-type</code></a>\nvalue <code>author</code>.',
        "Displays the document Digital Object Identifier in the header.",
        "The contents of an acknowledgments footnote after the document\ntitle.",
        "Order for document when included in a website automatic sidebar\nmenu.",
        {
          short: "Citation information for the document itself.",
          long: 'Citation information for the document itself specified as <a href="https://docs.citationstyles.org/en/stable/specification.html">CSL</a>\nYAML in the document front matter.\nFor more on supported options, see <a href="https://quarto.org/docs/reference/metadata/citation.html">Citation\nMetadata</a>.'
        },
        {
          short: "Enable a code copy icon for code blocks.",
          long: "Enable a code copy icon for code blocks."
        },
        {
          short: "Enables hyper-linking of functions within code blocks to their online\ndocumentation.",
          long: 'Enables hyper-linking of functions within code blocks to their online\ndocumentation.\nCode linking is currently implemented only for the knitr engine (via\nthe <a href="https://downlit.r-lib.org/">downlit</a> package).'
        },
        {
          short: "Include a code tools menu (for hiding and showing code).",
          long: "Include a code tools menu (for hiding and showing code). Use\n<code>true</code> or <code>false</code> to enable or disable the\nstandard code tools menu. Specify sub-properties <code>source</code>,\n<code>toggle</code>, and <code>caption</code> to customize the behavior\nand appearnce of code tools."
        },
        {
          short: "Show a thick left border on code blocks.",
          long: "Specifies to apply a left border on code blocks. Provide a hex color\nto specify that the border is enabled as well as the color of the\nborder.="
        },
        {
          short: "Show a background color for code blocks.",
          long: "Specifies to apply a background color on code blocks. Provide a hex\ncolor to specify that the background color is enabled as well as the\ncolor of the background."
        },
        {
          short: "Specifies the coloring style to be used in highlighted source\ncode.",
          long: "Specifies the coloring style to be used in highlighted source\ncode.\nInstead of a <em>STYLE</em> name, a JSON file with extension\n<code>.theme</code> may be supplied. This will be parsed as a KDE syntax\nhighlighting theme and (if valid) used as the highlighting style."
        },
        "KDE language syntax definition file (XML)",
        "KDE language syntax definition files (XML)",
        {
          short: "Use the listings package for LaTeX code blocks.",
          long: 'Use the <code>listings</code> package for LaTeX code blocks. The\npackage does not support multi-byte encoding for source code. To handle\nUTF-8 you would need to use a custom template. This issue is fully\ndocumented here: <a href="https://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings#Encoding_issue">Encoding\nissue with the listings package</a>'
        },
        "Specify classes to use for all indented code blocks",
        "Sets the CSS <code>color</code> property.",
        {
          short: "Sets the color of hyperlinks in the document.",
          long: 'For HTML output, sets the CSS <code>color</code> property on all\nlinks.\nFor LaTeX output, The color used for internal links using color\noptions allowed by <a href="https://ctan.org/pkg/xcolor"><code>xcolor</code></a>, including\nthe <code>dvipsnames</code>, <code>svgnames</code>, and\n<code>x11names</code> lists.\nFor ConTeXt output, sets the color for both external links and links\nwithin the document.'
        },
        "Sets the CSS <code>background-color</code> property on code elements\nand adds extra padding.",
        "Sets the CSS <code>background-color</code> property on the html\nelement.",
        {
          short: "The color used for external links using color options allowed by\n<code>xcolor</code>",
          long: 'The color used for external links using color options allowed by <a href="https://ctan.org/pkg/xcolor"><code>xcolor</code></a>, including\nthe <code>dvipsnames</code>, <code>svgnames</code>, and\n<code>x11names</code> lists.'
        },
        {
          short: "The color used for citation links using color options allowed by\n<code>xcolor</code>",
          long: 'The color used for citation links using color options allowed by <a href="https://ctan.org/pkg/xcolor"><code>xcolor</code></a>, including\nthe <code>dvipsnames</code>, <code>svgnames</code>, and\n<code>x11names</code> lists.'
        },
        {
          short: "The color used for linked URLs using color options allowed by\n<code>xcolor</code>",
          long: 'The color used for linked URLs using color options allowed by <a href="https://ctan.org/pkg/xcolor"><code>xcolor</code></a>, including\nthe <code>dvipsnames</code>, <code>svgnames</code>, and\n<code>x11names</code> lists.'
        },
        {
          short: "The color used for links in the Table of Contents using color options\nallowed by <code>xcolor</code>",
          long: 'The color used for links in the Table of Contents using color options\nallowed by <a href="https://ctan.org/pkg/xcolor"><code>xcolor</code></a>, including\nthe <code>dvipsnames</code>, <code>svgnames</code>, and\n<code>x11names</code> lists.'
        },
        "Add color to link text, automatically enabled if any of\n<code>linkcolor</code>, <code>filecolor</code>, <code>citecolor</code>,\n<code>urlcolor</code>, or <code>toccolor</code> are set.",
        {
          short: "Color for links to other content within the document.",
          long: 'Color for links to other content within the document.\nSee <a href="https://wiki.contextgarden.net/Color">ConTeXt Color</a>\nfor additional information.'
        },
        "Configuration for document commenting.",
        "Configuration for crossref labels and prefixes.",
        "Use top level sections (H1) in this document as chapters.",
        "The delimiter used between the prefix and the caption.",
        "The title prefix used for figure captions.",
        "The title prefix used for table captions.",
        "The title prefix used for equation captions.",
        "The title prefix used for listing captions.",
        "The title prefix used for theorem captions.",
        "The title prefix used for lemma captions.",
        "The title prefix used for corollary captions.",
        "The title prefix used for proposition captions.",
        "The title prefix used for conjecture captions.",
        "The title prefix used for definition captions.",
        "The title prefix used for example captions.",
        "The title prefix used for exercise captions.",
        "The prefix used for an inline reference to a figure.",
        "The prefix used for an inline reference to a table.",
        "The prefix used for an inline reference to an equation.",
        "The prefix used for an inline reference to a section.",
        "The prefix used for an inline reference to a listing.",
        "The prefix used for an inline reference to a theorem.",
        "The prefix used for an inline reference to a lemma.",
        "The prefix used for an inline reference to a corollary.",
        "The prefix used for an inline reference to a proposition.",
        "The prefix used for an inline reference to a conjecture.",
        "The prefix used for an inline reference to a definition.",
        "The prefix used for an inline reference to an example.",
        "The prefix used for an inline reference to an exercise.",
        "The numbering scheme used for figures.",
        "The numbering scheme used for tables.",
        "The numbering scheme used for equations.",
        "The numbering scheme used for sections.",
        "The numbering scheme used for listings.",
        "The numbering scheme used for theorems.",
        "The numbering scheme used for lemmas.",
        "The numbering scheme used for corollaries.",
        "The numbering scheme used for propositions.",
        "The numbering scheme used for conjectures.",
        "The numbering scheme used for definitions.",
        "The numbering scheme used for examples.",
        "The numbering scheme used for exercises.",
        "The title used for the list of figures.",
        "The title used for the list of tables.",
        "The title used for the list of listings.",
        "The number scheme used for references.",
        "The number scheme used for sub references.",
        "Whether cross references should be hyper-linked.",
        "Visual editor configuration",
        "Default editing mode for document",
        "Markdown writing options for visual editor",
        "A column number (e.g.&nbsp;72), <code>sentence</code>, or\n<code>none</code>",
        "Write standard visual editor markdown from source mode.",
        "Reference writing options for visual editor",
        "Location to write references (<code>block</code>,\n<code>section</code>, or <code>document</code>)",
        "Unique prefix for references (<code>none</code> to prevent automatic\nprefixes)",
        "The identifier for this publication.",
        "The identifier value.",
        "The identifier schema (e.g.&nbsp;<code>DOI</code>, <code>ISBN-A</code>,\netc.)",
        "Creators of this publication.",
        "Contributors to this publication.",
        "The subject of the publication.",
        "The subject text.",
        "An EPUB reserved authority value.",
        "The subject term (defined by the schema).",
        {
          short: "Text describing the specialized type of this publication.",
          long: 'Text describing the specialized type of this publication.\nAn informative registry of specialized EPUB Publication types for use\nwith this element is maintained in the <a href="https://www.w3.org/publishing/epub3/epub-packages.html#bib-typesregistry">TypesRegistry</a>,\nbut Authors may use any text string as a value.'
        },
        "Text describing the format of this publication.",
        "Text describing the relation of this publication.",
        "Text describing the coverage of this publication.",
        "Text describing the rights of this publication.",
        "Identifies the name of a collection to which the EPUB Publication\nbelongs.",
        "Indicates the numeric position in which this publication belongs\nrelative to other works belonging to the same\n<code>belongs-to-collection</code> field.",
        "Sets the global direction in which content flows (<code>ltr</code> or\n<code>rtl</code>)",
        "iBooks specific metadata options.",
        "What is new in this version of the book.",
        "Whether this book provides embedded fonts in a flowing or fixed\nlayout book.",
        "The scroll direction for this book (<code>vertical</code>,\n<code>horizontal</code>, or <code>default</code>)",
        {
          short: 'Look in the specified XML file for metadata for the EPUB. The file\nshould contain a series of <a href="https://www.dublincore.org/specifications/dublin-core/dces/">Dublin\nCore elements</a>.',
          long: 'Look in the specified XML file for metadata for the EPUB. The file\nshould contain a series of <a href="https://www.dublincore.org/specifications/dublin-core/dces/">Dublin\nCore elements</a>. For example:'
        },
        "Specify the subdirectory in the OCF container that is to hold the\nEPUB-specific contents. The default is <code>EPUB</code>. To put the\nEPUB contents in the top level, use an empty string.",
        {
          short: "Embed the specified fonts in the EPUB",
          long: "Embed the specified fonts in the EPUB. Wildcards can also be used:\nfor example, <code>DejaVuSans-*.ttf</code>. To use the embedded fonts,\nyou will need to add declarations like the following to your CSS:"
        },
        {
          short: "Specify the heading level at which to split the EPUB into separate\nchapter files.",
          long: "Specify the heading level at which to split the EPUB into separate\nchapter files. The default is to split into chapters at level-1\nheadings. This option only affects the internal composition of the EPUB,\nnot the way chapters and sections are displayed to users. Some readers\nmay be slow if the chapter files are too large, so for large documents\nwith few level-1 headings, one might want to use a chapter level of 2 or\n3."
        },
        "Use the specified image as the EPUB cover. It is recommended that the\nimage be less than 1000px in width and height.",
        "Engine used for executable code blocks.",
        "Configures the Jupyter engine.",
        "The name to display in the UI.",
        "The name of the language the kernel implements.",
        "The name of the kernel.",
        "Set Knitr options.",
        "Knit options.",
        "Knitr chunk options.",
        {
          short: "Cache results of computations.",
          long: 'Cache results of computations (using the <a href="https://yihui.org/knitr/demo/cache/">knitr cache</a> for R\ndocuments, and <a href="https://jupyter-cache.readthedocs.io/en/latest/">Jupyter Cache</a>\nfor Jupyter documents).\nNote that cache invalidation is triggered by changes in chunk source\ncode (or other cache attributes you\u2019ve defined).'
        },
        {
          short: "Re-use previous computational output when rendering",
          long: "Control the re-use of previous computational output when\nrendering."
        },
        "Document server",
        "Type of server to run behind the document\n(e.g.&nbsp;<code>shiny</code>)",
        "OJS variables to export to server.",
        "Server reactive values to import into OJS.",
        {
          short: "Run Jupyter kernels within a peristent daemon (to mitigate kernel\nstartup time).",
          long: "Run Jupyter kernels within a peristent daemon (to mitigate kernel\nstartup time). By default a daemon with a timeout of 300 seconds will be\nused. Set <code>daemon</code> to another timeout value or to\n<code>false</code> to disable it altogether."
        },
        "Restart any running Jupyter daemon before rendering.",
        "Enable code cell execution.",
        "Execute code cell execution in Jupyter notebooks.",
        "Show code-execution related debug information.",
        {
          short: "Default width for figures generated by Matplotlib or R graphics",
          long: "Default width for figures generated by Matplotlib or R graphics.\nNote that with the Jupyter engine, this option has no effect when\nprovided at the cell level; it can only be provided with document or\nproject metadata."
        },
        {
          short: "Default height for figures generated by Matplotlib or R graphics",
          long: "Default width for figures generated by Matplotlib or R graphics.\nNote that with the Jupyter engine, this option has no effect when\nprovided at the cell level; it can only be provided with document or\nproject metadata."
        },
        "Default format for figures generated by Matplotlib or R graphics\n(<code>retina</code>, <code>png</code>, <code>jpeg</code>,\n<code>svg</code>, or <code>pdf</code>)",
        {
          short: "Default DPI for figures generated by Matplotlib or R graphics",
          long: "Default DPI for figures generated by Matplotlib or R graphics.\nNote that with the Jupyter engine, this option has no effect when\nprovided at the cell level; it can only be provided with document or\nproject metadata."
        },
        {
          short: "The aspect ratio of the plot, i.e., the ratio of height/width.",
          long: "The aspect ratio of the plot, i.e., the ratio of height/width. When\n<code>fig-asp</code> is specified, the height of a plot (the option\n<code>fig-height</code>) is calculated from\n<code>fig-width * fig-asp</code>.\nThe <code>fig-asp</code> option is only available within the knitr\nengine."
        },
        "Whether to make images in this document responsive.",
        {
          short: "Sets the main font for the document.",
          long: 'For HTML output, sets the CSS <code>font-family</code> on the HTML\nelement.\nFor LaTeX output, the main font family for use with\n<code>xelatex</code> or <code>lualatex</code>. Takes the name of any\nsystem font, using the <a href="https://ctan.org/pkg/fontspec"><code>fontspec</code></a>\npackage.\nFor ConTeXt output, the main font family. Use the name of any system\nfont. See <a href="https://wiki.contextgarden.net/Fonts">ConTeXt\nFonts</a> for more information.'
        },
        {
          short: "Sets the font used for when displaying code.",
          long: 'For HTML output, sets the CSS font-family property on code\nelements.\nFor PowerPoint output, sets the font used for code.\nFor LaTeX output, the monospace font family for use with\n<code>xelatex</code> or <code>lualatex</code>: take the name of any\nsystem font, using the <a href="https://ctan.org/pkg/fontspec"><code>fontspec</code></a>\npackage.\nFor ConTeXt output, the monspace font family. Use the name of any\nsystem font. See <a href="https://wiki.contextgarden.net/Fonts">ConTeXt\nFonts</a> for more information.'
        },
        {
          short: "Sets the main font size for the document.",
          long: "For HTML output, sets the base CSS <code>font-size</code>\nproperty.\nFor LaTeX and ConTeXt output, sets the font size for the document\nbody text."
        },
        {
          short: "Allows font encoding to be specified through <code>fontenc</code>\npackage.",
          long: 'Allows font encoding to be specified through <a href="https://www.ctan.org/pkg/fontenc"><code>fontenc</code></a>\npackage.\nSee <a href="https://ctan.org/pkg/encguide">LaTeX Font Encodings\nGuide</a> for addition information on font encoding.'
        },
        {
          short: "Font package to use when compiling a PDF with the\n<code>pdflatex</code> <code>pdf-engine</code>.",
          long: 'Font package to use when compiling a PDf with the\n<code>pdflatex</code> <code>pdf-engine</code>.\nSee <a href="https://tug.org/FontCatalogue/">The LaTeX Font\nCatalogue</a> for a summary of font options available.\nFor groff (<code>ms</code>) files, the font family for example,\n<code>T</code> or <code>P</code>.'
        },
        {
          short: "Options for the package used as <code>fontfamily</code>.",
          long: 'Options for the package used as <code>fontfamily</code>.\nFor example, to use the Libertine font with proportional lowercase\n(old-style) figures through the <a href="https://ctan.org/pkg/libertinus"><code>libertinus</code></a>\npackage:'
        },
        {
          short: "The sans serif font family for use with <code>xelatex</code> or\n<code>lualatex</code>.",
          long: 'The sans serif font family for use with <code>xelatex</code> or\n<code>lualatex</code>. Takes the name of any system font, using the <a href="https://ctan.org/pkg/fontspec"><code>fontspec</code></a>\npackage.'
        },
        {
          short: "The math font family for use with <code>xelatex</code> or\n<code>lualatex</code>.",
          long: 'The math font family for use with <code>xelatex</code> or\n<code>lualatex</code>. Takes the name of any system font, using the <a href="https://ctan.org/pkg/fontspec"><code>fontspec</code></a>\npackage.'
        },
        {
          short: "The CJK main font family for use with <code>xelatex</code> or\n<code>lualatex</code>.",
          long: 'The CJK main font family for use with <code>xelatex</code> or\n<code>lualatex</code> using the <a href="https://ctan.org/pkg/xecjk"><code>xecjk</code></a> package.'
        },
        {
          short: "The main font options for use with <code>xelatex</code> or\n<code>lualatex</code>.",
          long: 'The main font options for use with <code>xelatex</code> or\n<code>lualatex</code> allowing any options available through <a href="https://ctan.org/pkg/fontspec"><code>fontspec</code></a>.\nFor example, to use the <a href="http://www.gust.org.pl/projects/e-foundry/tex-gyre">TeX Gyre</a>\nversion of Palatino with lowercase figures:'
        },
        {
          short: "The sans serif font options for use with <code>xelatex</code> or\n<code>lualatex</code>.",
          long: 'The sans serif font options for use with <code>xelatex</code> or\n<code>lualatex</code> allowing any options available through <a href="https://ctan.org/pkg/fontspec"><code>fontspec</code></a>.'
        },
        {
          short: "The monospace font options for use with <code>xelatex</code> or\n<code>lualatex</code>.",
          long: 'The monospace font options for use with <code>xelatex</code> or\n<code>lualatex</code> allowing any options available through <a href="https://ctan.org/pkg/fontspec"><code>fontspec</code></a>.'
        },
        {
          short: "The math font options for use with <code>xelatex</code> or\n<code>lualatex</code>.",
          long: 'The math font options for use with <code>xelatex</code> or\n<code>lualatex</code> allowing any options available through <a href="https://ctan.org/pkg/fontspec"><code>fontspec</code></a>.'
        },
        {
          short: "The CJK font options for use with <code>xelatex</code> or\n<code>lualatex</code>.",
          long: 'The CJK font options for use with <code>xelatex</code> or\n<code>lualatex</code> allowing any options available through <a href="https://ctan.org/pkg/fontspec"><code>fontspec</code></a>.'
        },
        {
          short: "Options to pass to the microtype package.",
          long: 'Options to pass to the <a href="https://ctan.org/pkg/microtype">microtype</a> package.'
        },
        "The point size, for example, <code>10p</code>.",
        "The line height, for example, <code>12p</code>.",
        {
          short: "Sets the line height or spacing for text in the document.",
          long: 'For HTML output sets the CSS <code>line-height</code> property on the\nhtml element, which is preferred to be unitless.\nFor LaTeX output, adjusts line spacing using the <a href="https://ctan.org/pkg/setspace">setspace</a> package, e.g.&nbsp;1.25,\n1.5.'
        },
        "Adjusts line spacing using the <code>\\setupinterlinespace</code>\ncommand.",
        "The typeface style for links in the document.",
        {
          short: "Set the spacing between paragraphs, for example <code>none</code>,\n`small.",
          long: 'Set the spacing between paragraphs, for example <code>none</code>,\n<code>small</code> using the <a href="https://wiki.contextgarden.net/Command/setupwhitespace"><code>setupwhitespace</code></a>\ncommand.'
        },
        "Enables a hover popup for footnotes that shows the footnote\ncontents.",
        "Causes links to be printed as footnotes.",
        {
          short: "Location for footnotes and references",
          long: "Specify location for footnotes. Also controls the location of\nreferences, if <code>reference-links</code> is set."
        },
        {
          short: "Set the indentation of paragraphs with one or more options.",
          long: 'Set the indentation of paragraphs with one or more options.\nSee <a href="https://wiki.contextgarden.net/Indentation">ConTeXt\nIndentation</a> for additional information.'
        },
        "Adjusts text to the left, right, center, or both margins\n(<code>l</code>, <code>r</code>, <code>c</code>, or <code>b</code>).",
        {
          short: "Whether to hyphenate text at line breaks even in words that do not\ncontain hyphens.",
          long: "Whether to hyphenate text at line breaks even in words that do not\ncontain hyphens if it is necessary to do so to lay out words on a line\nwithout excessive spacing"
        },
        {
          short: "Format to write to (e.g.&nbsp;html)",
          long: "Format to write to. Extensions can be individually enabled or\ndisabled by appending +EXTENSION or -EXTENSION to the format name\n(e.g.&nbsp;gfm+footnotes)"
        },
        {
          short: "Format to write to (e.g.&nbsp;html)",
          long: "Format to write to. Extensions can be individually enabled or\ndisabled by appending +EXTENSION or -EXTENSION to the format name\n(e.g.&nbsp;gfm+footnotes)"
        },
        "Input file to read from",
        "Input files to read from",
        "Include options from the specified defaults files",
        "Pandoc metadata variables",
        "Pandoc metadata variables",
        "Headers to include with HTTP requests by Pandoc",
        "Display trace debug output.",
        "Exit with error status if there are any warnings.",
        "Print information about command-line arguments to <em>stdout</em>,\nthen exit.",
        "Ignore command-line arguments (for use in wrapper scripts).",
        "Parse each file individually before combining for multifile\ndocuments.",
        "Specify the user data directory to search for pandoc data files.",
        "Level of program output (<code>INFO</code>, <code>ERROR</code>, or\n<code>WARNING</code>)",
        "Write log messages in machine-readable JSON format to FILE.",
        {
          short: "Specify what to do with insertions, deletions, and comments produced\nby the MS Word \u201CTrack Changes\u201D feature.",
          long: "Specify what to do with insertions, deletions, and comments produced\nby the MS Word \u201CTrack Changes\u201D feature."
        },
        {
          short: "Ignore paragraphs with no content.",
          long: "<em>Deprecated. Use the <code>+empty_paragraphs</code> extension\ninstead.</em> Ignore paragraphs with no content. This option is useful\nfor converting word processing documents where users have used empty\nparagraphs to create inter-paragraph space."
        },
        {
          short: "Embed the input file source code in the generated HTML",
          long: "Embed the input file source code in the generated HTML. A hidden div\nwith class <code>quarto-embedded-source-code</code> will be added to the\ndocument. This option is not normally used directly but rather in the\nimplementation of the <code>code-tools</code> option."
        },
        "Keep hidden source code and output (marked with class\n<code>.hidden</code>)",
        {
          short: "Generate HTML output (if necessary) even when targeting markdown.",
          long: "Generate HTML output (if necessary) even when targeting markdown.\nEnables the embedding of more sophisticated output (e.g.&nbsp;Jupyter\nwidgets) in markdown."
        },
        "Indicates that computational output should not be written within\ndivs. This is necessary for some formats (e.g.&nbsp;<code>pptx</code>) to\nproperly layout figures.",
        "Disable merging of string based and file based includes (some\nformats, specifically ePub, do not correctly handle this merging)",
        "Content to include at the end of the document header.",
        "Content to include at the beginning of the document body (e.g.&nbsp;after\nthe <code>&lt;body&gt;</code> tag in HTML, or the\n<code>\\begin{document}</code> command in LaTeX).",
        "Content to include at the end of the document body (before the\n<code>&lt;/body&gt;</code> tag in HTML, or the\n<code>\\end{document}</code> command in LaTeX).",
        "Include contents at the beginning of the document body (e.g.&nbsp;after\nthe <code>&lt;body&gt;</code> tag in HTML, or the\n<code>\\begin{document}</code> command in LaTeX).\nA string value or an object with key \u201Cfile\u201D indicates a filename\nwhose contents are to be included\nAn object with key \u201Ctext\u201D indicates textual content to be\nincluded",
        "Include contents at the end of the document body (before the\n<code>&lt;/body&gt;</code> tag in HTML, or the\n<code>\\end{document}</code> command in LaTeX).\nA string value or an object with key \u201Cfile\u201D indicates a filename\nwhose contents are to be included\nAn object with key \u201Ctext\u201D indicates textual content to be\nincluded",
        "Include contents at the end of the header. This can be used, for\nexample, to include special CSS or JavaScript in HTML documents.\nA string value or an object with key \u201Cfile\u201D indicates a filename\nwhose contents are to be included\nAn object with key \u201Ctext\u201D indicates textual content to be\nincluded",
        "Path (or glob) to files to publish with this document.",
        {
          short: "Text to be in a running header.",
          long: "Text to be in a running header.\nProvide a single option or up to four options for different\nplacements (odd page inner, odd page outer, even page innner, even page\nouter)."
        },
        {
          short: "Text to be in a running footer.",
          long: 'Text to be in a running footer.\nProvide a single option or up to four options for different\nplacements (odd page inner, odd page outer, even page innner, even page\nouter).\nSee <a href="https://wiki.contextgarden.net/Headers_and_Footers">ConTeXt\nHeaders and Footers</a> for more information.'
        },
        "Whether to include all source documents as file attachments in the\nPDF file.",
        "The footer for man pages.",
        "The header for man pages.",
        {
          short: "Include file with YAML metadata",
          long: "Read metadata from the supplied YAML (or JSON) file. This option can\nbe used with every input format, but string scalars in the YAML file\nwill always be parsed as Markdown. Generally, the input will be handled\nthe same as in YAML metadata blocks. Metadata values specified inside\nthe document, or by using <code>-M</code>, overwrite values specified\nwith this option."
        },
        {
          short: "Include files with YAML metadata",
          long: "Read metadata from the supplied YAML (or JSON) files. This option can\nbe used with every input format, but string scalars in the YAML file\nwill always be parsed as Markdown. Generally, the input will be handled\nthe same as in YAML metadata blocks. Values in files specified later in\nthe list will be preferred over those specified earlier. Metadata values\nspecified inside the document, or by using <code>-M</code>, overwrite\nvalues specified with this option."
        },
        {
          short: "Identifies the main language of the document (e.g.&nbsp;<code>en</code> or\n<code>en-GB</code>).",
          long: 'Identifies the main language of the document using IETF language tags\n(following the <a href="https://www.rfc-editor.org/info/bcp47">BCP\n47</a> standard), such as <code>en</code> or <code>en-GB</code>. The <a href="https://r12a.github.io/app-subtags/">Language subtag lookup</a>\ntool can look up or verify these tags.\nThis affects most formats, and controls hyphenation in PDF output\nwhen using LaTeX (through <a href="https://ctan.org/pkg/babel"><code>babel</code></a> and <a href="https://ctan.org/pkg/polyglossia"><code>polyglossia</code></a>) or\nConTeXt.'
        },
        "YAML file containing custom language translations",
        {
          short: "The base script direction for the document (<code>rtl</code> or\n<code>ltr</code>).",
          long: "The base script direction for the document (<code>rtl</code> or\n<code>ltr</code>).\nFor bidirectional documents, native pandoc <code>span</code>s and\n<code>div</code>s with the <code>dir</code> attribute can be used to\noverride the base direction in some output formats. This may not always\nbe necessary if the final renderer (e.g.&nbsp;the browser, when generating\nHTML) supports the [Unicode Bidirectional Algorithm].\nWhen using LaTeX for bidirectional documents, only the\n<code>xelatex</code> engine is fully supported (use\n<code>--pdf-engine=xelatex</code>)."
        },
        {
          short: "Use Quarto\u2019s built-in PDF rendering wrapper",
          long: "Use Quarto\u2019s built-in PDF rendering wrapper (includes support for\nautomatically installing missing LaTeX packages)"
        },
        "Enable/disable automatic LaTeX package installation",
        "Minimum number of compilation passes.",
        "Maximum number of compilation passes.",
        "Clean intermediates after compilation.",
        "Program to use for <code>makeindex</code>.",
        "Array of command line options for <code>makeindex</code>.",
        "Array of command line options for <code>tlmgr</code>.",
        "Output directory for intermediates and PDF.",
        "Set to <code>false</code> to prevent an installation of TinyTex from\nbeing used to compile PDF documents.",
        "Array of paths LaTeX should search for inputs.",
        "The document class.",
        {
          short: "Options for the document class,",
          long: "For LaTeX/PDF output, the options set for the document class.\nFor HTML output using KaTeX, you can render display math equations\nflush left using <code>classoption: fleqn</code>"
        },
        "Control the <code>\\pagestyle{}</code> for the document.",
        "The paper size for the document.",
        {
          short: "The options for margins and text layout for this document.",
          long: 'The options for margins and text layout for this document.\nSee <a href="https://wiki.contextgarden.net/Layout">ConTeXt\nLayout</a> for additional information.'
        },
        "The page layout to use for this document (<code>article</code>,\n<code>full</code>, or <code>custom</code>)",
        {
          short: "Target page width for output (used to compute columns widths for\n<code>layout</code> divs)",
          long: "Target page width for output (used to compute columns widths for\n<code>layout</code> divs). Defaults to 6.5 inches, which corresponds to\ndefault letter page settings in docx and odt."
        },
        {
          short: "The layout of the appendix for this document (<code>none</code>,\n<code>plain</code>, or <code>default</code>)",
          long: "The layout of the appendix for this document (<code>none</code>,\n<code>plain</code>, or <code>default</code>).\nTo completely disable any styling of the appendix, choose the\nappendix style <code>none</code>. For minimal styling, choose\n<code>plain.</code>"
        },
        {
          short: "The layout of the title block for this document (<code>none</code>,\n<code>plain</code>, or <code>default</code>).",
          long: "The layout of the title block for this document (<code>none</code>,\n<code>plain</code>, or <code>default</code>).\nTo completely disable any styling of the title block, choose the\nstyle <code>none</code>. For minimal styling, choose\n<code>plain.</code>"
        },
        {
          short: "Apply a banner style treatment to the title block.",
          long: "Applies a banner style treatment for the title block. You may specify\none of the following values:"
        },
        {
          short: "Sets the color of text elements in a banner style title block.",
          long: "Sets the color of text elements in a banner style title block. Use\none of the following values:"
        },
        {
          short: "Enables or disables the display of categories in the title block.",
          long: ""
        },
        "Adds a css <code>max-width</code> to the body Element.",
        {
          short: "Sets the left margin of the document.",
          long: "For HTML output, sets the <code>margin-left</code> property on the\nBody element.\nFor LaTeX output, sets the left margin if <code>geometry</code> is\nnot used (otherwise <code>geometry</code> overrides this value)\nFor ConTeXt output, sets the left margin if <code>layout</code> is\nnot used, otherwise <code>layout</code> overrides these.\nFor <code>wkhtmltopdf</code> sets the left page margin."
        },
        {
          short: "Sets the right margin of the document.",
          long: "For HTML output, sets the <code>margin-right</code> property on the\nBody element.\nFor LaTeX output, sets the right margin if <code>geometry</code> is\nnot used (otherwise <code>geometry</code> overrides this value)\nFor ConTeXt output, sets the right margin if <code>layout</code> is\nnot used, otherwise <code>layout</code> overrides these.\nFor <code>wkhtmltopdf</code> sets the right page margin."
        },
        {
          short: "Sets the top margin of the document.",
          long: "For HTML output, sets the <code>margin-top</code> property on the\nBody element.\nFor LaTeX output, sets the top margin if <code>geometry</code> is not\nused (otherwise <code>geometry</code> overrides this value)\nFor ConTeXt output, sets the top margin if <code>layout</code> is not\nused, otherwise <code>layout</code> overrides these.\nFor <code>wkhtmltopdf</code> sets the top page margin."
        },
        {
          short: "Sets the bottom margin of the document.",
          long: "For HTML output, sets the <code>margin-bottom</code> property on the\nBody element.\nFor LaTeX output, sets the bottom margin if <code>geometry</code> is\nnot used (otherwise <code>geometry</code> overrides this value)\nFor ConTeXt output, sets the bottom margin if <code>layout</code> is\nnot used, otherwise <code>layout</code> overrides these.\nFor <code>wkhtmltopdf</code> sets the bottom page margin."
        },
        {
          short: "Options for the geometry package.",
          long: 'Options for the <a href="https://ctan.org/pkg/geometry">geometry</a>\npackage. For example:'
        },
        {
          short: "Additional non-color options for the hyperref package.",
          long: 'Options for the <a href="https://ctan.org/pkg/hyperref">hyperref</a>\npackage. For example:'
        },
        {
          short: "Whether to use document class settings for indentation.",
          long: "Whether to use document class settings for indentation. If the\ndocument class settings are not used, the default LaTeX template removes\nindentation and adds space between paragraphs\nFor groff (<code>ms</code>) documents, the paragraph indent, for\nexample, <code>2m</code>."
        },
        {
          short: "Make <code>\\paragraph</code> and <code>\\subparagraph</code>\nfree-standing rather than run-in.",
          long: 'Make <code>\\paragraph</code> and <code>\\subparagraph</code> (fourth-\nand fifth-level headings, or fifth- and sixth-level with book classes)\nfree-standing rather than run-in; requires further formatting to\ndistinguish from <code>\\subsubsection</code> (third- or fourth-level\nheadings). Instead of using this option, <a href="https://ctan.org/pkg/koma-script">KOMA-Script</a> can adjust\nheadings more extensively:'
        },
        "Directory containing reveal.js files.",
        "The base url for s5 presentations.",
        "The base url for Slidy presentations.",
        "The base url for Slideous presentations.",
        "Show a special icon next to links that leave the current site.",
        "Open external links in a new browser window or tab (rather than\nnavigating the current tab).",
        {
          short: "A regular expression that can be used to determine whether a link is\nan internal link.",
          long: "A regular expression that can be used to determine whether a link is\nan internal link. For example, the following will treat links that start\nwith http://www.quarto.org as internal links (and others will be\nconsidered external):"
        },
        "Automatically generate the contents of a page from a list of Quarto\ndocuments or other custom data.",
        "List of keywords to be included in the document metadata.",
        "The document subject",
        "The document description. Some applications show this as\n<code>Comments</code> metadata.",
        "The document category.",
        {
          short: "The License for this document, if any. (e.g.&nbsp;<code>CC BY</code>)",
          long: "The license for this document, if any.\nCreative Commons licenses <code>CC BY</code>, <code>CC BY-SA</code>,\n<code>CC BY-ND</code>, <code>CC BY-NC</code> will automatically generate\na license link in the document appendix. Other license text will be\nplaced in the appendix verbatim."
        },
        "Sets the title metadata for the document",
        "Sets the title metadata for the document",
        "Specify STRING as a prefix at the beginning of the title that appears\nin the HTML header (but not in the title as it appears at the beginning\nof the body)",
        "Sets the description metadata for the document",
        "Sets the author metadata for the document",
        "Sets the date metadata for the document",
        {
          short: "Number section headings",
          long: "Number section headings rendered output. By default, sections are not\nnumbered. Sections with class <code>.unnumbered</code> will never be\nnumbered, even if <code>number-sections</code> is specified."
        },
        {
          short: "The depth to which sections should be numbered.",
          long: "By default, all headings in your document create a numbered section.\nYou customize numbering depth using the <code>number-depth</code>\noption.\nFor example, to only number sections immediately below the chapter\nlevel, use this:"
        },
        "The numbering depth for sections. (Use <code>number-depth</code>\ninstead).",
        {
          short: "Offset for section headings in output (offsets are 0 by default)",
          long: "Offset for section headings in output (offsets are 0 by default) The\nfirst number is added to the section number for top-level headings, the\nsecond for second-level headings, and so on. So, for example, if you\nwant the first top-level heading in your document to be numbered \u201C6\u201D,\nspecify <code>number-offset: 5</code>. If your document starts with a\nlevel-2 heading which you want to be numbered \u201C1.5\u201D, specify\n<code>number-offset: [1,4]</code>. Implies\n<code>number-sections</code>"
        },
        {
          short: "Shift heading levels by a positive or negative integer. For example,\nwith <code>shift-heading-level-by: -1</code>, level 2 headings become\nlevel 1 headings.",
          long: "Shift heading levels by a positive or negative integer. For example,\nwith <code>shift-heading-level-by: -1</code>, level 2 headings become\nlevel 1 headings, and level 3 headings become level 2 headings. Headings\ncannot have a level less than 1, so a heading that would be shifted\nbelow level 1 becomes a regular paragraph. Exception: with a shift of\n-N, a level-N heading at the beginning of the document replaces the\nmetadata title."
        },
        {
          short: "Sets the page numbering style and location for the document.",
          long: 'Sets the page numbering style and location for the document using the\n<code>\\setuppagenumbering</code> command.\nSee <a href="https://wiki.contextgarden.net/Command/setuppagenumbering">ConTeXt\nPage Numbering</a> for additional information.'
        },
        {
          short: "Treat top-level headings as the given division type\n(<code>default</code>, <code>section</code>, <code>chapter</code>, or\n<code>part</code>). The hierarchy order is part, chapter, then section;\nall headings are shifted such that the top-level heading becomes the\nspecified type.",
          long: "Treat top-level headings as the given division type\n(<code>default</code>, <code>section</code>, <code>chapter</code>, or\n<code>part</code>). The hierarchy order is part, chapter, then section;\nall headings are shifted such that the top-level heading becomes the\nspecified type.\nThe default behavior is to determine the best division type via\nheuristics: unless other conditions apply, <code>section</code> is\nchosen. When the <code>documentclass</code> variable is set to\n<code>report</code>, <code>book</code>, or <code>memoir</code> (unless\nthe <code>article</code> option is specified), <code>chapter</code> is\nimplied as the setting for this option. If <code>beamer</code> is the\noutput format, specifying either <code>chapter</code> or\n<code>part</code> will cause top-level headings to become\n<code>\\part{..}</code>, while second-level headings remain as their\ndefault type."
        },
        "If <code>true</code>, force the presence of the OJS runtime. If\n<code>false</code>, force the absence instead. If unset, the OJS runtime\nis included only if OJS cells are present in the document.",
        "Use the specified file as a style reference in producing a docx,\npptx, or odt file.",
        "Theme name, theme scss file, or a mix of both.",
        "The light theme name, theme scss file, or a mix of both.",
        "The light theme name, theme scss file, or a mix of both.",
        "The dark theme name, theme scss file, or a mix of both.",
        "The dark theme name, theme scss file, or a mix of both.",
        "Disables the built in html features like theming, anchor sections,\ncode block behavior, and more.",
        "Enables inclusion of Pandoc default CSS for this document.",
        "One or more CSS style sheets.",
        "Enables hover over a section title to see an anchor link.",
        "Enables smooth scrolling within the page.",
        {
          short: "Method use to render math in HTML output",
          long: 'Method use to render math in HTML output (<code>plain</code>,\n<code>webtex</code>, <code>gladtex</code>, <code>mathml</code>,\n<code>mathjax</code>, <code>katex</code>).\nSee the Pandoc documentation on <a href="https://pandoc.org/MANUAL.html#math-rendering-in-html">Math\nRendering in HTML</a> for additional details.'
        },
        "Wrap sections in <code>&lt;section&gt;</code> tags and attach\nidentifiers to the enclosing <code>&lt;section&gt;</code> rather than\nthe heading itself.",
        {
          short: "Specify a prefix to be added to all identifiers and internal\nlinks.",
          long: "Specify a prefix to be added to all identifiers and internal links in\nHTML and DocBook output, and to footnote numbers in Markdown and Haddock\noutput. This is useful for preventing duplicate identifiers when\ngenerating fragments to be included in other pages."
        },
        {
          short: "Method for obfuscating mailto: links in HTML documents.",
          long: "Specify a method for obfuscating <code>mailto:</code> links in HTML\ndocuments."
        },
        "Use <code>&lt;q&gt;</code> tags for quotes in HTML.",
        {
          short: "Use the specified engine when producing PDF output.",
          long: "Use the specified engine when producing PDF output. If the engine is\nnot in your PATH, the full path of the engine may be specified here. If\nthis option is not specified, Quarto uses the following defaults\ndepending on the output format in use:"
        },
        {
          short: "Use the given string as a command-line argument to the\n<code>pdf-engine</code>.",
          long: "Use the given string as a command-line argument to the pdf-engine.\nFor example, to use a persistent directory foo for latexmk\u2019s auxiliary\nfiles, use <code>pdf-engine-opt: -outdir=foo</code>. Note that no check\nfor duplicate options is done."
        },
        "Whether to produce a Beamer article from this presentation.",
        "Add an extra Beamer option using <code>\\setbeameroption{}</code>.",
        "The aspect ratio for this presentation.",
        "The logo image for slides.",
        "The image for the title slide.",
        "Controls navigation symbols for the presentation (<code>empty</code>,\n<code>frame</code>, <code>vertical</code>, or\n<code>horizontal</code>)",
        "Whether to enable title pages for new sections.",
        "The Beamer color theme for this presentation.",
        "The Beamer font theme for this presentation.",
        "The Beamer inner theme for this presentation.",
        "The Beamer outer theme for this presentation.",
        "Options passed to LaTeX Beamer themes.",
        "The section number in man pages.",
        "Enable and disable extensions for markdown output (e.g.&nbsp;\u201C+emoji\u201D)",
        "Specify whether to use <code>atx</code> (<code>#</code>-prefixed) or\n<code>setext</code> (underlined) headings for level 1 and 2 headings\n(<code>atx</code> or <code>setext</code>).",
        "Preserve the original YAML front matter in rendered markdown",
        {
          short: "Determines which ipynb cell output formats are rendered\n(<code>none</code>, <code>all</code>, or <code>best</code>).",
          long: "Determines which ipynb cell output formats are rendered."
        },
        {
          short: "semver version range for required quarto version",
          long: "A semver version range describing the supported quarto versions for\nthis document or project.\nExamples:"
        },
        {
          short: "Adds the necessary setup to the document preamble to generate PDF/A\nof the type specified.",
          long: 'Adds the necessary setup to the document preamble to generate PDF/A\nof the type specified.\nIf the value is set to <code>true</code>, <code>1b:2005</code> will\nbe used as default.\nTo successfully generate PDF/A the required ICC color profiles have\nto be available and the content and all included files (such as images)\nhave to be standard conforming. The ICC profiles and output intent may\nbe specified using the variables <code>pdfaiccprofile</code> and\n<code>pdfaintent</code>. See also <a href="https://wiki.contextgarden.net/PDF/A">ConTeXt PDFA</a> for more\ndetails.'
        },
        {
          short: "When used in conjunction with <code>pdfa</code>, specifies the ICC\nprofile to use in the PDF, e.g.&nbsp;<code>default.cmyk</code>.",
          long: 'When used in conjunction with <code>pdfa</code>, specifies the ICC\nprofile to use in the PDF, e.g.&nbsp;<code>default.cmyk</code>.\nIf left unspecified, <code>sRGB.icc</code> is used as default. May be\nrepeated to include multiple profiles. Note that the profiles have to be\navailable on the system. They can be obtained from <a href="https://wiki.contextgarden.net/PDFX#ICC_profiles">ConTeXt ICC\nProfiles</a>.'
        },
        {
          short: "When used in conjunction with <code>pdfa</code>, specifies the output\nintent for the colors.",
          long: "When used in conjunction with <code>pdfa</code>, specifies the output\nintent for the colors, for example\n<code>ISO coated v2 300\\letterpercent\\space (ECI)</code>\nIf left unspecified, <code>sRGB IEC61966-2.1</code> is used as\ndefault."
        },
        "Document bibliography (BibTeX or CSL). May be a single file or a list\nof files",
        "Citation Style Language file to use for formatting references.",
        "Enables a hover popup for citation that shows the reference\ninformation.",
        "Where citation information should be displayed (<code>document</code>\nor <code>margin</code>)",
        "Method used to format citations (<code>citeproc</code>,\n<code>natbib</code>, or <code>biblatex</code>).",
        {
          short: "Turn on built-in citation processing",
          long: "Turn on built-in citation processing. To use this feature, you will\nneed to have a document containing citations and a source of\nbibliographic data: either an external bibliography file or a list of\n<code>references</code> in the document\u2019s YAML metadata. You can\noptionally also include a <code>csl</code> citation style file."
        },
        "A list of options for BibLaTeX.",
        "One or more options to provide for <code>natbib</code> when\ngenerating a bibliography.",
        "The bibliography style to use\n(e.g.&nbsp;<code>\\bibliographystyle{dinat}</code>) when using\n<code>natbib</code> or <code>biblatex</code>.",
        "The bibliography title to use when using <code>natbib</code> or\n<code>biblatex</code>.",
        "Controls whether to output bibliography configuration for\n<code>natbib</code> or <code>biblatex</code> when cite method is not\n<code>citeproc</code>.",
        {
          short: "JSON file containing abbreviations of journals that should be used in\nformatted bibliographies.",
          long: 'JSON file containing abbreviations of journals that should be used in\nformatted bibliographies when <code>form="short"</code> is specified.\nThe format of the file can be illustrated with an example:'
        },
        {
          short: "Format to read from",
          long: "Format to read from. Extensions can be individually enabled or\ndisabled by appending +EXTENSION or -EXTENSION to the format name\n(e.g.&nbsp;markdown+emoji)."
        },
        {
          short: "Format to read from",
          long: "Format to read from. Extensions can be individually enabled or\ndisabled by appending +EXTENSION or -EXTENSION to the format name\n(e.g.&nbsp;markdown+emoji)."
        },
        "Output file to write to",
        "Extension to use for generated output file",
        "Use the specified file as a custom template for the generated\ndocument.",
        "Include the specified files as partials accessible to the template\nfor the generated content.",
        "Produce output with an appropriate header and footer (e.g.&nbsp;a\nstandalone HTML, LaTeX, TEI, or RTF file, not a fragment)",
        {
          short: "Produce a standalone HTML file with no external dependencies",
          long: 'Produce a standalone HTML file with no external dependencies, using\n<code>data:</code> URIs to incorporate the contents of linked scripts,\nstylesheets, images, and videos. The resulting file should be\n\u201Cself-contained,\u201D in the sense that it needs no external files and no\nnet access to be displayed properly by a browser. This option works only\nwith HTML output formats, including <code>html4</code>,\n<code>html5</code>, <code>html+lhs</code>, <code>html5+lhs</code>,\n<code>s5</code>, <code>slidy</code>, <code>slideous</code>,\n<code>dzslides</code>, and <code>revealjs</code>. Scripts, images, and\nstylesheets at absolute URLs will be downloaded; those at relative URLs\nwill be sought relative to the working directory (if the first source\nfile is local) or relative to the base URL (if the first source file is\nremote). Elements with the attribute <code>data-external="1"</code> will\nbe left alone; the documents they link to will not be incorporated in\nthe document. Limitation: resources that are loaded dynamically through\nJavaScript cannot be incorporated; as a result, some advanced features\n(e.g.&nbsp;zoom or speaker notes) may not work in an offline \u201Cself-contained\u201D\n<code>reveal.js</code> slide show.'
        },
        {
          short: "Produce a standalone HTML file with no external dependencies",
          long: "Produce a standalone HTML file with no external dependencies. Note\nthat this option has been deprecated in favor of\n<code>embed-resources</code>."
        },
        {
          short: "Embed math libraries (e.g.&nbsp;MathJax) within\n<code>self-contained</code> output.",
          long: "Embed math libraries (e.g.&nbsp;MathJax) within\n<code>self-contained</code> output. Note that math libraries are not\nembedded by default because they are quite large and often time\nconsuming to download."
        },
        "Specify executables or Lua scripts to be used as a filter\ntransforming the pandoc AST after the input is parsed and before the\noutput is written.",
        "Speicfy Lua scripts that implement shortcode handlers",
        "Keep the markdown file generated by executing code",
        "Keep the notebook file generated from executing code.",
        "Filters to pre-process ipynb files before rendering to markdown",
        "Keep the intermediate tex file used during render.",
        {
          short: "Extract images and other media contained in or linked from the source\ndocument to the path DIR.",
          long: "Extract images and other media contained in or linked from the source\ndocument to the path DIR, creating it if necessary, and adjust the\nimages references in the document so they point to the extracted files.\nMedia are downloaded, read from the file system, or extracted from a\nbinary container (e.g.&nbsp;docx), as needed. The original file paths are\nused if they are relative paths not containing \u2026 Otherwise filenames are\nconstructed from the SHA1 hash of the contents."
        },
        "List of paths to search for images and other resources.",
        {
          short: "Specify a default extension to use when image paths/URLs have no\nextension.",
          long: "Specify a default extension to use when image paths/URLs have no\nextension. This allows you to use the same source for formats that\nrequire different kinds of images. Currently this option only affects\nthe Markdown and LaTeX readers."
        },
        {
          short: "Specifies a custom abbreviations file, with abbreviations one to a\nline.",
          long: "Specifies a custom abbreviations file, with abbreviations one to a\nline. This list is used when reading Markdown input: strings found in\nthis list will be followed by a nonbreaking space, and the period will\nnot produce sentence-ending space in formats like LaTeX. The strings may\nnot contain spaces."
        },
        {
          short: "Specify the default dpi (dots per inch) value for conversion from\npixels to inch/ centimeters and vice versa.",
          long: "Specify the default dpi (dots per inch) value for conversion from\npixels to inch/ centimeters and vice versa. (Technically, the correct\nterm would be ppi: pixels per inch.) The default is <code>96</code>.\nWhen images contain information about dpi internally, the encoded value\nis used instead of the default specified by this option."
        },
        "Logo image (placed in bottom right corner of slides)",
        {
          short: "Footer to include on all slides",
          long: "Footer to include on all slides. Can also be set per-slide by\nincluding a div with class <code>.footer</code> on the slide."
        },
        {
          short: "Allow content that overflows slides vertically to scroll",
          long: "<code>true</code> to allow content that overflows slides vertically\nto scroll. This can also be set per-slide by including the\n<code>.scrollable</code> class on the slide title."
        },
        {
          short: "Use a smaller default font for slide content",
          long: "<code>true</code> to use a smaller default font for slide content.\nThis can also be set per-slide by including the <code>.smaller</code>\nclass on the slide title."
        },
        "Flags if the presentation is running in an embedded mode",
        "The display mode that will be used to show slides",
        "For slides with a single top-level image, automatically stretch it to\nfill the slide.",
        {
          short: "The \u2018normal\u2019 width of the presentation",
          long: "The \u201Cnormal\u201D width of the presentation, aspect ratio will be\npreserved when the presentation is scaled to fit different resolutions.\nCan be specified using percentage units."
        },
        {
          short: "The \u2018normal\u2019 height of the presentation",
          long: "The \u201Cnormal\u201D height of the presentation, aspect ratio will be\npreserved when the presentation is scaled to fit different resolutions.\nCan be specified using percentage units."
        },
        "Factor of the display size that should remain empty around the\ncontent",
        "Bounds for smallest possible scale to apply to content",
        "Bounds for largest possible scale to apply to content",
        "Vertical centering of slides",
        "Disables the default reveal.js slide layout (scaling and\ncentering)",
        {
          short: "Open links in an iframe preview overlay (<code>true</code>,\n<code>false</code>, or <code>auto</code>)",
          long: "Open links in an iframe preview overlay."
        },
        "Autoplay embedded media (<code>null</code>, <code>true</code>, or\n<code>false</code>). Default is <code>null</code> (only when\n<code>autoplay</code> attribute is specified)",
        {
          short: "Global override for preloading lazy-loaded iframes\n(<code>null</code>, <code>true</code>, or <code>false</code>).",
          long: "Global override for preloading lazy-loaded iframes"
        },
        "Number of slides away from the current slide to pre-load resources\nfor",
        "Number of slides away from the current slide to pre-load resources\nfor (on mobile devices).",
        "Parallax background image",
        "Parallax background size (e.g.&nbsp;\u20182100px 900px\u2019)",
        "Number of pixels to move the parallax background horizontally per\nslide.",
        "Number of pixels to move the parallax background vertically per\nslide.",
        "Display a presentation progress bar",
        "Push each slide change to the browser history",
        {
          short: "Navigation progression (<code>linear</code>, <code>vertical</code>,\nor <code>grid</code>)",
          long: "Changes the behavior of navigation directions."
        },
        "Enable touch navigation on devices with touch input",
        "Enable keyboard shortcuts for navigation",
        "Enable slide navigation via mouse wheel",
        "Hide cursor if inactive",
        "Time before the cursor is hidden (in ms)",
        "Loop the presentation",
        "Randomize the order of slides each time the presentation loads",
        {
          short: "Show arrow controls for navigating through slides (<code>true</code>,\n<code>false</code>, or <code>auto</code>).",
          long: "Show arrow controls for navigating through slides."
        },
        "Location for navigation controls (<code>edges</code> or\n<code>bottom-right</code>)",
        "Help the user learn the controls by providing visual hints.",
        "Visibility rule for backwards navigation arrows (<code>faded</code>,\n<code>hidden</code>, or <code>visible</code>).",
        "Automatically progress all slides at the specified interval",
        "Stop auto-sliding after user input",
        "Navigation method to use when auto sliding (defaults to\nnavigateNext)",
        "Expected average seconds per slide (used by pacing timer in speaker\nview)",
        "Flags whether it should be possible to pause the presentation\n(blackout)",
        "Show a help overlay when the <code>?</code> key is pressed",
        "Add the current slide to the URL hash",
        "URL hash type (<code>number</code> or <code>title</code>)",
        "Use 1 based indexing for hash links to match slide number",
        "Monitor the hash and change slides accordingly",
        "Include the current fragment in the URL",
        "Play a subtle sound when changing slides",
        "Prints each fragment on a separate slide",
        {
          short: "Offset used to reduce the height of content within exported PDF\npages.",
          long: "Offset used to reduce the height of content within exported PDF\npages. This exists to account for environment differences based on how\nyou print to PDF. CLI printing options, like phantomjs and wkpdf, can\nend on precisely the total height of the document whereas in-browser\nprinting has to end one pixel before."
        },
        "Enable the slide overview mode",
        "Configuration for revealjs menu.",
        "Side of the presentation where the menu will be shown\n(<code>left</code> or <code>right</code>)",
        "Width of the menu",
        "Add slide numbers to menu items",
        "For slides with no title, attempt to use the start of the text\ncontent as the title instead.",
        "Configuration for revealjs chalkboard.",
        "Visual theme for drawing surface (<code>chalkboard</code> or\n<code>whiteboard</code>)",
        "The drawing width of the boardmarker. Defaults to 3. Larger values\ndraw thicker lines.",
        "The drawing width of the chalk. Defaults to 7. Larger values draw\nthicker lines.",
        "Optional file name for pre-recorded drawings (download drawings using\nthe <code>D</code> key)",
        "Configuration option to prevent changes to existing drawings",
        "Add chalkboard buttons at the bottom of the slide",
        "Gives the duration (in ms) of the transition for a slide change, so\nthat the notes canvas is drawn after the transition is completed.",
        "Configuraiotn for reveal presentation multiplexing.",
        "Multiplex token server (defaults to Reveal-hosted server)",
        "Unique presentation id provided by multiplex token server",
        "Secret provided by multiplex token server",
        {
          short: "Transition style for slides",
          long: "Transition style for slides backgrounds. (<code>none</code>,\n<code>fade</code>, <code>slide</code>, <code>convex</code>,\n<code>concave</code>, or <code>zoom</code>)"
        },
        "Slide transition speed (<code>default</code>, <code>fast</code>, or\n<code>slow</code>)",
        {
          short: "Transition style for full page slide backgrounds",
          long: "Transition style for full page slide backgrounds. (<code>none</code>,\n<code>fade</code>, <code>slide</code>, <code>convex</code>,\n<code>concave</code>, or <code>zoom</code>)"
        },
        "Turns fragments on and off globally",
        "Globally enable/disable auto-animate (enabled by default)",
        {
          short: "Default CSS easing function for auto-animation",
          long: "Default CSS easing function for auto-animation. Can be overridden\nper-slide or per-element via attributes."
        },
        {
          short: "Duration (in seconds) of auto-animate transition",
          long: "Duration (in seconds) of auto-animate transition. Can be overridden\nper-slide or per-element via attributes."
        },
        {
          short: "Auto-animate unmatched elements.",
          long: "Auto-animate unmatched elements. Can be overridden per-slide or\nper-element via attributes."
        },
        {
          short: "CSS properties that can be auto-animated (positional styles like top,\nleft, etc. are always animated).",
          long: ""
        },
        "Make list items in slide shows display incrementally (one by one).\nThe default is for lists to be displayed all at once.",
        {
          short: "Specifies that headings with the specified level create slides.\nHeadings above this level in the hierarchy are used to divide the slide\nshow into sections.",
          long: "Specifies that headings with the specified level create slides.\nHeadings above this level in the hierarchy are used to divide the slide\nshow into sections; headings below this level create subheads within a\nslide. Valid values are 0-6. If a slide level of 0 is specified, slides\nwill not be split automatically on headings, and horizontal rules must\nbe used to indicate slide boundaries. If a slide level is not specified\nexplicitly, the slide level will be set automatically based on the\ncontents of the document"
        },
        {
          short: "Display the page number of the current slide",
          long: "Display the page number of the current slide"
        },
        "Contexts in which the slide number appears (<code>all</code>,\n<code>print</code>, or <code>speaker</code>)",
        {
          short: "Additional attributes for the title slide of a reveal.js\npresentation.",
          long: "Additional attributes for the title slide of a reveal.js presentation\nas a map of attribute names and values. For example"
        },
        "CSS color for title slide background",
        "URL or path to the background image.",
        "CSS background size (defaults to <code>cover</code>)",
        "CSS background position (defaults to <code>center</code>)",
        "CSS background repeat (defaults to <code>no-repeat</code>)",
        "Opacity of the background image on a 0-1 scale. 0 is transparent and\n1 is fully opaque.",
        "The title slide style. Use <code>pandoc</code> to select the Pandoc\ndefault title slide style.",
        "Vertical centering of title slide",
        "Make speaker notes visible to all viewers",
        "Change the presentation direction to be RTL",
        {
          short: "Method used to print tables in Knitr engine documents\n(<code>default</code>, <code>kable</code>, <code>tibble</code>, or\n<code>paged</code>). Uses <code>default</code> if not specified.",
          long: "Method used to print tables in Knitr engine documents:"
        },
        {
          short: "Determine how text is wrapped in the output (<code>auto</code>,\n<code>none</code>, or <code>preserve</code>).",
          long: "Determine how text is wrapped in the output (the source code, not the\nrendered version)."
        },
        {
          short: "Specify length of lines in characters.",
          long: "Specify length of lines in characters. This affects text wrapping in\ngenerated source code (see <code>wrap</code>). It also affects\ncalculation of column widths for plain text tables."
        },
        {
          short: "Specify the number of spaces per tab (default is 4).",
          long: "Specify the number of spaces per tab (default is 4). Note that tabs\nwithin normal textual input are always converted to spaces. Tabs within\ncode are also converted, however this can be disabled with\n<code>preserve-tabs: false</code>."
        },
        {
          short: "Preserve tabs within code instead of converting them to spaces.",
          long: "Preserve tabs within code instead of converting them to spaces. (By\ndefault, pandoc converts tabs to spaces before parsing its input.) Note\nthat this will only affect tabs in literal code spans and code blocks.\nTabs in regular text are always treated as spaces."
        },
        {
          short: "Manually specify line endings (<code>lf</code>, <code>crlf</code>, or\n<code>native</code>).",
          long: "Manually specify line endings:"
        },
        {
          short: "Strip out HTML comments in source, rather than passing them on to\noutput.",
          long: "Strip out HTML comments in the Markdown source, rather than passing\nthem on to Markdown, Textile or HTML output as raw HTML. This does not\napply to HTML comments inside raw HTML blocks when the\n<code>markdown_in_html_blocks</code> extension is not set."
        },
        {
          short: "Use only ASCII characters in output.",
          long: "Use only ASCII characters in output. Currently supported for XML and\nHTML formats (which use entities instead of UTF-8 when this option is\nselected), CommonMark, gfm, and Markdown (which use entities), roff ms\n(which use hexadecimal escapes), and to a limited degree LaTeX (which\nuses standard commands for accented characters when possible). roff man\noutput uses ASCII by default."
        },
        {
          short: "Include an automatically generated table of contents",
          long: "Include an automatically generated table of contents (or, in the case\nof <code>latex</code>, <code>context</code>, <code>docx</code>,\n<code>odt</code>, <code>opendocument</code>, <code>rst</code>, or\n<code>ms</code>, an instruction to create one) in the output document.\nThis option has no effect if <code>standalone</code> is\n<code>false</code>.\nNote that if you are producing a PDF via <code>ms</code>, the table\nof contents will appear at the beginning of the document, before the\ntitle. If you would prefer it to be at the end of the document, use the\noption <code>pdf-engine-opt: --no-toc-relocation</code>."
        },
        {
          short: "Include an automatically generated table of contents",
          long: "Include an automatically generated table of contents (or, in the case\nof <code>latex</code>, <code>context</code>, <code>docx</code>,\n<code>odt</code>, <code>opendocument</code>, <code>rst</code>, or\n<code>ms</code>, an instruction to create one) in the output document.\nThis option has no effect if <code>standalone</code> is\n<code>false</code>.\nNote that if you are producing a PDF via <code>ms</code>, the table\nof contents will appear at the beginning of the document, before the\ntitle. If you would prefer it to be at the end of the document, use the\noption <code>pdf-engine-opt: --no-toc-relocation</code>."
        },
        "Specify the number of section levels to include in the table of\ncontents. The default is 3",
        "Location for table of contents (<code>body</code>, <code>left</code>,\nor <code>right</code> (default)).",
        "The title used for the table of contents.",
        "Print a list of figures in the document.",
        "Print a list of tables in the document.",
        "Setting this to false prevents this document from being included in\nsearches.",
        "URLs that alias this document, when included in a website.",
        {
          short: "The path to a preview image for this document.",
          long: "The path to a preview image for this content. By default, Quarto will\nuse the image value from the site: metadata. If you provide an image,\nyou may also optionally provide an image-width and image-height to\nimprove the appearance of your Twitter Card.\nIf image is not provided, Quarto will automatically attempt to locate\na preview image."
        },
        "The height of the preview image for this document.",
        "The width of the preview image for this document.",
        "The alt text for preview image on this page.",
        "Project configuration.",
        "Project type (<code>default</code>, <code>website</code>, or\n<code>book</code>)",
        "Files to render (defaults to all files)",
        {
          short: "Working directory for computations",
          long: "Control the working directory for computations."
        },
        "Output directory",
        "HTML library (JS/CSS/etc.) directory",
        "Additional file resources to be copied to output directory",
        "Additional file resources to be copied to output directory",
        "Options for <code>quarto preview</code>",
        "Scripts to run as a pre-render step",
        "Scripts to run as a post-render step",
        "Array of paths used to detect the project type within a directory",
        "Website configuration.",
        "Book configuration.",
        "The primary title of the item.",
        "Description metadata for HTML version of book",
        "The path to the favicon for this website",
        "Base URL for published website",
        "Path to site (defaults to <code>/</code>). Not required if you\nspecify <code>site-url</code>.",
        "Base URL for website source code repository",
        "Subdirectory of repository containing website",
        "Branch of website source code (defaults to <code>main</code>)",
        {
          short: "Links to source repository actions",
          long: "Links to source repository actions (<code>none</code> or one or more\nof <code>edit</code>, <code>source</code>, <code>issue</code>)"
        },
        {
          short: "Links to source repository actions",
          long: "Links to source repository actions (<code>none</code> or one or more\nof <code>edit</code>, <code>source</code>, <code>issue</code>)"
        },
        "Displays a \u2018reader-mode\u2019 tool which allows users to hide the sidebar\nand table of contents when viewing a page.",
        "Enable Google Analytics for this website",
        "The Google tracking Id or measurement Id of this website.",
        {
          short: "Storage options for Google Analytics data",
          long: 'Storage option for Google Analytics data using on of these two\nvalues:\n<code>cookies</code>: Use cookies to store unique user and session\nidentification (default).\n<code>none</code>: Do not use cookies to store unique user and\nsession identification.\nFor more about choosing storage options see <a href="https://quarto.org/docs/websites/website-tools.html#storage">Storage</a>.'
        },
        {
          short: "Anonymize the user ip address.",
          long: 'Anonymize the user ip address. For more about this feature, see <a href="https://support.google.com/analytics/answer/2763052?hl=en">IP\nAnonymization (or IP masking) in Google Analytics</a>.'
        },
        {
          short: "The version number of Google Analytics to use.",
          long: "The version number of Google Analytics to use."
        },
        {
          short: "Request cookie consent before enabling scripts that set cookies",
          long: 'Quarto includes the ability to request cookie consent before enabling\nscripts that set cookies, using <a href="https://www.cookieconsent.com/">Cookie Consent</a>.\nThe user\u2019s cookie preferences will automatically control Google\nAnalytics (if enabled) and can be used to control custom scripts you add\nas well. For more information see <a href="https://quarto.org/docs/websites/website-tools.html#custom-scripts-and-cookie-consent">Custom\nScripts and Cookie Consent</a>.'
        },
        {
          short: "The type of consent that should be requested",
          long: "The type of consent that should be requested, using one of these two\nvalues:"
        },
        {
          short: "The style of the consent banner that is displayed",
          long: "The style of the consent banner that is displayed:"
        },
        "Whether to use a dark or light appearance for the consent banner\n(<code>light</code> or <code>dark</code>).",
        "The url to the website\u2019s cookie or privacy policy.",
        {
          short: "The text to display for the cookie preferences link in the website\nfooter.",
          long: ""
        },
        "Provide full text search for website",
        "Location for search widget (<code>navbar</code> or\n<code>sidebar</code>)",
        "Type of search UI (<code>overlay</code> or <code>textbox</code>)",
        "Number of matches to display (defaults to 20)",
        "Matches after which to collapse additional results",
        "Provide button for copying search link",
        "Use external Algolia search index",
        "The name of the index to use when performing a search",
        "The unique ID used by Algolia to identify your application",
        "The Search-Only API key to use to connect to Algolia",
        "Enable tracking of Algolia analytics events",
        "Enable the display of the Algolia logo in the search results\nfooter.",
        "Field that contains the URL of index entries",
        "Field that contains the title of index entries",
        "Field that contains the text of index entries",
        "Field that contains the section of index entries",
        "Additional parameters to pass when executing a search",
        "Top navigation options",
        "The navbar title. Uses the project title if none is specified.",
        "Path to a logo image that will be displayed to the left of the\ntitle.",
        "Alternate text for the logo image.",
        "Target href from navbar logo / title. By default, the logo and title\nlink to the root page of the site (/index.html).",
        "The navbar\u2019s background color (named or hex color).",
        "The navbar\u2019s foreground color (named or hex color).",
        "Include a search box in the navbar.",
        "Always show the navbar (keeping it pinned).",
        "Collapse the navbar into a menu when the display becomes narrow.",
        "The responsive breakpoint below which the navbar will collapse into a\nmenu (<code>sm</code>, <code>md</code>, <code>lg</code> (default),\n<code>xl</code>, <code>xxl</code>).",
        "List of items for the left side of the navbar.",
        "List of items for the right side of the navbar.",
        "Side navigation options",
        "The identifier for this sidebar.",
        "The sidebar title. Uses the project title if none is specified.",
        "The subtitle for this sidebar.",
        "Path to a logo image that will be displayed in the sidebar.",
        "Include a search control in the sidebar.",
        "List of sidebar tools",
        "List of items for the sidebar",
        "The style of sidebar (<code>docked</code> or\n<code>floating</code>).",
        "The sidebar\u2019s background color (named or hex color).",
        "The sidebar\u2019s foreground color (named or hex color).",
        "Whether to show a border on the sidebar (defaults to true for\n\u2018docked\u2019 sidebars)",
        "Alignment of the items within the sidebar (<code>left</code>,\n<code>right</code>, or <code>center</code>)",
        "The depth at which the sidebar contents should be collapsed by\ndefault.",
        "When collapsed, pin the collapsed sidebar to the top of the page.",
        "Markdown to place above sidebar content (text or file path)",
        "Markdown to place below sidebar content (text or file path)",
        "The identifier for this sidebar.",
        "The sidebar title. Uses the project title if none is specified.",
        "The subtitle for this sidebar.",
        "Path to a logo image that will be displayed in the sidebar.",
        "Include a search control in the sidebar.",
        "List of sidebar tools",
        "List of items for the sidebar",
        "The style of sidebar (<code>docked</code> or\n<code>floating</code>).",
        "The sidebar\u2019s background color (named or hex color).",
        "The sidebar\u2019s foreground color (named or hex color).",
        "Whether to show a border on the sidebar (defaults to true for\n\u2018docked\u2019 sidebars)",
        "Alignment of the items within the sidebar (<code>left</code>,\n<code>right</code>, or <code>center</code>)",
        "The depth at which the sidebar contents should be collapsed by\ndefault.",
        "When collapsed, pin the collapsed sidebar to the top of the page.",
        "Markdown to place above sidebar content (text or file path)",
        "Markdown to place below sidebar content (text or file path)",
        "Markdown to insert at the beginning of each page\u2019s body (below the\ntitle and author block).",
        "Markdown to insert below each page\u2019s body.",
        "Markdown to place above margin content (text or file path)",
        "Markdown to place below margin content (text or file path)",
        "Provide next and previous article links in footer",
        "Shared page footer",
        "Default site thumbnail image for <code>twitter</code>\n/<code>open-graph</code>",
        "Publish open graph metadata",
        "Publish twitter card metadata",
        "Book subtitle",
        "The author(s) of the item.",
        "Book publication date",
        "Format string for dates in the book",
        "Abstract of the item (e.g.&nbsp;the abstract of a journal article)",
        "Book part and chapter files",
        "Book appendix files",
        {
          short: "Resources related to the procedural history of a legal case or\nlegislation.",
          long: "Resources related to the procedural history of a legal case or\nlegislation;\nCan also be used to refer to the procedural history of other items\n(e.g.&nbsp; \u201CConference canceled\u201D for a presentation accepted as a conference\nthat was subsequently canceled; details of a retraction or correction\nnotice)"
        },
        "Base name for single-file output (e.g.&nbsp;PDF, ePub)",
        "Cover image (used in HTML and ePub formats)",
        "Alternative text for cover image (used in HTML format)",
        "Sharing buttons to include on navbar or sidebar (one or more of\n<code>twitter</code>, <code>facebook</code>, <code>linkedin</code>)",
        "Sharing buttons to include on navbar or sidebar (one or more of\n<code>twitter</code>, <code>facebook</code>, <code>linkedin</code>)",
        "Download buttons for other formats to include on navbar or sidebar\n(one or more of <code>pdf</code>, <code>epub</code>, and\n<code>docx</code>)",
        "Download buttons for other formats to include on navbar or sidebar\n(one or more of <code>pdf</code>, <code>epub</code>, and\n<code>docx</code>)",
        "Custom tools for navbar or sidebar",
        "Digital Object Identifier (e.g.&nbsp;\u201C10.1128/AEM.02591-07\u201D)",
        "A url to the abstract for this item.",
        "Date the item has been accessed.",
        {
          short: "Short markup, decoration, or annotation to the item (e.g., to\nindicate items included in a review).",
          long: "Short markup, decoration, or annotation to the item (e.g., to\nindicate items included in a review);\nFor descriptive text (e.g., in an annotated bibliography), use\n<code>note</code> instead"
        },
        "Archive storing the item",
        "Collection the item is part of within an archive.",
        "Storage location within an archive (e.g.&nbsp;a box and folder\nnumber).",
        "Geographic location of the archive.",
        "Issuing or judicial authority (e.g.&nbsp;\u201CUSPTO\u201D for a patent, \u201CFairfax\nCircuit Court\u201D for a legal case).",
        {
          short: "Date the item was initially available",
          long: "Date the item was initially available (e.g.&nbsp;the online publication\ndate of a journal article before its formal publication date; the date a\ntreaty was made available for signing)."
        },
        "Call number (to locate the item in a library).",
        "The person leading the session containing a presentation (e.g.&nbsp;the\norganizer of the <code>container-title</code> of a\n<code>speech</code>).",
        "Chapter number (e.g.&nbsp;chapter number in a book; track number on an\nalbum).",
        {
          short: "Identifier of the item in the input data file (analogous to BiTeX\nentrykey).",
          long: "Identifier of the item in the input data file (analogous to BiTeX\nentrykey);\nUse this variable to facilitate conversion between word-processor and\nplain-text writing systems; For an identifer intended as formatted\noutput label for a citation (e.g.&nbsp;\u201CFerr78\u201D), use\n<code>citation-label</code> instead"
        },
        {
          short: "Label identifying the item in in-text citations of label styles\n(e.g.&nbsp;\u201CFerr78\u201D).",
          long: "Label identifying the item in in-text citations of label styles\n(e.g.&nbsp;\u201CFerr78\u201D);\nMay be assigned by the CSL processor based on item metadata; For the\nidentifier of the item in the input data file, use\n<code>citation-key</code> instead"
        },
        "Index (starting at 1) of the cited reference in the bibliography\n(generated by the CSL processor).",
        "Editor of the collection holding the item (e.g.&nbsp;the series editor for\na book).",
        "Number identifying the collection holding the item (e.g.&nbsp;the series\nnumber for a book)",
        "Title of the collection holding the item (e.g.&nbsp;the series title for a\nbook; the lecture series title for a presentation).",
        "Person compiling or selecting material for an item from the works of\nvarious persons or bodies (e.g.&nbsp;for an anthology).",
        "Composer (e.g.&nbsp;of a musical score).",
        "Author of the container holding the item (e.g.&nbsp;the book author for a\nbook chapter).",
        {
          short: "Title of the container holding the item.",
          long: "Title of the container holding the item (e.g.&nbsp;the book title for a\nbook chapter, the journal title for a journal article; the album title\nfor a recording; the session title for multi-part presentation at a\nconference)"
        },
        "Short/abbreviated form of container-title;",
        "A minor contributor to the item; typically cited using \u201Cwith\u201D before\nthe name when listed in a bibliography.",
        "Curator of an exhibit or collection (e.g.&nbsp;in a museum).",
        "Physical (e.g.&nbsp;size) or temporal (e.g.&nbsp;running time) dimensions of\nthe item.",
        "Director (e.g.&nbsp;of a film).",
        "Minor subdivision of a court with a <code>jurisdiction</code> for a\nlegal item",
        "(Container) edition holding the item (e.g.&nbsp;\u201C3\u201D when citing a chapter\nin the third edition of a book).",
        "The editor of the item.",
        "Managing editor (\u201CDirecteur de la Publication\u201D in French).",
        {
          short: "Combined editor and translator of a work.",
          long: "Combined editor and translator of a work.\nThe citation processory must be automatically generate if editor and\ntranslator variables are identical; May also be provided directly in\nitem data."
        },
        "Date the event related to an item took place.",
        "Name of the event related to the item (e.g.&nbsp;the conference name when\nciting a conference paper; the meeting where presentation was made).",
        "Geographic location of the event related to the item\n(e.g.&nbsp;\u201CAmsterdam, The Netherlands\u201D).",
        "Executive producer of the item (e.g.&nbsp;of a television series).",
        {
          short: "Number of a preceding note containing the first reference to the\nitem.",
          long: "Number of a preceding note containing the first reference to the\nitem\nAssigned by the CSL processor; Empty in non-note-based styles or when\nthe item hasn\u2019t been cited in any preceding notes in a document"
        },
        "A url to the full text for this item.",
        {
          short: "Type, class, or subtype of the item",
          long: "Type, class, or subtype of the item (e.g.&nbsp;\u201CDoctoral dissertation\u201D for\na PhD thesis; \u201CNIH Publication\u201D for an NIH technical report);\nDo not use for topical descriptions or categories (e.g.&nbsp;\u201Cadventure\u201D\nfor an adventure movie)"
        },
        "Guest (e.g.&nbsp;on a TV show or podcast).",
        "Host of the item (e.g.&nbsp;of a TV show or podcast).",
        "Illustrator (e.g.&nbsp;of a children\u2019s book or graphic novel).",
        "Interviewer (e.g.&nbsp;of an interview).",
        "International Standard Book Number (e.g.&nbsp;\u201C978-3-8474-1017-1\u201D).",
        "International Standard Serial Number.",
        {
          short: "Issue number of the item or container holding the item",
          long: "Issue number of the item or container holding the item (e.g.&nbsp;\u201C5\u201D when\nciting a journal article from journal volume 2, issue 5);\nUse <code>volume-title</code> for the title of the issue, if any."
        },
        "Date the item was issued/published.",
        "Geographic scope of relevance (e.g.&nbsp;\u201CUS\u201D for a US patent; the court\nhearing a legal case).",
        "Keyword(s) or tag(s) attached to the item.",
        {
          short: "The language of the item.",
          long: "The language of the item;\nShould be entered as an ISO 639-1 two-letter language code\n(e.g.&nbsp;\u201Cen\u201D, \u201Czh\u201D), optionally with a two-letter locale code\n(e.g.&nbsp;\u201Cde-DE\u201D, \u201Cde-AT\u201D)"
        },
        {
          short: "The license information applicable to an item.",
          long: "The license information applicable to an item (e.g.&nbsp;the license an\narticle or software is released under; the copyright information for an\nitem; the classification status of a document)"
        },
        {
          short: "A cite-specific pinpointer within the item.",
          long: "A cite-specific pinpointer within the item (e.g.&nbsp;a page number within\na book, or a volume in a multi-volume work).\nMust be accompanied in the input data by a label indicating the\nlocator type (see the Locators term list)."
        },
        "Description of the item\u2019s format or medium (e.g.&nbsp;\u201CCD\u201D, \u201CDVD\u201D,\n\u201CAlbum\u201D, etc.)",
        "Narrator (e.g.&nbsp;of an audio book).",
        "Descriptive text or notes about an item (e.g.&nbsp;in an annotated\nbibliography).",
        "Number identifying the item (e.g.&nbsp;a report number).",
        "Total number of pages of the cited item.",
        "Total number of volumes, used when citing multi-volume books and\nsuch.",
        "Organizer of an event (e.g.&nbsp;organizer of a workshop or\nconference).",
        {
          short: "The original creator of a work.",
          long: "The original creator of a work (e.g.&nbsp;the form of the author name\nlisted on the original version of a book; the historical author of a\nwork; the original songwriter or performer for a musical piece; the\noriginal developer or programmer for a piece of software; the original\nauthor of an adapted work such as a book adapted into a screenplay)"
        },
        "Issue date of the original version.",
        "Original publisher, for items that have been republished by a\ndifferent publisher.",
        "Geographic location of the original publisher (e.g.&nbsp;\u201CLondon,\nUK\u201D).",
        "Title of the original version (e.g.&nbsp;\u201C\u0412\u043E\u0439\u043D\u0430 \u0438 \u043C\u0438\u0440\u201D, the untranslated\nRussian title of \u201CWar and Peace\u201D).",
        "Range of pages the item (e.g.&nbsp;a journal article) covers in a\ncontainer (e.g.&nbsp;a journal issue).",
        "First page of the range of pages the item (e.g.&nbsp;a journal article)\ncovers in a container (e.g.&nbsp;a journal issue).",
        "Last page of the range of pages the item (e.g.&nbsp;a journal article)\ncovers in a container (e.g.&nbsp;a journal issue).",
        {
          short: "Number of the specific part of the item being cited (e.g.&nbsp;part 2 of a\njournal article).",
          long: "Number of the specific part of the item being cited (e.g.&nbsp;part 2 of a\njournal article).\nUse <code>part-title</code> for the title of the part, if any."
        },
        "Title of the specific part of an item being cited.",
        "A url to the pdf for this item.",
        "Performer of an item (e.g.&nbsp;an actor appearing in a film; a muscian\nperforming a piece of music).",
        "PubMed Central reference number.",
        "PubMed reference number.",
        "Printing number of the item or container holding the item.",
        "Producer (e.g.&nbsp;of a television or radio broadcast).",
        "A public url for this item.",
        "The publisher of the item.",
        "The geographic location of the publisher.",
        "Recipient (e.g.&nbsp;of a letter).",
        "Author of the item reviewed by the current item.",
        "Type of the item being reviewed by the current item (e.g.&nbsp;book,\nfilm).",
        "Title of the item reviewed by the current item.",
        "Scale of e.g.&nbsp;a map or model.",
        "Writer of a script or screenplay (e.g.&nbsp;of a film).",
        "Section of the item or container holding the item (e.g.&nbsp;\u201C\xA72.0.1\u201D for\na law; \u201Cpolitics\u201D for a newspaper article).",
        "Creator of a series (e.g.&nbsp;of a television series).",
        "Source from whence the item originates (e.g.&nbsp;a library catalog or\ndatabase).",
        "Publication status of the item (e.g.&nbsp;\u201Cforthcoming\u201D; \u201Cin press\u201D;\n\u201Cadvance online publication\u201D; \u201Cretracted\u201D)",
        "Date the item (e.g.&nbsp;a manuscript) was submitted for publication.",
        "Supplement number of the item or container holding the item (e.g.&nbsp;for\nsecondary legal items that are regularly updated between editions).",
        "Short/abbreviated form of<code>title</code>.",
        "Translator",
        'The <a href="https://docs.citationstyles.org/en/stable/specification.html#appendix-iii-types">type</a>\nof the item.',
        "Uniform Resource Locator\n(e.g.&nbsp;\u201Chttps://aem.asm.org/cgi/content/full/74/9/2766\u201D)",
        "Version of the item (e.g.&nbsp;\u201C2.0.9\u201D for a software program).",
        {
          short: "Volume number of the item (e.g.&nbsp;\u201C2\u201D when citing volume 2 of a book)\nor the container holding the item.",
          long: "Volume number of the item (e.g.&nbsp;\u201C2\u201D when citing volume 2 of a book)\nor the container holding the item (e.g.&nbsp;\u201C2\u201D when citing a chapter from\nvolume 2 of a book).\nUse <code>volume-title</code> for the title of the volume, if\nany."
        },
        {
          short: "Title of the volume of the item or container holding the item.",
          long: "Title of the volume of the item or container holding the item.\nAlso use for titles of periodical special issues, special sections,\nand the like."
        },
        "Disambiguating year suffix in author-date styles (e.g.&nbsp;\u201Ca\u201D in \u201CDoe,\n1999a\u201D).",
        "internal-schema-hack",
        "Project configuration.",
        "Project type (<code>default</code>, <code>website</code>, or\n<code>book</code>)",
        "Files to render (defaults to all files)",
        {
          short: "Working directory for computations",
          long: "Control the working directory for computations."
        },
        "Output directory",
        "HTML library (JS/CSS/etc.) directory",
        "Additional file resources to be copied to output directory",
        "Additional file resources to be copied to output directory",
        "Options for <code>quarto preview</code>",
        "Scripts to run as a pre-render step",
        "Scripts to run as a post-render step",
        "Array of paths used to detect the project type within a directory",
        "Website configuration.",
        "Book configuration.",
        "The primary title of the item.",
        "Description metadata for HTML version of book",
        "The path to the favicon for this website",
        "Base URL for published website",
        "Path to site (defaults to <code>/</code>). Not required if you\nspecify <code>site-url</code>.",
        "Base URL for website source code repository",
        "Subdirectory of repository containing website",
        "Branch of website source code (defaults to <code>main</code>)",
        {
          short: "Links to source repository actions",
          long: "Links to source repository actions (<code>none</code> or one or more\nof <code>edit</code>, <code>source</code>, <code>issue</code>)"
        },
        {
          short: "Links to source repository actions",
          long: "Links to source repository actions (<code>none</code> or one or more\nof <code>edit</code>, <code>source</code>, <code>issue</code>)"
        },
        "Displays a \u2018reader-mode\u2019 tool which allows users to hide the sidebar\nand table of contents when viewing a page.",
        "Enable Google Analytics for this website",
        "The Google tracking Id or measurement Id of this website.",
        {
          short: "Storage options for Google Analytics data",
          long: 'Storage option for Google Analytics data using on of these two\nvalues:\n<code>cookies</code>: Use cookies to store unique user and session\nidentification (default).\n<code>none</code>: Do not use cookies to store unique user and\nsession identification.\nFor more about choosing storage options see <a href="https://quarto.org/docs/websites/website-tools.html#storage">Storage</a>.'
        },
        {
          short: "Anonymize the user ip address.",
          long: 'Anonymize the user ip address. For more about this feature, see <a href="https://support.google.com/analytics/answer/2763052?hl=en">IP\nAnonymization (or IP masking) in Google Analytics</a>.'
        },
        {
          short: "The version number of Google Analytics to use.",
          long: "The version number of Google Analytics to use."
        },
        {
          short: "Request cookie consent before enabling scripts that set cookies",
          long: 'Quarto includes the ability to request cookie consent before enabling\nscripts that set cookies, using <a href="https://www.cookieconsent.com/">Cookie Consent</a>.\nThe user\u2019s cookie preferences will automatically control Google\nAnalytics (if enabled) and can be used to control custom scripts you add\nas well. For more information see <a href="https://quarto.org/docs/websites/website-tools.html#custom-scripts-and-cookie-consent">Custom\nScripts and Cookie Consent</a>.'
        },
        {
          short: "The type of consent that should be requested",
          long: "The type of consent that should be requested, using one of these two\nvalues:"
        },
        {
          short: "The style of the consent banner that is displayed",
          long: "The style of the consent banner that is displayed:"
        },
        "Whether to use a dark or light appearance for the consent banner\n(<code>light</code> or <code>dark</code>).",
        "The url to the website\u2019s cookie or privacy policy.",
        {
          short: "The text to display for the cookie preferences link in the website\nfooter.",
          long: ""
        },
        "Provide full text search for website",
        "Location for search widget (<code>navbar</code> or\n<code>sidebar</code>)",
        "Type of search UI (<code>overlay</code> or <code>textbox</code>)",
        "Number of matches to display (defaults to 20)",
        "Matches after which to collapse additional results",
        "Provide button for copying search link",
        "Use external Algolia search index",
        "The name of the index to use when performing a search",
        "The unique ID used by Algolia to identify your application",
        "The Search-Only API key to use to connect to Algolia",
        "Enable tracking of Algolia analytics events",
        "Enable the display of the Algolia logo in the search results\nfooter.",
        "Field that contains the URL of index entries",
        "Field that contains the title of index entries",
        "Field that contains the text of index entries",
        "Field that contains the section of index entries",
        "Additional parameters to pass when executing a search",
        "Top navigation options",
        "The navbar title. Uses the project title if none is specified.",
        "Path to a logo image that will be displayed to the left of the\ntitle.",
        "Alternate text for the logo image.",
        "Target href from navbar logo / title. By default, the logo and title\nlink to the root page of the site (/index.html).",
        "The navbar\u2019s background color (named or hex color).",
        "The navbar\u2019s foreground color (named or hex color).",
        "Include a search box in the navbar.",
        "Always show the navbar (keeping it pinned).",
        "Collapse the navbar into a menu when the display becomes narrow.",
        "The responsive breakpoint below which the navbar will collapse into a\nmenu (<code>sm</code>, <code>md</code>, <code>lg</code> (default),\n<code>xl</code>, <code>xxl</code>).",
        "List of items for the left side of the navbar.",
        "List of items for the right side of the navbar.",
        "Side navigation options",
        "The identifier for this sidebar.",
        "The sidebar title. Uses the project title if none is specified.",
        "The subtitle for this sidebar.",
        "Path to a logo image that will be displayed in the sidebar.",
        "Include a search control in the sidebar.",
        "List of sidebar tools",
        "List of items for the sidebar",
        "The style of sidebar (<code>docked</code> or\n<code>floating</code>).",
        "The sidebar\u2019s background color (named or hex color).",
        "The sidebar\u2019s foreground color (named or hex color).",
        "Whether to show a border on the sidebar (defaults to true for\n\u2018docked\u2019 sidebars)",
        "Alignment of the items within the sidebar (<code>left</code>,\n<code>right</code>, or <code>center</code>)",
        "The depth at which the sidebar contents should be collapsed by\ndefault.",
        "When collapsed, pin the collapsed sidebar to the top of the page.",
        "Markdown to place above sidebar content (text or file path)",
        "Markdown to place below sidebar content (text or file path)",
        "The identifier for this sidebar.",
        "The sidebar title. Uses the project title if none is specified.",
        "The subtitle for this sidebar.",
        "Path to a logo image that will be displayed in the sidebar.",
        "Include a search control in the sidebar.",
        "List of sidebar tools",
        "List of items for the sidebar",
        "The style of sidebar (<code>docked</code> or\n<code>floating</code>).",
        "The sidebar\u2019s background color (named or hex color).",
        "The sidebar\u2019s foreground color (named or hex color).",
        "Whether to show a border on the sidebar (defaults to true for\n\u2018docked\u2019 sidebars)",
        "Alignment of the items within the sidebar (<code>left</code>,\n<code>right</code>, or <code>center</code>)",
        "The depth at which the sidebar contents should be collapsed by\ndefault.",
        "When collapsed, pin the collapsed sidebar to the top of the page.",
        "Markdown to place above sidebar content (text or file path)",
        "Markdown to place below sidebar content (text or file path)",
        "Markdown to insert at the beginning of each page\u2019s body (below the\ntitle and author block).",
        "Markdown to insert below each page\u2019s body.",
        "Markdown to place above margin content (text or file path)",
        "Markdown to place below margin content (text or file path)",
        "Provide next and previous article links in footer",
        "Shared page footer",
        "Default site thumbnail image for <code>twitter</code>\n/<code>open-graph</code>",
        "Publish open graph metadata",
        "Publish twitter card metadata",
        "Book subtitle",
        "The author(s) of the item.",
        "Book publication date",
        "Format string for dates in the book",
        "Abstract of the item (e.g.&nbsp;the abstract of a journal article)",
        "Book part and chapter files",
        "Book appendix files",
        {
          short: "Resources related to the procedural history of a legal case or\nlegislation.",
          long: "Resources related to the procedural history of a legal case or\nlegislation;\nCan also be used to refer to the procedural history of other items\n(e.g.&nbsp; \u201CConference canceled\u201D for a presentation accepted as a conference\nthat was subsequently canceled; details of a retraction or correction\nnotice)"
        },
        "Base name for single-file output (e.g.&nbsp;PDF, ePub)",
        "Cover image (used in HTML and ePub formats)",
        "Alternative text for cover image (used in HTML format)",
        "Sharing buttons to include on navbar or sidebar (one or more of\n<code>twitter</code>, <code>facebook</code>, <code>linkedin</code>)",
        "Sharing buttons to include on navbar or sidebar (one or more of\n<code>twitter</code>, <code>facebook</code>, <code>linkedin</code>)",
        "Download buttons for other formats to include on navbar or sidebar\n(one or more of <code>pdf</code>, <code>epub</code>, and\n<code>docx</code>)",
        "Download buttons for other formats to include on navbar or sidebar\n(one or more of <code>pdf</code>, <code>epub</code>, and\n<code>docx</code>)",
        "Custom tools for navbar or sidebar",
        "Digital Object Identifier (e.g.&nbsp;\u201C10.1128/AEM.02591-07\u201D)",
        "A url to the abstract for this item.",
        "Date the item has been accessed.",
        {
          short: "Short markup, decoration, or annotation to the item (e.g., to\nindicate items included in a review).",
          long: "Short markup, decoration, or annotation to the item (e.g., to\nindicate items included in a review);\nFor descriptive text (e.g., in an annotated bibliography), use\n<code>note</code> instead"
        },
        "Archive storing the item",
        "Collection the item is part of within an archive.",
        "Storage location within an archive (e.g.&nbsp;a box and folder\nnumber).",
        "Geographic location of the archive.",
        "Issuing or judicial authority (e.g.&nbsp;\u201CUSPTO\u201D for a patent, \u201CFairfax\nCircuit Court\u201D for a legal case).",
        {
          short: "Date the item was initially available",
          long: "Date the item was initially available (e.g.&nbsp;the online publication\ndate of a journal article before its formal publication date; the date a\ntreaty was made available for signing)."
        },
        "Call number (to locate the item in a library).",
        "The person leading the session containing a presentation (e.g.&nbsp;the\norganizer of the <code>container-title</code> of a\n<code>speech</code>).",
        "Chapter number (e.g.&nbsp;chapter number in a book; track number on an\nalbum).",
        {
          short: "Identifier of the item in the input data file (analogous to BiTeX\nentrykey).",
          long: "Identifier of the item in the input data file (analogous to BiTeX\nentrykey);\nUse this variable to facilitate conversion between word-processor and\nplain-text writing systems; For an identifer intended as formatted\noutput label for a citation (e.g.&nbsp;\u201CFerr78\u201D), use\n<code>citation-label</code> instead"
        },
        {
          short: "Label identifying the item in in-text citations of label styles\n(e.g.&nbsp;\u201CFerr78\u201D).",
          long: "Label identifying the item in in-text citations of label styles\n(e.g.&nbsp;\u201CFerr78\u201D);\nMay be assigned by the CSL processor based on item metadata; For the\nidentifier of the item in the input data file, use\n<code>citation-key</code> instead"
        },
        "Index (starting at 1) of the cited reference in the bibliography\n(generated by the CSL processor).",
        "Editor of the collection holding the item (e.g.&nbsp;the series editor for\na book).",
        "Number identifying the collection holding the item (e.g.&nbsp;the series\nnumber for a book)",
        "Title of the collection holding the item (e.g.&nbsp;the series title for a\nbook; the lecture series title for a presentation).",
        "Person compiling or selecting material for an item from the works of\nvarious persons or bodies (e.g.&nbsp;for an anthology).",
        "Composer (e.g.&nbsp;of a musical score).",
        "Author of the container holding the item (e.g.&nbsp;the book author for a\nbook chapter).",
        {
          short: "Title of the container holding the item.",
          long: "Title of the container holding the item (e.g.&nbsp;the book title for a\nbook chapter, the journal title for a journal article; the album title\nfor a recording; the session title for multi-part presentation at a\nconference)"
        },
        "Short/abbreviated form of container-title;",
        "A minor contributor to the item; typically cited using \u201Cwith\u201D before\nthe name when listed in a bibliography.",
        "Curator of an exhibit or collection (e.g.&nbsp;in a museum).",
        "Physical (e.g.&nbsp;size) or temporal (e.g.&nbsp;running time) dimensions of\nthe item.",
        "Director (e.g.&nbsp;of a film).",
        "Minor subdivision of a court with a <code>jurisdiction</code> for a\nlegal item",
        "(Container) edition holding the item (e.g.&nbsp;\u201C3\u201D when citing a chapter\nin the third edition of a book).",
        "The editor of the item.",
        "Managing editor (\u201CDirecteur de la Publication\u201D in French).",
        {
          short: "Combined editor and translator of a work.",
          long: "Combined editor and translator of a work.\nThe citation processory must be automatically generate if editor and\ntranslator variables are identical; May also be provided directly in\nitem data."
        },
        "Date the event related to an item took place.",
        "Name of the event related to the item (e.g.&nbsp;the conference name when\nciting a conference paper; the meeting where presentation was made).",
        "Geographic location of the event related to the item\n(e.g.&nbsp;\u201CAmsterdam, The Netherlands\u201D).",
        "Executive producer of the item (e.g.&nbsp;of a television series).",
        {
          short: "Number of a preceding note containing the first reference to the\nitem.",
          long: "Number of a preceding note containing the first reference to the\nitem\nAssigned by the CSL processor; Empty in non-note-based styles or when\nthe item hasn\u2019t been cited in any preceding notes in a document"
        },
        "A url to the full text for this item.",
        {
          short: "Type, class, or subtype of the item",
          long: "Type, class, or subtype of the item (e.g.&nbsp;\u201CDoctoral dissertation\u201D for\na PhD thesis; \u201CNIH Publication\u201D for an NIH technical report);\nDo not use for topical descriptions or categories (e.g.&nbsp;\u201Cadventure\u201D\nfor an adventure movie)"
        },
        "Guest (e.g.&nbsp;on a TV show or podcast).",
        "Host of the item (e.g.&nbsp;of a TV show or podcast).",
        "Illustrator (e.g.&nbsp;of a children\u2019s book or graphic novel).",
        "Interviewer (e.g.&nbsp;of an interview).",
        "International Standard Book Number (e.g.&nbsp;\u201C978-3-8474-1017-1\u201D).",
        "International Standard Serial Number.",
        {
          short: "Issue number of the item or container holding the item",
          long: "Issue number of the item or container holding the item (e.g.&nbsp;\u201C5\u201D when\nciting a journal article from journal volume 2, issue 5);\nUse <code>volume-title</code> for the title of the issue, if any."
        },
        "Date the item was issued/published.",
        "Geographic scope of relevance (e.g.&nbsp;\u201CUS\u201D for a US patent; the court\nhearing a legal case).",
        "Keyword(s) or tag(s) attached to the item.",
        {
          short: "The language of the item.",
          long: "The language of the item;\nShould be entered as an ISO 639-1 two-letter language code\n(e.g.&nbsp;\u201Cen\u201D, \u201Czh\u201D), optionally with a two-letter locale code\n(e.g.&nbsp;\u201Cde-DE\u201D, \u201Cde-AT\u201D)"
        },
        {
          short: "The license information applicable to an item.",
          long: "The license information applicable to an item (e.g.&nbsp;the license an\narticle or software is released under; the copyright information for an\nitem; the classification status of a document)"
        },
        {
          short: "A cite-specific pinpointer within the item.",
          long: "A cite-specific pinpointer within the item (e.g.&nbsp;a page number within\na book, or a volume in a multi-volume work).\nMust be accompanied in the input data by a label indicating the\nlocator type (see the Locators term list)."
        },
        "Description of the item\u2019s format or medium (e.g.&nbsp;\u201CCD\u201D, \u201CDVD\u201D,\n\u201CAlbum\u201D, etc.)",
        "Narrator (e.g.&nbsp;of an audio book).",
        "Descriptive text or notes about an item (e.g.&nbsp;in an annotated\nbibliography).",
        "Number identifying the item (e.g.&nbsp;a report number).",
        "Total number of pages of the cited item.",
        "Total number of volumes, used when citing multi-volume books and\nsuch.",
        "Organizer of an event (e.g.&nbsp;organizer of a workshop or\nconference).",
        {
          short: "The original creator of a work.",
          long: "The original creator of a work (e.g.&nbsp;the form of the author name\nlisted on the original version of a book; the historical author of a\nwork; the original songwriter or performer for a musical piece; the\noriginal developer or programmer for a piece of software; the original\nauthor of an adapted work such as a book adapted into a screenplay)"
        },
        "Issue date of the original version.",
        "Original publisher, for items that have been republished by a\ndifferent publisher.",
        "Geographic location of the original publisher (e.g.&nbsp;\u201CLondon,\nUK\u201D).",
        "Title of the original version (e.g.&nbsp;\u201C\u0412\u043E\u0439\u043D\u0430 \u0438 \u043C\u0438\u0440\u201D, the untranslated\nRussian title of \u201CWar and Peace\u201D).",
        "Range of pages the item (e.g.&nbsp;a journal article) covers in a\ncontainer (e.g.&nbsp;a journal issue).",
        "First page of the range of pages the item (e.g.&nbsp;a journal article)\ncovers in a container (e.g.&nbsp;a journal issue).",
        "Last page of the range of pages the item (e.g.&nbsp;a journal article)\ncovers in a container (e.g.&nbsp;a journal issue).",
        {
          short: "Number of the specific part of the item being cited (e.g.&nbsp;part 2 of a\njournal article).",
          long: "Number of the specific part of the item being cited (e.g.&nbsp;part 2 of a\njournal article).\nUse <code>part-title</code> for the title of the part, if any."
        },
        "Title of the specific part of an item being cited.",
        "A url to the pdf for this item.",
        "Performer of an item (e.g.&nbsp;an actor appearing in a film; a muscian\nperforming a piece of music).",
        "PubMed Central reference number.",
        "PubMed reference number.",
        "Printing number of the item or container holding the item.",
        "Producer (e.g.&nbsp;of a television or radio broadcast).",
        "A public url for this item.",
        "The publisher of the item.",
        "The geographic location of the publisher.",
        "Recipient (e.g.&nbsp;of a letter).",
        "Author of the item reviewed by the current item.",
        "Type of the item being reviewed by the current item (e.g.&nbsp;book,\nfilm).",
        "Title of the item reviewed by the current item.",
        "Scale of e.g.&nbsp;a map or model.",
        "Writer of a script or screenplay (e.g.&nbsp;of a film).",
        "Section of the item or container holding the item (e.g.&nbsp;\u201C\xA72.0.1\u201D for\na law; \u201Cpolitics\u201D for a newspaper article).",
        "Creator of a series (e.g.&nbsp;of a television series).",
        "Source from whence the item originates (e.g.&nbsp;a library catalog or\ndatabase).",
        "Publication status of the item (e.g.&nbsp;\u201Cforthcoming\u201D; \u201Cin press\u201D;\n\u201Cadvance online publication\u201D; \u201Cretracted\u201D)",
        "Date the item (e.g.&nbsp;a manuscript) was submitted for publication.",
        "Supplement number of the item or container holding the item (e.g.&nbsp;for\nsecondary legal items that are regularly updated between editions).",
        "Short/abbreviated form of<code>title</code>.",
        "Translator",
        'The <a href="https://docs.citationstyles.org/en/stable/specification.html#appendix-iii-types">type</a>\nof the item.',
        "Uniform Resource Locator\n(e.g.&nbsp;\u201Chttps://aem.asm.org/cgi/content/full/74/9/2766\u201D)",
        "Version of the item (e.g.&nbsp;\u201C2.0.9\u201D for a software program).",
        {
          short: "Volume number of the item (e.g.&nbsp;\u201C2\u201D when citing volume 2 of a book)\nor the container holding the item.",
          long: "Volume number of the item (e.g.&nbsp;\u201C2\u201D when citing volume 2 of a book)\nor the container holding the item (e.g.&nbsp;\u201C2\u201D when citing a chapter from\nvolume 2 of a book).\nUse <code>volume-title</code> for the title of the volume, if\nany."
        },
        {
          short: "Title of the volume of the item or container holding the item.",
          long: "Title of the volume of the item or container holding the item.\nAlso use for titles of periodical special issues, special sections,\nand the like."
        },
        "Disambiguating year suffix in author-date styles (e.g.&nbsp;\u201Ca\u201D in \u201CDoe,\n1999a\u201D).",
        "internal-schema-hack"
      ],
      "schema/external-schemas.yml": [
        {
          _internalId: 7,
          type: "object",
          description: "be an object",
          properties: {
            path: {
              type: "string",
              description: "be a string"
            },
            name: {
              type: "string",
              description: "be a string"
            },
            register: {
              type: "boolean",
              description: "be `true` or `false`",
              completions: [
                "true",
                "false"
              ],
              exhaustiveCompletions: true
            },
            script: {
              _internalId: 4,
              type: "anyOf",
              anyOf: [
                {
                  _internalId: 2,
                  type: "anyOf",
                  anyOf: [
                    {
                      type: "string",
                      description: "be a string"
                    },
                    {
                      _internalId: 1,
                      type: "object",
                      description: "be an object",
                      properties: {
                        path: {
                          type: "string",
                          description: "be a string"
                        },
                        async: {
                          type: "boolean",
                          description: "be `true` or `false`",
                          completions: [
                            "true",
                            "false"
                          ],
                          exhaustiveCompletions: true
                        }
                      },
                      patternProperties: {},
                      required: [
                        "path"
                      ]
                    }
                  ],
                  description: "be at least one of: a string, an object"
                },
                {
                  _internalId: 3,
                  type: "array",
                  description: "be an array of values, where each element must be at least one of: a string, an object",
                  items: {
                    _internalId: 2,
                    type: "anyOf",
                    anyOf: [
                      {
                        type: "string",
                        description: "be a string"
                      },
                      {
                        _internalId: 1,
                        type: "object",
                        description: "be an object",
                        properties: {
                          path: {
                            type: "string",
                            description: "be a string"
                          },
                          async: {
                            type: "boolean",
                            description: "be `true` or `false`",
                            completions: [
                              "true",
                              "false"
                            ],
                            exhaustiveCompletions: true
                          }
                        },
                        patternProperties: {},
                        required: [
                          "path"
                        ]
                      }
                    ],
                    description: "be at least one of: a string, an object"
                  }
                }
              ],
              description: "be at least one of: at least one of: a string, an object, an array of values, where each element must be at least one of: a string, an object"
            },
            stylesheet: {
              _internalId: 6,
              type: "anyOf",
              anyOf: [
                {
                  type: "string",
                  description: "be a string"
                },
                {
                  _internalId: 5,
                  type: "array",
                  description: "be an array of values, where each element must be a string",
                  items: {
                    type: "string",
                    description: "be a string"
                  }
                }
              ],
              description: "be at least one of: a string, an array of values, where each element must be a string"
            },
            "self-contained": {
              type: "boolean",
              description: "be `true` or `false`",
              completions: [
                "true",
                "false"
              ],
              exhaustiveCompletions: true
            }
          },
          patternProperties: {},
          required: [
            "name"
          ],
          propertyNames: {
            type: "string",
            pattern: "^(?!(self_contained|selfContained))"
          },
          tags: {
            "case-convention": [
              "dash-case"
            ]
          },
          $id: "plugin-reveal"
        }
      ],
      "handlers/languages.yml": [
        "mermaid",
        "include",
        "dot"
      ],
      "handlers/lang-comment-chars.yml": {
        r: "#",
        python: "#",
        julia: "#",
        scala: "//",
        matlab: "%",
        csharp: "//",
        fsharp: "//",
        c: [
          "/*",
          "*/"
        ],
        css: [
          "/*",
          "*/"
        ],
        sas: [
          "*",
          ";"
        ],
        powershell: "#",
        bash: "#",
        sql: "--",
        mysql: "--",
        psql: "--",
        lua: "--",
        cpp: "//",
        cc: "//",
        stan: "#",
        octave: "#",
        fortran: "!",
        fortran95: "!",
        awk: "#",
        gawk: "#",
        stata: "*",
        java: "//",
        groovy: "//",
        sed: "#",
        perl: "#",
        ruby: "#",
        tikz: "%",
        js: "//",
        d3: "//",
        node: "//",
        sass: "//",
        coffee: "#",
        go: "//",
        asy: "//",
        haskell: "--",
        dot: "//",
        ojs: "//",
        apl: "\u235D",
        mermaid: "%%"
      },
      "handlers/mermaid/schema.yml": {
        _internalId: 132478,
        type: "object",
        description: "be an object",
        properties: {
          "mermaid-format": {
            _internalId: 132477,
            type: "enum",
            enum: [
              "png",
              "svg",
              "js"
            ],
            description: "be one of: `png`, `svg`, `js`",
            completions: [
              "png",
              "svg",
              "js"
            ],
            exhaustiveCompletions: true
          }
        },
        patternProperties: {},
        propertyNames: {
          type: "string",
          pattern: "^(?!(mermaid_format|mermaidFormat))"
        },
        tags: {
          "case-convention": [
            "dash-case"
          ]
        },
        $id: "handlers/mermaid"
      },
      "schema/extension.yml": [
        {
          name: "title",
          description: "Extension title.",
          schema: "string"
        },
        {
          name: "author",
          description: "Extension author.",
          schema: "string"
        },
        {
          name: "version",
          description: "Extension version.",
          schema: {
            ref: "semver"
          }
        },
        {
          name: "quarto-required",
          description: "Quarto version range. See https://docs.npmjs.com/cli/v6/using-npm/semver for syntax details.",
          schema: "string"
        },
        {
          name: "contributes",
          schema: {
            object: {
              properties: {
                shortcodes: {
                  arrayOf: "path"
                },
                filters: {
                  arrayOf: "path"
                },
                formats: {
                  schema: "object"
                }
              }
            }
          }
        }
      ]
    };
  }
});

// ../binary-search.ts
function glb(array, value, compare) {
  compare = compare || ((a, b) => a - b);
  if (array.length === 0) {
    return -1;
  }
  if (array.length === 1) {
    if (compare(value, array[0]) < 0) {
      return -1;
    } else {
      return 0;
    }
  }
  let left = 0;
  let right = array.length - 1;
  const vLeft = array[left], vRight = array[right];
  if (compare(value, vRight) >= 0) {
    return right;
  }
  if (compare(value, vLeft) < 0) {
    return -1;
  }
  while (right - left > 1) {
    const center = left + (right - left >> 1);
    const vCenter = array[center];
    const cmp = compare(value, vCenter);
    if (cmp < 0) {
      right = center;
    } else if (cmp === 0) {
      left = center;
    } else {
      left = center;
    }
  }
  return left;
}

// ../external/colors.ts
var Deno2;
try {
  Deno2 = globalThis.Deno;
} catch (_e) {
}
var noColor = typeof (Deno2 && Deno2.noColor) === "boolean" ? Deno2.noColor : true;
var enabled = !noColor;
function code(open, close) {
  return {
    open: `\x1B[${open.join(";")}m`,
    close: `\x1B[${close}m`,
    regexp: new RegExp(`\\x1b\\[${close}m`, "g")
  };
}
function run(str2, code2) {
  return enabled ? `${code2.open}${str2.replace(code2.regexp, code2.open)}${code2.close}` : str2;
}
function red(str2) {
  return run(str2, code([31], 39));
}
function blue(str2) {
  return run(str2, code([34], 39));
}
var ANSI_PATTERN = new RegExp(
  [
    "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
    "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"
  ].join("|"),
  "g"
);

// ../errors.ts
function platformHasNonAsciiCharacters() {
  try {
    return Deno.build.os !== "windows";
  } catch (_e) {
    return false;
  }
}
function tidyverseInfo(msg) {
  if (platformHasNonAsciiCharacters()) {
    return `${blue("\u2139")} ${msg}`;
  } else {
    return `${blue("i")} ${msg}`;
  }
}
function tidyverseError(msg) {
  if (platformHasNonAsciiCharacters()) {
    return `${red("\u2716")} ${msg}`;
  } else {
    return `${red("x")} ${msg}`;
  }
}
function tidyverseFormatError(msg) {
  let { heading, error, info } = msg;
  if (msg.location) {
    heading = `${locationString(msg.location)} ${heading}`;
  }
  if (msg.fileName) {
    heading = `In file ${msg.fileName}
${heading}`;
  }
  const strings = [
    heading,
    msg.sourceContext,
    ...error.map(tidyverseError),
    ...Object.values(info).map(tidyverseInfo),
    ""
  ];
  return strings.join("\n");
}
function quotedStringColor(msg) {
  return blue(msg);
}
function addFileInfo(msg, src) {
  if (src.fileName !== void 0) {
    msg.fileName = src.fileName;
  }
}
function addInstancePathInfo(msg, instancePath) {
  if (instancePath.length) {
    const niceInstancePath = instancePath.map((s) => blue(String(s))).join(":");
    msg.info["instance-path-location"] = `The error happened in location ${niceInstancePath}.`;
  }
}
function locationString(loc) {
  const { start, end } = loc;
  if (start.line === end.line) {
    if (start.column === end.column) {
      return `(line ${start.line + 1}, column ${start.column + 1})`;
    } else {
      return `(line ${start.line + 1}, columns ${start.column + 1}--${end.column + 1})`;
    }
  } else {
    return `(line ${start.line + 1}, column ${start.column + 1} through line ${end.line + 1}, column ${end.column + 1})`;
  }
}

// ../text.ts
function lines(text) {
  return text.split(/\r?\n/);
}
function* matchAll(text, regexp) {
  if (!regexp.global) {
    throw new Error("matchAll requires global regexps");
  }
  let match;
  while ((match = regexp.exec(text)) !== null) {
    yield match;
  }
}
function* lineOffsets(text) {
  yield 0;
  for (const match of matchAll(text, /\r?\n/g)) {
    yield match.index + match[0].length;
  }
}
function indexToLineCol(text) {
  const offsets = Array.from(lineOffsets(text));
  return function(offset) {
    if (offset === 0) {
      return {
        line: 0,
        column: 0
      };
    }
    const startIndex = glb(offsets, offset);
    return {
      line: startIndex,
      column: offset - offsets[startIndex]
    };
  };
}
function lineColToIndex(text) {
  const offsets = Array.from(lineOffsets(text));
  return function(position) {
    return offsets[position.line] + position.column;
  };
}
function formatLineRange(text, firstLine, lastLine) {
  const lineWidth = Math.max(
    String(firstLine + 1).length,
    String(lastLine + 1).length
  );
  const pad = " ".repeat(lineWidth);
  const ls = lines(text);
  const result = [];
  for (let i = firstLine; i <= lastLine; ++i) {
    const numberStr = `${pad}${i + 1}: `.slice(-(lineWidth + 2));
    const lineStr = ls[i];
    result.push({
      lineNumber: i,
      content: numberStr + quotedStringColor(lineStr),
      rawLine: ls[i]
    });
  }
  return {
    prefixWidth: lineWidth + 2,
    lines: result
  };
}
function editDistance(w1, w2) {
  const cost = (c) => {
    if ("_-".indexOf(c) !== -1) {
      return 1;
    }
    return 10;
  };
  const cost2 = (c1, c2) => {
    if (c1 === c2) {
      return 0;
    }
    if ("_-".indexOf(c1) !== -1 && "_-".indexOf(c2) !== -1) {
      return 1;
    }
    if (c1.toLocaleLowerCase() === c2.toLocaleLowerCase()) {
      return 1;
    }
    const cc1 = c1.charCodeAt(0);
    const cc2 = c2.charCodeAt(0);
    if (cc1 >= 48 && cc1 <= 57 && cc2 >= 48 && cc2 <= 57) {
      return 1;
    }
    return 10;
  };
  const s1 = w1.length + 1;
  const s2 = w2.length + 1;
  const v = new Int32Array(s1 * s2);
  for (let i = 0; i < s1; ++i) {
    for (let j = 0; j < s2; ++j) {
      if (i === 0 && j === 0) {
        continue;
      } else if (i === 0) {
        v[i * s2 + j] = v[i * s2 + (j - 1)] + cost(w2[j - 1]);
      } else if (j === 0) {
        v[i * s2 + j] = v[(i - 1) * s2 + j] + cost(w1[i - 1]);
      } else {
        v[i * s2 + j] = Math.min(
          v[(i - 1) * s2 + (j - 1)] + cost2(w1[i - 1], w2[j - 1]),
          v[i * s2 + (j - 1)] + cost(w2[j - 1]),
          v[(i - 1) * s2 + j] + cost(w1[i - 1])
        );
      }
    }
  }
  return v[(w1.length + 1) * (w2.length + 1) - 1];
}
function detectCaseConvention(key) {
  if (key.toLocaleLowerCase() !== key) {
    return "capitalizationCase";
  }
  if (key.indexOf("_") !== -1) {
    return "underscore_case";
  }
  if (key.indexOf("-") !== -1) {
    return "dash-case";
  }
  return void 0;
}
function resolveCaseConventionRegex(keys, conventions) {
  if (conventions !== void 0) {
    if (conventions.length === 0) {
      throw new Error(
        "Internal Error: resolveCaseConventionRegex requires nonempty `conventions`"
      );
    }
    return {
      pattern: conventions.map((c) => `(${c})`).join("|"),
      list: conventions
    };
  }
  const disallowedNearMisses = [];
  const foundConventions = /* @__PURE__ */ new Set();
  for (const key of keys) {
    const found = detectCaseConvention(key);
    if (found) {
      foundConventions.add(found);
    }
    switch (found) {
      case "capitalizationCase":
        disallowedNearMisses.push(toUnderscoreCase(key), toDashCase(key));
        break;
      case "dash-case":
        disallowedNearMisses.push(
          toUnderscoreCase(key),
          toCapitalizationCase(key)
        );
        break;
      case "underscore_case":
        disallowedNearMisses.push(
          toDashCase(key),
          toCapitalizationCase(key)
        );
        break;
    }
  }
  if (foundConventions.size === 0) {
    return {
      pattern: void 0,
      list: []
    };
  }
  return {
    pattern: `^(?!(${disallowedNearMisses.join("|")}))`,
    list: Array.from(foundConventions)
  };
}
function toDashCase(str2) {
  return toUnderscoreCase(str2).replace(/_/g, "-");
}
function toUnderscoreCase(str2) {
  return str2.replace(
    /([A-Z]+)/g,
    (_match, p1) => `-${p1}`
  ).replace(/-/g, "_").split("_").filter((x) => x.length).join("_").toLocaleLowerCase();
}
function toCapitalizationCase(str2) {
  return toUnderscoreCase(str2).replace(
    /_(.)/g,
    (_match, p1) => p1.toLocaleUpperCase()
  );
}

// ../ranged-text.ts
function matchAll2(str2, regex) {
  let match;
  regex = new RegExp(regex);
  const result = [];
  while ((match = regex.exec(str2)) != null) {
    result.push(match);
  }
  return result;
}
function rangedLines(text, includeNewLines = false) {
  const regex = /\r?\n/g;
  const result = [];
  let startOffset = 0;
  if (!includeNewLines) {
    for (const r of matchAll2(text, regex)) {
      result.push({
        substring: text.substring(startOffset, r.index),
        range: {
          start: startOffset,
          end: r.index
        }
      });
      startOffset = r.index + r[0].length;
    }
    result.push({
      substring: text.substring(startOffset, text.length),
      range: {
        start: startOffset,
        end: text.length
      }
    });
    return result;
  } else {
    const matches = matchAll2(text, regex);
    let prevOffset = 0;
    for (const r of matches) {
      const stringEnd = r.index + r[0].length;
      result.push({
        substring: text.substring(prevOffset, stringEnd),
        range: {
          start: prevOffset,
          end: stringEnd
        }
      });
      prevOffset = stringEnd;
    }
    result.push({
      substring: text.substring(prevOffset, text.length),
      range: {
        start: prevOffset,
        end: text.length
      }
    });
    return result;
  }
}

// ../mapped-text.ts
function mappedSubstring(source, start, end) {
  if (typeof source === "string") {
    source = asMappedString(source);
  }
  const value = source.value.substring(start, end);
  const mappedSource2 = source;
  return {
    value,
    map: (index, closest) => {
      if (closest) {
        index = Math.max(0, Math.min(value.length, index - 1));
      }
      if (index === 0 && index === value.length) {
        return mappedSource2.map(index + start, closest);
      }
      if (index < 0 || index >= value.length) {
        return void 0;
      }
      return mappedSource2.map(index + start, closest);
    }
  };
}
function mappedString(source, pieces, fileName) {
  if (typeof source === "string") {
    source = asMappedString(source, fileName);
  }
  const mappedPieces = pieces.map((piece) => {
    if (typeof piece === "string") {
      return asMappedString(piece);
    } else if (piece.value !== void 0) {
      return piece;
    } else {
      const { start, end } = piece;
      return mappedSubstring(source, start, end);
    }
  });
  return mappedConcat(mappedPieces);
}
function asMappedString(str2, fileName) {
  if (typeof str2 === "string") {
    return {
      value: str2,
      fileName,
      map: function(index, closest) {
        if (closest) {
          index = Math.min(str2.length - 1, Math.max(0, index));
        }
        if (index < 0 || index >= str2.length) {
          return void 0;
        }
        return {
          index,
          originalString: this
        };
      }
    };
  } else if (fileName !== void 0) {
    throw new Error(
      "Internal error: can't change the fileName of an existing MappedString"
    );
  } else {
    return str2;
  }
}
function mappedConcat(strings) {
  if (strings.length === 0) {
    return {
      value: "",
      map: (_index, _closest) => void 0
    };
  }
  if (strings.every((s) => typeof s === "string")) {
    return asMappedString(strings.join(""));
  }
  const mappedStrings = strings.map((s) => {
    if (typeof s === "string") {
      return asMappedString(s);
    } else
      return s;
  });
  let currentOffset = 0;
  const offsets = [0];
  for (const s of mappedStrings) {
    currentOffset += s.value.length;
    offsets.push(currentOffset);
  }
  const value = mappedStrings.map((s) => s.value).join("");
  return {
    value,
    map: (offset, closest) => {
      if (closest) {
        offset = Math.max(0, Math.min(offset, value.length - 1));
      }
      if (offset === 0 && offset == value.length && mappedStrings.length) {
        return mappedStrings[0].map(0, closest);
      }
      if (offset < 0 || offset >= value.length) {
        return void 0;
      }
      const ix = glb(offsets, offset);
      const v = mappedStrings[ix];
      return v.map(offset - offsets[ix]);
    }
  };
}
function mappedIndexToLineCol(eitherText) {
  const text = asMappedString(eitherText);
  return function(offset) {
    const mapResult = text.map(offset, true);
    if (mapResult === void 0) {
      throw new Error("Internal Error: bad offset in mappedIndexRowCol");
    }
    const { index, originalString } = mapResult;
    return indexToLineCol(originalString.value)(index);
  };
}
function mappedLines(str2, keepNewLines = false) {
  const lines2 = rangedLines(str2.value, keepNewLines);
  return lines2.map((v) => mappedString(str2, [v.range]));
}

// parsing.ts
var _parser;
function getTreeSitterSync() {
  if (_parser === void 0) {
    throw new Error("tree-sitter uninitialized");
  }
  return _parser;
}
async function getTreeSitter() {
  if (_parser) {
    return _parser;
  }
  let Parser;
  try {
    Parser = self.TreeSitter;
  } catch (_e) {
    Parser = globalThis.TreeSitter;
  }
  await Parser.init();
  _parser = new Parser();
  const treeSitterYamlJson = await Promise.resolve().then(() => __toESM(require_tree_sitter_yaml()));
  const YAML = await Parser.Language.load(
    new Uint8Array(treeSitterYamlJson.data)
  );
  _parser.setLanguage(YAML);
  return _parser;
}
function* attemptParsesAtLine(context, parser) {
  const {
    position
  } = context;
  const code2 = asMappedString(context.code);
  try {
    const tree = parser.parse(code2.value);
    if (tree.rootNode.type !== "ERROR") {
      yield {
        parse: tree,
        code: code2,
        deletions: 0
      };
    }
  } catch (_e) {
    return;
  }
  const codeLines = rangedLines(code2.value, true);
  if (position.row >= codeLines.length || position.row < 0) {
    return;
  }
  const currentLine = codeLines[position.row].substring;
  let currentColumn = position.column;
  let deletions = 0;
  const locF = lineColToIndex(code2.value);
  while (currentColumn > 0) {
    currentColumn--;
    deletions++;
    const chunks = [];
    if (position.row > 0) {
      chunks.push({
        start: 0,
        end: codeLines[position.row - 1].range.end
      });
    }
    if (position.column > deletions) {
      chunks.push({
        start: locF({ line: position.row, column: 0 }),
        end: locF({ line: position.row, column: position.column - deletions })
      });
    }
    if (position.row + 1 < codeLines.length) {
      chunks.push({
        start: locF({ line: position.row, column: currentLine.length - 1 }),
        end: locF({ line: position.row + 1, column: 0 })
      });
      chunks.push({
        start: codeLines[position.row + 1].range.start,
        end: codeLines[codeLines.length - 1].range.end
      });
    }
    const newCode = mappedString(code2, chunks);
    const tree = parser.parse(newCode.value);
    if (tree.rootNode.type !== "ERROR") {
      yield {
        parse: tree,
        code: newCode,
        deletions
      };
    }
  }
}
function getIndent(l) {
  return l.length - l.trimStart().length;
}
function getYamlPredecessors(code2, row) {
  const yamlIndentTree = getYamlIndentTree(code2).predecessor;
  const result = [];
  while (row !== void 0 && row !== -1 && row >= 0 && row < yamlIndentTree.length) {
    result.push(row);
    row = yamlIndentTree[row];
  }
  return result;
}
function getYamlIndentTree(code2) {
  const ls = lines(code2);
  const predecessor = [];
  const indents = [];
  let indentation = -1;
  let prevPredecessor = -1;
  for (let i = 0; i < ls.length; ++i) {
    const line = ls[i];
    const lineIndent = getIndent(line);
    indents.push(lineIndent);
    if (lineIndent > indentation) {
      predecessor[i] = prevPredecessor;
      prevPredecessor = i;
      indentation = lineIndent;
    } else if (line.trim().length === 0) {
      predecessor[i] = predecessor[prevPredecessor];
    } else if (lineIndent === indentation) {
      predecessor[i] = predecessor[prevPredecessor];
      prevPredecessor = i;
    } else if (lineIndent < indentation) {
      let v = prevPredecessor;
      while (v >= 0 && indents[v] >= lineIndent) {
        v = predecessor[v];
      }
      predecessor[i] = v;
      prevPredecessor = i;
      indentation = lineIndent;
    } else {
      throw new Error("Internal error, should never have arrived here");
    }
  }
  return {
    predecessor,
    indentation: indents
  };
}
function locateFromIndentation(context) {
  const {
    line,
    code: mappedCode,
    position
  } = context;
  const code2 = asMappedString(mappedCode).value;
  const { predecessor, indentation } = getYamlIndentTree(code2);
  const ls = lines(code2);
  let lineNo = position.row;
  const path = [];
  const lineIndent = getIndent(line);
  while (lineNo !== -1) {
    const trimmed = ls[lineNo].trim();
    if (trimmed.length === 0) {
      let prev = lineNo;
      while (prev >= 0 && ls[prev].trim().length === 0) {
        prev--;
      }
      if (prev === -1) {
        break;
      }
      const prevIndent = getIndent(ls[prev]);
      if (prevIndent < lineIndent) {
        lineNo = prev;
        continue;
      } else if (prevIndent > lineIndent) {
        do {
          prev--;
        } while (prev >= 0 && (ls[prev].trim().length === 0 || getIndent(ls[prev]) >= lineIndent));
        lineNo = prev;
        continue;
      }
    }
    if (lineIndent >= indentation[lineNo]) {
      if (trimmed.startsWith("-")) {
        path.push(0);
      } else if (trimmed.endsWith(":")) {
        path.push(trimmed.substring(0, trimmed.length - 1));
      }
    }
    lineNo = predecessor[lineNo];
  }
  path.reverse();
  return path;
}

// ../external/js-yaml.js
function isNothing(subject) {
  return typeof subject === "undefined" || subject === null;
}
function isObject(subject) {
  return typeof subject === "object" && subject !== null;
}
function toArray(sequence) {
  if (Array.isArray(sequence))
    return sequence;
  else if (isNothing(sequence))
    return [];
  return [sequence];
}
function extend(target, source) {
  var index, length, key, sourceKeys;
  if (source) {
    sourceKeys = Object.keys(source);
    for (index = 0, length = sourceKeys.length; index < length; index += 1) {
      key = sourceKeys[index];
      target[key] = source[key];
    }
  }
  return target;
}
function repeat(string, count) {
  var result = "", cycle;
  for (cycle = 0; cycle < count; cycle += 1) {
    result += string;
  }
  return result;
}
function isNegativeZero(number) {
  return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;
}
var isNothing_1 = isNothing;
var isObject_1 = isObject;
var toArray_1 = toArray;
var repeat_1 = repeat;
var isNegativeZero_1 = isNegativeZero;
var extend_1 = extend;
var common = {
  isNothing: isNothing_1,
  isObject: isObject_1,
  toArray: toArray_1,
  repeat: repeat_1,
  isNegativeZero: isNegativeZero_1,
  extend: extend_1
};
function formatError(exception2, compact) {
  var where = "", message = exception2.reason || "(unknown reason)";
  if (!exception2.mark)
    return message;
  if (exception2.mark.name) {
    where += 'in "' + exception2.mark.name + '" ';
  }
  where += "(" + (exception2.mark.line + 1) + ":" + (exception2.mark.column + 1) + ")";
  if (!compact && exception2.mark.snippet) {
    where += "\n\n" + exception2.mark.snippet;
  }
  return message + " " + where;
}
function YAMLException$1(reason, mark) {
  Error.call(this);
  this.name = "YAMLException";
  this.reason = reason;
  this.mark = mark;
  this.message = formatError(this, false);
  if (Error.captureStackTrace) {
    Error.captureStackTrace(this, this.constructor);
  } else {
    this.stack = new Error().stack || "";
  }
}
YAMLException$1.prototype = Object.create(Error.prototype);
YAMLException$1.prototype.constructor = YAMLException$1;
YAMLException$1.prototype.toString = function toString(compact) {
  return this.name + ": " + formatError(this, compact);
};
var exception = YAMLException$1;
function getLine(buffer, lineStart, lineEnd, position, maxLineLength) {
  var head = "";
  var tail = "";
  var maxHalfLength = Math.floor(maxLineLength / 2) - 1;
  if (position - lineStart > maxHalfLength) {
    head = " ... ";
    lineStart = position - maxHalfLength + head.length;
  }
  if (lineEnd - position > maxHalfLength) {
    tail = " ...";
    lineEnd = position + maxHalfLength - tail.length;
  }
  return {
    str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, "\u2192") + tail,
    pos: position - lineStart + head.length
  };
}
function padStart(string, max) {
  return common.repeat(" ", max - string.length) + string;
}
function makeSnippet(mark, options) {
  options = Object.create(options || null);
  if (!mark.buffer)
    return null;
  if (!options.maxLength)
    options.maxLength = 79;
  if (typeof options.indent !== "number")
    options.indent = 1;
  if (typeof options.linesBefore !== "number")
    options.linesBefore = 3;
  if (typeof options.linesAfter !== "number")
    options.linesAfter = 2;
  var re = /\r?\n|\r|\0/g;
  var lineStarts = [0];
  var lineEnds = [];
  var match;
  var foundLineNo = -1;
  while (match = re.exec(mark.buffer)) {
    lineEnds.push(match.index);
    lineStarts.push(match.index + match[0].length);
    if (mark.position <= match.index && foundLineNo < 0) {
      foundLineNo = lineStarts.length - 2;
    }
  }
  if (foundLineNo < 0)
    foundLineNo = lineStarts.length - 1;
  var result = "", i, line;
  var lineNoLength = Math.min(
    mark.line + options.linesAfter,
    lineEnds.length
  ).toString().length;
  var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);
  for (i = 1; i <= options.linesBefore; i++) {
    if (foundLineNo - i < 0)
      break;
    line = getLine(
      mark.buffer,
      lineStarts[foundLineNo - i],
      lineEnds[foundLineNo - i],
      mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),
      maxLineLength
    );
    result = common.repeat(" ", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + " | " + line.str + "\n" + result;
  }
  line = getLine(
    mark.buffer,
    lineStarts[foundLineNo],
    lineEnds[foundLineNo],
    mark.position,
    maxLineLength
  );
  result += common.repeat(" ", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + " | " + line.str + "\n";
  result += common.repeat("-", options.indent + lineNoLength + 3 + line.pos) + "^\n";
  for (i = 1; i <= options.linesAfter; i++) {
    if (foundLineNo + i >= lineEnds.length)
      break;
    line = getLine(
      mark.buffer,
      lineStarts[foundLineNo + i],
      lineEnds[foundLineNo + i],
      mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),
      maxLineLength
    );
    result += common.repeat(" ", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + " | " + line.str + "\n";
  }
  return result.replace(/\n$/, "");
}
var snippet = makeSnippet;
var TYPE_CONSTRUCTOR_OPTIONS = [
  "kind",
  "multi",
  "resolve",
  "construct",
  "instanceOf",
  "predicate",
  "represent",
  "representName",
  "defaultStyle",
  "styleAliases"
];
var YAML_NODE_KINDS = ["scalar", "sequence", "mapping"];
function compileStyleAliases(map2) {
  var result = {};
  if (map2 !== null) {
    Object.keys(map2).forEach(function(style) {
      map2[style].forEach(function(alias) {
        result[String(alias)] = style;
      });
    });
  }
  return result;
}
function Type$1(tag, options) {
  options = options || {};
  Object.keys(options).forEach(function(name) {
    if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {
      throw new exception(
        'Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'
      );
    }
  });
  this.options = options;
  this.tag = tag;
  this.kind = options["kind"] || null;
  this.resolve = options["resolve"] || function() {
    return true;
  };
  this.construct = options["construct"] || function(data) {
    return data;
  };
  this.instanceOf = options["instanceOf"] || null;
  this.predicate = options["predicate"] || null;
  this.represent = options["represent"] || null;
  this.representName = options["representName"] || null;
  this.defaultStyle = options["defaultStyle"] || null;
  this.multi = options["multi"] || false;
  this.styleAliases = compileStyleAliases(options["styleAliases"] || null);
  if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {
    throw new exception(
      'Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'
    );
  }
}
var type = Type$1;
function compileList(schema2, name) {
  var result = [];
  schema2[name].forEach(function(currentType) {
    var newIndex = result.length;
    result.forEach(function(previousType, previousIndex) {
      if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {
        newIndex = previousIndex;
      }
    });
    result[newIndex] = currentType;
  });
  return result;
}
function compileMap() {
  var result = {
    scalar: {},
    sequence: {},
    mapping: {},
    fallback: {},
    multi: {
      scalar: [],
      sequence: [],
      mapping: [],
      fallback: []
    }
  }, index, length;
  function collectType(type2) {
    if (type2.multi) {
      result.multi[type2.kind].push(type2);
      result.multi["fallback"].push(type2);
    } else {
      result[type2.kind][type2.tag] = result["fallback"][type2.tag] = type2;
    }
  }
  for (index = 0, length = arguments.length; index < length; index += 1) {
    arguments[index].forEach(collectType);
  }
  return result;
}
function Schema$1(definition) {
  return this.extend(definition);
}
Schema$1.prototype.extend = function extend2(definition) {
  var implicit = [];
  var explicit = [];
  if (definition instanceof type) {
    explicit.push(definition);
  } else if (Array.isArray(definition)) {
    explicit = explicit.concat(definition);
  } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {
    if (definition.implicit)
      implicit = implicit.concat(definition.implicit);
    if (definition.explicit)
      explicit = explicit.concat(definition.explicit);
  } else {
    throw new exception(
      "Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })"
    );
  }
  implicit.forEach(function(type$1) {
    if (!(type$1 instanceof type)) {
      throw new exception(
        "Specified list of YAML types (or a single Type object) contains a non-Type object."
      );
    }
    if (type$1.loadKind && type$1.loadKind !== "scalar") {
      throw new exception(
        "There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported."
      );
    }
    if (type$1.multi) {
      throw new exception(
        "There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit."
      );
    }
  });
  explicit.forEach(function(type$1) {
    if (!(type$1 instanceof type)) {
      throw new exception(
        "Specified list of YAML types (or a single Type object) contains a non-Type object."
      );
    }
  });
  var result = Object.create(Schema$1.prototype);
  result.implicit = (this.implicit || []).concat(implicit);
  result.explicit = (this.explicit || []).concat(explicit);
  result.compiledImplicit = compileList(result, "implicit");
  result.compiledExplicit = compileList(result, "explicit");
  result.compiledTypeMap = compileMap(
    result.compiledImplicit,
    result.compiledExplicit
  );
  return result;
};
var schema = Schema$1;
var str = new type("tag:yaml.org,2002:str", {
  kind: "scalar",
  construct: function(data) {
    return data !== null ? data : "";
  }
});
var seq = new type("tag:yaml.org,2002:seq", {
  kind: "sequence",
  construct: function(data) {
    return data !== null ? data : [];
  }
});
var map = new type("tag:yaml.org,2002:map", {
  kind: "mapping",
  construct: function(data) {
    return data !== null ? data : {};
  }
});
var failsafe = new schema({
  explicit: [str, seq, map]
});
function resolveYamlNull(data) {
  if (data === null)
    return true;
  var max = data.length;
  return max === 1 && data === "~" || max === 4 && (data === "null" || data === "Null" || data === "NULL");
}
function constructYamlNull() {
  return null;
}
function isNull(object) {
  return object === null;
}
var _null = new type("tag:yaml.org,2002:null", {
  kind: "scalar",
  resolve: resolveYamlNull,
  construct: constructYamlNull,
  predicate: isNull,
  represent: {
    canonical: function() {
      return "~";
    },
    lowercase: function() {
      return "null";
    },
    uppercase: function() {
      return "NULL";
    },
    camelcase: function() {
      return "Null";
    },
    empty: function() {
      return "";
    }
  },
  defaultStyle: "lowercase"
});
function resolveYamlBoolean(data) {
  if (data === null)
    return false;
  var max = data.length;
  return max === 4 && (data === "true" || data === "True" || data === "TRUE") || max === 5 && (data === "false" || data === "False" || data === "FALSE");
}
function constructYamlBoolean(data) {
  return data === "true" || data === "True" || data === "TRUE";
}
function isBoolean(object) {
  return Object.prototype.toString.call(object) === "[object Boolean]";
}
var bool = new type("tag:yaml.org,2002:bool", {
  kind: "scalar",
  resolve: resolveYamlBoolean,
  construct: constructYamlBoolean,
  predicate: isBoolean,
  represent: {
    lowercase: function(object) {
      return object ? "true" : "false";
    },
    uppercase: function(object) {
      return object ? "TRUE" : "FALSE";
    },
    camelcase: function(object) {
      return object ? "True" : "False";
    }
  },
  defaultStyle: "lowercase"
});
function isHexCode(c) {
  return 48 <= c && c <= 57 || 65 <= c && c <= 70 || 97 <= c && c <= 102;
}
function isOctCode(c) {
  return 48 <= c && c <= 55;
}
function isDecCode(c) {
  return 48 <= c && c <= 57;
}
function resolveYamlInteger(data) {
  if (data === null)
    return false;
  var max = data.length, index = 0, hasDigits = false, ch;
  if (!max)
    return false;
  ch = data[index];
  if (ch === "-" || ch === "+") {
    ch = data[++index];
  }
  if (ch === "0") {
    if (index + 1 === max)
      return true;
    ch = data[++index];
    if (ch === "b") {
      index++;
      for (; index < max; index++) {
        ch = data[index];
        if (ch === "_")
          continue;
        if (ch !== "0" && ch !== "1")
          return false;
        hasDigits = true;
      }
      return hasDigits && ch !== "_";
    }
    if (ch === "x") {
      index++;
      for (; index < max; index++) {
        ch = data[index];
        if (ch === "_")
          continue;
        if (!isHexCode(data.charCodeAt(index)))
          return false;
        hasDigits = true;
      }
      return hasDigits && ch !== "_";
    }
    if (ch === "o") {
      index++;
      for (; index < max; index++) {
        ch = data[index];
        if (ch === "_")
          continue;
        if (!isOctCode(data.charCodeAt(index)))
          return false;
        hasDigits = true;
      }
      return hasDigits && ch !== "_";
    }
  }
  if (ch === "_")
    return false;
  for (; index < max; index++) {
    ch = data[index];
    if (ch === "_")
      continue;
    if (!isDecCode(data.charCodeAt(index))) {
      return false;
    }
    hasDigits = true;
  }
  if (!hasDigits || ch === "_")
    return false;
  return true;
}
function constructYamlInteger(data) {
  var value = data, sign = 1, ch;
  if (value.indexOf("_") !== -1) {
    value = value.replace(/_/g, "");
  }
  ch = value[0];
  if (ch === "-" || ch === "+") {
    if (ch === "-")
      sign = -1;
    value = value.slice(1);
    ch = value[0];
  }
  if (value === "0")
    return 0;
  if (ch === "0") {
    if (value[1] === "b")
      return sign * parseInt(value.slice(2), 2);
    if (value[1] === "x")
      return sign * parseInt(value.slice(2), 16);
    if (value[1] === "o")
      return sign * parseInt(value.slice(2), 8);
  }
  return sign * parseInt(value, 10);
}
function isInteger(object) {
  return Object.prototype.toString.call(object) === "[object Number]" && object % 1 === 0 && !common.isNegativeZero(object);
}
var int = new type("tag:yaml.org,2002:int", {
  kind: "scalar",
  resolve: resolveYamlInteger,
  construct: constructYamlInteger,
  predicate: isInteger,
  represent: {
    binary: function(obj) {
      return obj >= 0 ? "0b" + obj.toString(2) : "-0b" + obj.toString(2).slice(1);
    },
    octal: function(obj) {
      return obj >= 0 ? "0o" + obj.toString(8) : "-0o" + obj.toString(8).slice(1);
    },
    decimal: function(obj) {
      return obj.toString(10);
    },
    hexadecimal: function(obj) {
      return obj >= 0 ? "0x" + obj.toString(16).toUpperCase() : "-0x" + obj.toString(16).toUpperCase().slice(1);
    }
  },
  defaultStyle: "decimal",
  styleAliases: {
    binary: [2, "bin"],
    octal: [8, "oct"],
    decimal: [10, "dec"],
    hexadecimal: [16, "hex"]
  }
});
var YAML_FLOAT_PATTERN = new RegExp(
  "^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"
);
function resolveYamlFloat(data) {
  if (data === null)
    return false;
  if (!YAML_FLOAT_PATTERN.test(data) || data[data.length - 1] === "_") {
    return false;
  }
  return true;
}
function constructYamlFloat(data) {
  var value, sign;
  value = data.replace(/_/g, "").toLowerCase();
  sign = value[0] === "-" ? -1 : 1;
  if ("+-".indexOf(value[0]) >= 0) {
    value = value.slice(1);
  }
  if (value === ".inf") {
    return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
  } else if (value === ".nan") {
    return NaN;
  }
  return sign * parseFloat(value, 10);
}
var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
function representYamlFloat(object, style) {
  var res;
  if (isNaN(object)) {
    switch (style) {
      case "lowercase":
        return ".nan";
      case "uppercase":
        return ".NAN";
      case "camelcase":
        return ".NaN";
    }
  } else if (Number.POSITIVE_INFINITY === object) {
    switch (style) {
      case "lowercase":
        return ".inf";
      case "uppercase":
        return ".INF";
      case "camelcase":
        return ".Inf";
    }
  } else if (Number.NEGATIVE_INFINITY === object) {
    switch (style) {
      case "lowercase":
        return "-.inf";
      case "uppercase":
        return "-.INF";
      case "camelcase":
        return "-.Inf";
    }
  } else if (common.isNegativeZero(object)) {
    return "-0.0";
  }
  res = object.toString(10);
  return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res;
}
function isFloat(object) {
  return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 !== 0 || common.isNegativeZero(object));
}
var float = new type("tag:yaml.org,2002:float", {
  kind: "scalar",
  resolve: resolveYamlFloat,
  construct: constructYamlFloat,
  predicate: isFloat,
  represent: representYamlFloat,
  defaultStyle: "lowercase"
});
var json = failsafe.extend({
  implicit: [_null, bool, int, float]
});
var core = json;
var YAML_DATE_REGEXP = new RegExp(
  "^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"
);
var YAML_TIMESTAMP_REGEXP = new RegExp(
  "^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"
);
function resolveYamlTimestamp(data) {
  if (data === null)
    return false;
  if (YAML_DATE_REGEXP.exec(data) !== null)
    return true;
  if (YAML_TIMESTAMP_REGEXP.exec(data) !== null)
    return true;
  return false;
}
function constructYamlTimestamp(data) {
  var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;
  match = YAML_DATE_REGEXP.exec(data);
  if (match === null)
    match = YAML_TIMESTAMP_REGEXP.exec(data);
  if (match === null)
    throw new Error("Date resolve error");
  year = +match[1];
  month = +match[2] - 1;
  day = +match[3];
  if (!match[4]) {
    return new Date(Date.UTC(year, month, day));
  }
  hour = +match[4];
  minute = +match[5];
  second = +match[6];
  if (match[7]) {
    fraction = match[7].slice(0, 3);
    while (fraction.length < 3) {
      fraction += "0";
    }
    fraction = +fraction;
  }
  if (match[9]) {
    tz_hour = +match[10];
    tz_minute = +(match[11] || 0);
    delta = (tz_hour * 60 + tz_minute) * 6e4;
    if (match[9] === "-")
      delta = -delta;
  }
  date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
  if (delta)
    date.setTime(date.getTime() - delta);
  return date;
}
function representYamlTimestamp(object) {
  return object.toISOString();
}
var timestamp = new type("tag:yaml.org,2002:timestamp", {
  kind: "scalar",
  resolve: resolveYamlTimestamp,
  construct: constructYamlTimestamp,
  instanceOf: Date,
  represent: representYamlTimestamp
});
function resolveYamlMerge(data) {
  return data === "<<" || data === null;
}
var merge = new type("tag:yaml.org,2002:merge", {
  kind: "scalar",
  resolve: resolveYamlMerge
});
var BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";
function resolveYamlBinary(data) {
  if (data === null)
    return false;
  var code2, idx, bitlen = 0, max = data.length, map2 = BASE64_MAP;
  for (idx = 0; idx < max; idx++) {
    code2 = map2.indexOf(data.charAt(idx));
    if (code2 > 64)
      continue;
    if (code2 < 0)
      return false;
    bitlen += 6;
  }
  return bitlen % 8 === 0;
}
function constructYamlBinary(data) {
  var idx, tailbits, input = data.replace(/[\r\n=]/g, ""), max = input.length, map2 = BASE64_MAP, bits = 0, result = [];
  for (idx = 0; idx < max; idx++) {
    if (idx % 4 === 0 && idx) {
      result.push(bits >> 16 & 255);
      result.push(bits >> 8 & 255);
      result.push(bits & 255);
    }
    bits = bits << 6 | map2.indexOf(input.charAt(idx));
  }
  tailbits = max % 4 * 6;
  if (tailbits === 0) {
    result.push(bits >> 16 & 255);
    result.push(bits >> 8 & 255);
    result.push(bits & 255);
  } else if (tailbits === 18) {
    result.push(bits >> 10 & 255);
    result.push(bits >> 2 & 255);
  } else if (tailbits === 12) {
    result.push(bits >> 4 & 255);
  }
  return new Uint8Array(result);
}
function representYamlBinary(object) {
  var result = "", bits = 0, idx, tail, max = object.length, map2 = BASE64_MAP;
  for (idx = 0; idx < max; idx++) {
    if (idx % 3 === 0 && idx) {
      result += map2[bits >> 18 & 63];
      result += map2[bits >> 12 & 63];
      result += map2[bits >> 6 & 63];
      result += map2[bits & 63];
    }
    bits = (bits << 8) + object[idx];
  }
  tail = max % 3;
  if (tail === 0) {
    result += map2[bits >> 18 & 63];
    result += map2[bits >> 12 & 63];
    result += map2[bits >> 6 & 63];
    result += map2[bits & 63];
  } else if (tail === 2) {
    result += map2[bits >> 10 & 63];
    result += map2[bits >> 4 & 63];
    result += map2[bits << 2 & 63];
    result += map2[64];
  } else if (tail === 1) {
    result += map2[bits >> 2 & 63];
    result += map2[bits << 4 & 63];
    result += map2[64];
    result += map2[64];
  }
  return result;
}
function isBinary(obj) {
  return Object.prototype.toString.call(obj) === "[object Uint8Array]";
}
var binary = new type("tag:yaml.org,2002:binary", {
  kind: "scalar",
  resolve: resolveYamlBinary,
  construct: constructYamlBinary,
  predicate: isBinary,
  represent: representYamlBinary
});
var _hasOwnProperty$3 = Object.prototype.hasOwnProperty;
var _toString$2 = Object.prototype.toString;
function resolveYamlOmap(data) {
  if (data === null)
    return true;
  var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;
  for (index = 0, length = object.length; index < length; index += 1) {
    pair = object[index];
    pairHasKey = false;
    if (_toString$2.call(pair) !== "[object Object]")
      return false;
    for (pairKey in pair) {
      if (_hasOwnProperty$3.call(pair, pairKey)) {
        if (!pairHasKey)
          pairHasKey = true;
        else
          return false;
      }
    }
    if (!pairHasKey)
      return false;
    if (objectKeys.indexOf(pairKey) === -1)
      objectKeys.push(pairKey);
    else
      return false;
  }
  return true;
}
function constructYamlOmap(data) {
  return data !== null ? data : [];
}
var omap = new type("tag:yaml.org,2002:omap", {
  kind: "sequence",
  resolve: resolveYamlOmap,
  construct: constructYamlOmap
});
var _toString$1 = Object.prototype.toString;
function resolveYamlPairs(data) {
  if (data === null)
    return true;
  var index, length, pair, keys, result, object = data;
  result = new Array(object.length);
  for (index = 0, length = object.length; index < length; index += 1) {
    pair = object[index];
    if (_toString$1.call(pair) !== "[object Object]")
      return false;
    keys = Object.keys(pair);
    if (keys.length !== 1)
      return false;
    result[index] = [keys[0], pair[keys[0]]];
  }
  return true;
}
function constructYamlPairs(data) {
  if (data === null)
    return [];
  var index, length, pair, keys, result, object = data;
  result = new Array(object.length);
  for (index = 0, length = object.length; index < length; index += 1) {
    pair = object[index];
    keys = Object.keys(pair);
    result[index] = [keys[0], pair[keys[0]]];
  }
  return result;
}
var pairs = new type("tag:yaml.org,2002:pairs", {
  kind: "sequence",
  resolve: resolveYamlPairs,
  construct: constructYamlPairs
});
var _hasOwnProperty$2 = Object.prototype.hasOwnProperty;
function resolveYamlSet(data) {
  if (data === null)
    return true;
  var key, object = data;
  for (key in object) {
    if (_hasOwnProperty$2.call(object, key)) {
      if (object[key] !== null)
        return false;
    }
  }
  return true;
}
function constructYamlSet(data) {
  return data !== null ? data : {};
}
var set = new type("tag:yaml.org,2002:set", {
  kind: "mapping",
  resolve: resolveYamlSet,
  construct: constructYamlSet
});
var _default = core.extend({
  implicit: [timestamp, merge],
  explicit: [binary, omap, pairs, set]
});
var _hasOwnProperty$1 = Object.prototype.hasOwnProperty;
var CONTEXT_FLOW_IN = 1;
var CONTEXT_FLOW_OUT = 2;
var CONTEXT_BLOCK_IN = 3;
var CONTEXT_BLOCK_OUT = 4;
var CHOMPING_CLIP = 1;
var CHOMPING_STRIP = 2;
var CHOMPING_KEEP = 3;
var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/;
var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
function _class(obj) {
  return Object.prototype.toString.call(obj);
}
function is_EOL(c) {
  return c === 10 || c === 13;
}
function is_WHITE_SPACE(c) {
  return c === 9 || c === 32;
}
function is_WS_OR_EOL(c) {
  return c === 9 || c === 32 || c === 10 || c === 13;
}
function is_FLOW_INDICATOR(c) {
  return c === 44 || c === 91 || c === 93 || c === 123 || c === 125;
}
function fromHexCode(c) {
  var lc;
  if (48 <= c && c <= 57) {
    return c - 48;
  }
  lc = c | 32;
  if (97 <= lc && lc <= 102) {
    return lc - 97 + 10;
  }
  return -1;
}
function escapedHexLen(c) {
  if (c === 120) {
    return 2;
  }
  if (c === 117) {
    return 4;
  }
  if (c === 85) {
    return 8;
  }
  return 0;
}
function fromDecimalCode(c) {
  if (48 <= c && c <= 57) {
    return c - 48;
  }
  return -1;
}
function simpleEscapeSequence(c) {
  return c === 48 ? "\0" : c === 97 ? "\x07" : c === 98 ? "\b" : c === 116 ? "	" : c === 9 ? "	" : c === 110 ? "\n" : c === 118 ? "\v" : c === 102 ? "\f" : c === 114 ? "\r" : c === 101 ? "\x1B" : c === 32 ? " " : c === 34 ? '"' : c === 47 ? "/" : c === 92 ? "\\" : c === 78 ? "\x85" : c === 95 ? "\xA0" : c === 76 ? "\u2028" : c === 80 ? "\u2029" : "";
}
function charFromCodepoint(c) {
  if (c <= 65535) {
    return String.fromCharCode(c);
  }
  return String.fromCharCode(
    (c - 65536 >> 10) + 55296,
    (c - 65536 & 1023) + 56320
  );
}
var simpleEscapeCheck = new Array(256);
var simpleEscapeMap = new Array(256);
for (i = 0; i < 256; i++) {
  simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;
  simpleEscapeMap[i] = simpleEscapeSequence(i);
}
var i;
function State$1(input, options) {
  this.input = input;
  this.filename = options["filename"] || null;
  this.schema = options["schema"] || _default;
  this.onWarning = options["onWarning"] || null;
  this.legacy = options["legacy"] || false;
  this.json = options["json"] || false;
  this.listener = options["listener"] || null;
  this.implicitTypes = this.schema.compiledImplicit;
  this.typeMap = this.schema.compiledTypeMap;
  this.length = input.length;
  this.position = 0;
  this.line = 0;
  this.lineStart = 0;
  this.lineIndent = 0;
  this.firstTabInLine = -1;
  this.documents = [];
}
function generateError(state, message) {
  var mark = {
    name: state.filename,
    buffer: state.input.slice(0, -1),
    position: state.position,
    line: state.line,
    column: state.position - state.lineStart
  };
  mark.snippet = snippet(mark);
  return new exception(message, mark);
}
function throwError(state, message) {
  throw generateError(state, message);
}
function throwWarning(state, message) {
  if (state.onWarning) {
    state.onWarning.call(null, generateError(state, message));
  }
}
var directiveHandlers = {
  YAML: function handleYamlDirective(state, name, args) {
    var match, major, minor;
    if (state.version !== null) {
      throwError(state, "duplication of %YAML directive");
    }
    if (args.length !== 1) {
      throwError(state, "YAML directive accepts exactly one argument");
    }
    match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
    if (match === null) {
      throwError(state, "ill-formed argument of the YAML directive");
    }
    major = parseInt(match[1], 10);
    minor = parseInt(match[2], 10);
    if (major !== 1) {
      throwError(state, "unacceptable YAML version of the document");
    }
    state.version = args[0];
    state.checkLineBreaks = minor < 2;
    if (minor !== 1 && minor !== 2) {
      throwWarning(state, "unsupported YAML version of the document");
    }
  },
  TAG: function handleTagDirective(state, name, args) {
    var handle, prefix;
    if (args.length !== 2) {
      throwError(state, "TAG directive accepts exactly two arguments");
    }
    handle = args[0];
    prefix = args[1];
    if (!PATTERN_TAG_HANDLE.test(handle)) {
      throwError(
        state,
        "ill-formed tag handle (first argument) of the TAG directive"
      );
    }
    if (_hasOwnProperty$1.call(state.tagMap, handle)) {
      throwError(
        state,
        'there is a previously declared suffix for "' + handle + '" tag handle'
      );
    }
    if (!PATTERN_TAG_URI.test(prefix)) {
      throwError(
        state,
        "ill-formed tag prefix (second argument) of the TAG directive"
      );
    }
    try {
      prefix = decodeURIComponent(prefix);
    } catch (err) {
      throwError(state, "tag prefix is malformed: " + prefix);
    }
    state.tagMap[handle] = prefix;
  }
};
function captureSegment(state, start, end, checkJson) {
  var _position, _length, _character, _result;
  if (start < end) {
    _result = state.input.slice(start, end);
    if (checkJson) {
      for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
        _character = _result.charCodeAt(_position);
        if (!(_character === 9 || 32 <= _character && _character <= 1114111)) {
          throwError(state, "expected valid JSON character");
        }
      }
    } else if (PATTERN_NON_PRINTABLE.test(_result)) {
      throwError(state, "the stream contains non-printable characters");
    }
    state.result += _result;
  }
}
function mergeMappings(state, destination, source, overridableKeys) {
  var sourceKeys, key, index, quantity;
  if (!common.isObject(source)) {
    throwError(
      state,
      "cannot merge mappings; the provided source object is unacceptable"
    );
  }
  sourceKeys = Object.keys(source);
  for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
    key = sourceKeys[index];
    if (!_hasOwnProperty$1.call(destination, key)) {
      destination[key] = source[key];
      overridableKeys[key] = true;
    }
  }
}
function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {
  var index, quantity;
  if (Array.isArray(keyNode)) {
    keyNode = Array.prototype.slice.call(keyNode);
    for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
      if (Array.isArray(keyNode[index])) {
        throwError(state, "nested arrays are not supported inside keys");
      }
      if (typeof keyNode === "object" && _class(keyNode[index]) === "[object Object]") {
        keyNode[index] = "[object Object]";
      }
    }
  }
  if (typeof keyNode === "object" && _class(keyNode) === "[object Object]") {
    keyNode = "[object Object]";
  }
  keyNode = String(keyNode);
  if (_result === null) {
    _result = {};
  }
  if (keyTag === "tag:yaml.org,2002:merge") {
    if (Array.isArray(valueNode)) {
      for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
        mergeMappings(state, _result, valueNode[index], overridableKeys);
      }
    } else {
      mergeMappings(state, _result, valueNode, overridableKeys);
    }
  } else {
    if (!state.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {
      state.line = startLine || state.line;
      state.lineStart = startLineStart || state.lineStart;
      state.position = startPos || state.position;
      throwError(state, "duplicated mapping key");
    }
    if (keyNode === "__proto__") {
      Object.defineProperty(_result, keyNode, {
        configurable: true,
        enumerable: true,
        writable: true,
        value: valueNode
      });
    } else {
      _result[keyNode] = valueNode;
    }
    delete overridableKeys[keyNode];
  }
  return _result;
}
function readLineBreak(state) {
  var ch;
  ch = state.input.charCodeAt(state.position);
  if (ch === 10) {
    state.position++;
  } else if (ch === 13) {
    state.position++;
    if (state.input.charCodeAt(state.position) === 10) {
      state.position++;
    }
  } else {
    throwError(state, "a line break is expected");
  }
  state.line += 1;
  state.lineStart = state.position;
  state.firstTabInLine = -1;
}
function skipSeparationSpace(state, allowComments, checkIndent) {
  var lineBreaks = 0, ch = state.input.charCodeAt(state.position);
  while (ch !== 0) {
    while (is_WHITE_SPACE(ch)) {
      if (ch === 9 && state.firstTabInLine === -1) {
        state.firstTabInLine = state.position;
      }
      ch = state.input.charCodeAt(++state.position);
    }
    if (allowComments && ch === 35) {
      do {
        ch = state.input.charCodeAt(++state.position);
      } while (ch !== 10 && ch !== 13 && ch !== 0);
    }
    if (is_EOL(ch)) {
      readLineBreak(state);
      ch = state.input.charCodeAt(state.position);
      lineBreaks++;
      state.lineIndent = 0;
      while (ch === 32) {
        state.lineIndent++;
        ch = state.input.charCodeAt(++state.position);
      }
    } else {
      break;
    }
  }
  if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {
    throwWarning(state, "deficient indentation");
  }
  return lineBreaks;
}
function testDocumentSeparator(state) {
  var _position = state.position, ch;
  ch = state.input.charCodeAt(_position);
  if ((ch === 45 || ch === 46) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {
    _position += 3;
    ch = state.input.charCodeAt(_position);
    if (ch === 0 || is_WS_OR_EOL(ch)) {
      return true;
    }
  }
  return false;
}
function writeFoldedLines(state, count) {
  if (count === 1) {
    state.result += " ";
  } else if (count > 1) {
    state.result += common.repeat("\n", count - 1);
  }
}
function readPlainScalar(state, nodeIndent, withinFlowCollection) {
  var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch;
  ch = state.input.charCodeAt(state.position);
  if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) {
    return false;
  }
  if (ch === 63 || ch === 45) {
    following = state.input.charCodeAt(state.position + 1);
    if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
      return false;
    }
  }
  state.kind = "scalar";
  state.result = "";
  captureStart = captureEnd = state.position;
  hasPendingContent = false;
  while (ch !== 0) {
    if (ch === 58) {
      following = state.input.charCodeAt(state.position + 1);
      if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
        break;
      }
    } else if (ch === 35) {
      preceding = state.input.charCodeAt(state.position - 1);
      if (is_WS_OR_EOL(preceding)) {
        break;
      }
    } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {
      break;
    } else if (is_EOL(ch)) {
      _line = state.line;
      _lineStart = state.lineStart;
      _lineIndent = state.lineIndent;
      skipSeparationSpace(state, false, -1);
      if (state.lineIndent >= nodeIndent) {
        hasPendingContent = true;
        ch = state.input.charCodeAt(state.position);
        continue;
      } else {
        state.position = captureEnd;
        state.line = _line;
        state.lineStart = _lineStart;
        state.lineIndent = _lineIndent;
        break;
      }
    }
    if (hasPendingContent) {
      captureSegment(state, captureStart, captureEnd, false);
      writeFoldedLines(state, state.line - _line);
      captureStart = captureEnd = state.position;
      hasPendingContent = false;
    }
    if (!is_WHITE_SPACE(ch)) {
      captureEnd = state.position + 1;
    }
    ch = state.input.charCodeAt(++state.position);
  }
  captureSegment(state, captureStart, captureEnd, false);
  if (state.result) {
    return true;
  }
  state.kind = _kind;
  state.result = _result;
  return false;
}
function readSingleQuotedScalar(state, nodeIndent) {
  var ch, captureStart, captureEnd;
  ch = state.input.charCodeAt(state.position);
  if (ch !== 39) {
    return false;
  }
  state.kind = "scalar";
  state.result = "";
  state.position++;
  captureStart = captureEnd = state.position;
  while ((ch = state.input.charCodeAt(state.position)) !== 0) {
    if (ch === 39) {
      captureSegment(state, captureStart, state.position, true);
      ch = state.input.charCodeAt(++state.position);
      if (ch === 39) {
        captureStart = state.position;
        state.position++;
        captureEnd = state.position;
      } else {
        return true;
      }
    } else if (is_EOL(ch)) {
      captureSegment(state, captureStart, captureEnd, true);
      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
      captureStart = captureEnd = state.position;
    } else if (state.position === state.lineStart && testDocumentSeparator(state)) {
      throwError(
        state,
        "unexpected end of the document within a single quoted scalar"
      );
    } else {
      state.position++;
      captureEnd = state.position;
    }
  }
  throwError(
    state,
    "unexpected end of the stream within a single quoted scalar"
  );
}
function readDoubleQuotedScalar(state, nodeIndent) {
  var captureStart, captureEnd, hexLength, hexResult, tmp, ch;
  ch = state.input.charCodeAt(state.position);
  if (ch !== 34) {
    return false;
  }
  state.kind = "scalar";
  state.result = "";
  state.position++;
  captureStart = captureEnd = state.position;
  while ((ch = state.input.charCodeAt(state.position)) !== 0) {
    if (ch === 34) {
      captureSegment(state, captureStart, state.position, true);
      state.position++;
      return true;
    } else if (ch === 92) {
      captureSegment(state, captureStart, state.position, true);
      ch = state.input.charCodeAt(++state.position);
      if (is_EOL(ch)) {
        skipSeparationSpace(state, false, nodeIndent);
      } else if (ch < 256 && simpleEscapeCheck[ch]) {
        state.result += simpleEscapeMap[ch];
        state.position++;
      } else if ((tmp = escapedHexLen(ch)) > 0) {
        hexLength = tmp;
        hexResult = 0;
        for (; hexLength > 0; hexLength--) {
          ch = state.input.charCodeAt(++state.position);
          if ((tmp = fromHexCode(ch)) >= 0) {
            hexResult = (hexResult << 4) + tmp;
          } else {
            throwError(state, "expected hexadecimal character");
          }
        }
        state.result += charFromCodepoint(hexResult);
        state.position++;
      } else {
        throwError(state, "unknown escape sequence");
      }
      captureStart = captureEnd = state.position;
    } else if (is_EOL(ch)) {
      captureSegment(state, captureStart, captureEnd, true);
      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
      captureStart = captureEnd = state.position;
    } else if (state.position === state.lineStart && testDocumentSeparator(state)) {
      throwError(
        state,
        "unexpected end of the document within a double quoted scalar"
      );
    } else {
      state.position++;
      captureEnd = state.position;
    }
  }
  throwError(
    state,
    "unexpected end of the stream within a double quoted scalar"
  );
}
function readFlowCollection(state, nodeIndent) {
  var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch;
  ch = state.input.charCodeAt(state.position);
  if (ch === 91) {
    terminator = 93;
    isMapping = false;
    _result = [];
  } else if (ch === 123) {
    terminator = 125;
    isMapping = true;
    _result = {};
  } else {
    return false;
  }
  if (state.anchor !== null) {
    state.anchorMap[state.anchor] = _result;
  }
  ch = state.input.charCodeAt(++state.position);
  while (ch !== 0) {
    skipSeparationSpace(state, true, nodeIndent);
    ch = state.input.charCodeAt(state.position);
    if (ch === terminator) {
      state.position++;
      state.tag = _tag;
      state.anchor = _anchor;
      state.kind = isMapping ? "mapping" : "sequence";
      state.result = _result;
      return true;
    } else if (!readNext) {
      throwError(state, "missed comma between flow collection entries");
    } else if (ch === 44) {
      throwError(state, "expected the node content, but found ','");
    }
    keyTag = keyNode = valueNode = null;
    isPair = isExplicitPair = false;
    if (ch === 63) {
      following = state.input.charCodeAt(state.position + 1);
      if (is_WS_OR_EOL(following)) {
        isPair = isExplicitPair = true;
        state.position++;
        skipSeparationSpace(state, true, nodeIndent);
      }
    }
    _line = state.line;
    _lineStart = state.lineStart;
    _pos = state.position;
    composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
    keyTag = state.tag;
    keyNode = state.result;
    skipSeparationSpace(state, true, nodeIndent);
    ch = state.input.charCodeAt(state.position);
    if ((isExplicitPair || state.line === _line) && ch === 58) {
      isPair = true;
      ch = state.input.charCodeAt(++state.position);
      skipSeparationSpace(state, true, nodeIndent);
      composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
      valueNode = state.result;
    }
    if (isMapping) {
      storeMappingPair(
        state,
        _result,
        overridableKeys,
        keyTag,
        keyNode,
        valueNode,
        _line,
        _lineStart,
        _pos
      );
    } else if (isPair) {
      _result.push(
        storeMappingPair(
          state,
          null,
          overridableKeys,
          keyTag,
          keyNode,
          valueNode,
          _line,
          _lineStart,
          _pos
        )
      );
    } else {
      _result.push(keyNode);
    }
    skipSeparationSpace(state, true, nodeIndent);
    ch = state.input.charCodeAt(state.position);
    if (ch === 44) {
      readNext = true;
      ch = state.input.charCodeAt(++state.position);
    } else {
      readNext = false;
    }
  }
  throwError(state, "unexpected end of the stream within a flow collection");
}
function readBlockScalar(state, nodeIndent) {
  var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;
  ch = state.input.charCodeAt(state.position);
  if (ch === 124) {
    folding = false;
  } else if (ch === 62) {
    folding = true;
  } else {
    return false;
  }
  state.kind = "scalar";
  state.result = "";
  while (ch !== 0) {
    ch = state.input.charCodeAt(++state.position);
    if (ch === 43 || ch === 45) {
      if (CHOMPING_CLIP === chomping) {
        chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP;
      } else {
        throwError(state, "repeat of a chomping mode identifier");
      }
    } else if ((tmp = fromDecimalCode(ch)) >= 0) {
      if (tmp === 0) {
        throwError(
          state,
          "bad explicit indentation width of a block scalar; it cannot be less than one"
        );
      } else if (!detectedIndent) {
        textIndent = nodeIndent + tmp - 1;
        detectedIndent = true;
      } else {
        throwError(state, "repeat of an indentation width identifier");
      }
    } else {
      break;
    }
  }
  if (is_WHITE_SPACE(ch)) {
    do {
      ch = state.input.charCodeAt(++state.position);
    } while (is_WHITE_SPACE(ch));
    if (ch === 35) {
      do {
        ch = state.input.charCodeAt(++state.position);
      } while (!is_EOL(ch) && ch !== 0);
    }
  }
  while (ch !== 0) {
    readLineBreak(state);
    state.lineIndent = 0;
    ch = state.input.charCodeAt(state.position);
    while ((!detectedIndent || state.lineIndent < textIndent) && ch === 32) {
      state.lineIndent++;
      ch = state.input.charCodeAt(++state.position);
    }
    if (!detectedIndent && state.lineIndent > textIndent) {
      textIndent = state.lineIndent;
    }
    if (is_EOL(ch)) {
      emptyLines++;
      continue;
    }
    if (state.lineIndent < textIndent) {
      if (chomping === CHOMPING_KEEP) {
        state.result += common.repeat(
          "\n",
          didReadContent ? 1 + emptyLines : emptyLines
        );
      } else if (chomping === CHOMPING_CLIP) {
        if (didReadContent) {
          state.result += "\n";
        }
      }
      break;
    }
    if (folding) {
      if (is_WHITE_SPACE(ch)) {
        atMoreIndented = true;
        state.result += common.repeat(
          "\n",
          didReadContent ? 1 + emptyLines : emptyLines
        );
      } else if (atMoreIndented) {
        atMoreIndented = false;
        state.result += common.repeat("\n", emptyLines + 1);
      } else if (emptyLines === 0) {
        if (didReadContent) {
          state.result += " ";
        }
      } else {
        state.result += common.repeat("\n", emptyLines);
      }
    } else {
      state.result += common.repeat(
        "\n",
        didReadContent ? 1 + emptyLines : emptyLines
      );
    }
    didReadContent = true;
    detectedIndent = true;
    emptyLines = 0;
    captureStart = state.position;
    while (!is_EOL(ch) && ch !== 0) {
      ch = state.input.charCodeAt(++state.position);
    }
    captureSegment(state, captureStart, state.position, false);
  }
  return true;
}
function readBlockSequence(state, nodeIndent) {
  var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch;
  if (state.firstTabInLine !== -1)
    return false;
  if (state.anchor !== null) {
    state.anchorMap[state.anchor] = _result;
  }
  ch = state.input.charCodeAt(state.position);
  while (ch !== 0) {
    if (state.firstTabInLine !== -1) {
      state.position = state.firstTabInLine;
      throwError(state, "tab characters must not be used in indentation");
    }
    if (ch !== 45) {
      break;
    }
    following = state.input.charCodeAt(state.position + 1);
    if (!is_WS_OR_EOL(following)) {
      break;
    }
    detected = true;
    state.position++;
    if (skipSeparationSpace(state, true, -1)) {
      if (state.lineIndent <= nodeIndent) {
        _result.push(null);
        ch = state.input.charCodeAt(state.position);
        continue;
      }
    }
    _line = state.line;
    composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);
    _result.push(state.result);
    skipSeparationSpace(state, true, -1);
    ch = state.input.charCodeAt(state.position);
    if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {
      throwError(state, "bad indentation of a sequence entry");
    } else if (state.lineIndent < nodeIndent) {
      break;
    }
  }
  if (detected) {
    state.tag = _tag;
    state.anchor = _anchor;
    state.kind = "sequence";
    state.result = _result;
    return true;
  }
  return false;
}
function readBlockMapping(state, nodeIndent, flowIndent) {
  var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;
  if (state.firstTabInLine !== -1)
    return false;
  if (state.anchor !== null) {
    state.anchorMap[state.anchor] = _result;
  }
  ch = state.input.charCodeAt(state.position);
  while (ch !== 0) {
    if (!atExplicitKey && state.firstTabInLine !== -1) {
      state.position = state.firstTabInLine;
      throwError(state, "tab characters must not be used in indentation");
    }
    following = state.input.charCodeAt(state.position + 1);
    _line = state.line;
    if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) {
      if (ch === 63) {
        if (atExplicitKey) {
          storeMappingPair(
            state,
            _result,
            overridableKeys,
            keyTag,
            keyNode,
            null,
            _keyLine,
            _keyLineStart,
            _keyPos
          );
          keyTag = keyNode = valueNode = null;
        }
        detected = true;
        atExplicitKey = true;
        allowCompact = true;
      } else if (atExplicitKey) {
        atExplicitKey = false;
        allowCompact = true;
      } else {
        throwError(
          state,
          "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"
        );
      }
      state.position += 1;
      ch = following;
    } else {
      _keyLine = state.line;
      _keyLineStart = state.lineStart;
      _keyPos = state.position;
      if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {
        break;
      }
      if (state.line === _line) {
        ch = state.input.charCodeAt(state.position);
        while (is_WHITE_SPACE(ch)) {
          ch = state.input.charCodeAt(++state.position);
        }
        if (ch === 58) {
          ch = state.input.charCodeAt(++state.position);
          if (!is_WS_OR_EOL(ch)) {
            throwError(
              state,
              "a whitespace character is expected after the key-value separator within a block mapping"
            );
          }
          if (atExplicitKey) {
            storeMappingPair(
              state,
              _result,
              overridableKeys,
              keyTag,
              keyNode,
              null,
              _keyLine,
              _keyLineStart,
              _keyPos
            );
            keyTag = keyNode = valueNode = null;
          }
          detected = true;
          atExplicitKey = false;
          allowCompact = false;
          keyTag = state.tag;
          keyNode = state.result;
        } else if (detected) {
          throwError(
            state,
            "can not read an implicit mapping pair; a colon is missed"
          );
        } else {
          state.tag = _tag;
          state.anchor = _anchor;
          return true;
        }
      } else if (detected) {
        throwError(
          state,
          "can not read a block mapping entry; a multiline key may not be an implicit key"
        );
      } else {
        state.tag = _tag;
        state.anchor = _anchor;
        return true;
      }
    }
    if (state.line === _line || state.lineIndent > nodeIndent) {
      if (atExplicitKey) {
        _keyLine = state.line;
        _keyLineStart = state.lineStart;
        _keyPos = state.position;
      }
      if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
        if (atExplicitKey) {
          keyNode = state.result;
        } else {
          valueNode = state.result;
        }
      }
      if (!atExplicitKey) {
        storeMappingPair(
          state,
          _result,
          overridableKeys,
          keyTag,
          keyNode,
          valueNode,
          _keyLine,
          _keyLineStart,
          _keyPos
        );
        keyTag = keyNode = valueNode = null;
      }
      skipSeparationSpace(state, true, -1);
      ch = state.input.charCodeAt(state.position);
    }
    if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {
      throwError(state, "bad indentation of a mapping entry");
    } else if (state.lineIndent < nodeIndent) {
      break;
    }
  }
  if (atExplicitKey) {
    storeMappingPair(
      state,
      _result,
      overridableKeys,
      keyTag,
      keyNode,
      null,
      _keyLine,
      _keyLineStart,
      _keyPos
    );
  }
  if (detected) {
    state.tag = _tag;
    state.anchor = _anchor;
    state.kind = "mapping";
    state.result = _result;
  }
  return detected;
}
function readTagProperty(state) {
  var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch;
  ch = state.input.charCodeAt(state.position);
  if (ch !== 33)
    return false;
  if (state.tag !== null) {
    throwError(state, "duplication of a tag property");
  }
  ch = state.input.charCodeAt(++state.position);
  if (ch === 60) {
    isVerbatim = true;
    ch = state.input.charCodeAt(++state.position);
  } else if (ch === 33) {
    isNamed = true;
    tagHandle = "!!";
    ch = state.input.charCodeAt(++state.position);
  } else {
    tagHandle = "!";
  }
  _position = state.position;
  if (isVerbatim) {
    do {
      ch = state.input.charCodeAt(++state.position);
    } while (ch !== 0 && ch !== 62);
    if (state.position < state.length) {
      tagName = state.input.slice(_position, state.position);
      ch = state.input.charCodeAt(++state.position);
    } else {
      throwError(state, "unexpected end of the stream within a verbatim tag");
    }
  } else {
    while (ch !== 0 && !is_WS_OR_EOL(ch)) {
      if (ch === 33) {
        if (!isNamed) {
          tagHandle = state.input.slice(_position - 1, state.position + 1);
          if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
            throwError(
              state,
              "named tag handle cannot contain such characters"
            );
          }
          isNamed = true;
          _position = state.position + 1;
        } else {
          throwError(state, "tag suffix cannot contain exclamation marks");
        }
      }
      ch = state.input.charCodeAt(++state.position);
    }
    tagName = state.input.slice(_position, state.position);
    if (PATTERN_FLOW_INDICATORS.test(tagName)) {
      throwError(state, "tag suffix cannot contain flow indicator characters");
    }
  }
  if (tagName && !PATTERN_TAG_URI.test(tagName)) {
    throwError(state, "tag name cannot contain such characters: " + tagName);
  }
  try {
    tagName = decodeURIComponent(tagName);
  } catch (err) {
    throwError(state, "tag name is malformed: " + tagName);
  }
  if (isVerbatim) {
    state.tag = tagName;
  } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {
    state.tag = state.tagMap[tagHandle] + tagName;
  } else if (tagHandle === "!") {
    state.tag = "!" + tagName;
  } else if (tagHandle === "!!") {
    state.tag = "tag:yaml.org,2002:" + tagName;
  } else {
    throwError(state, 'undeclared tag handle "' + tagHandle + '"');
  }
  return true;
}
function readAnchorProperty(state) {
  var _position, ch;
  ch = state.input.charCodeAt(state.position);
  if (ch !== 38)
    return false;
  if (state.anchor !== null) {
    throwError(state, "duplication of an anchor property");
  }
  ch = state.input.charCodeAt(++state.position);
  _position = state.position;
  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
    ch = state.input.charCodeAt(++state.position);
  }
  if (state.position === _position) {
    throwError(
      state,
      "name of an anchor node must contain at least one character"
    );
  }
  state.anchor = state.input.slice(_position, state.position);
  return true;
}
function readAlias(state) {
  var _position, alias, ch;
  ch = state.input.charCodeAt(state.position);
  if (ch !== 42)
    return false;
  ch = state.input.charCodeAt(++state.position);
  _position = state.position;
  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
    ch = state.input.charCodeAt(++state.position);
  }
  if (state.position === _position) {
    throwError(
      state,
      "name of an alias node must contain at least one character"
    );
  }
  alias = state.input.slice(_position, state.position);
  if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {
    throwError(state, 'unidentified alias "' + alias + '"');
  }
  state.result = state.anchorMap[alias];
  skipSeparationSpace(state, true, -1);
  return true;
}
function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
  var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent;
  if (state.listener !== null) {
    state.listener("open", state);
  }
  state.tag = null;
  state.anchor = null;
  state.kind = null;
  state.result = null;
  allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;
  if (allowToSeek) {
    if (skipSeparationSpace(state, true, -1)) {
      atNewLine = true;
      if (state.lineIndent > parentIndent) {
        indentStatus = 1;
      } else if (state.lineIndent === parentIndent) {
        indentStatus = 0;
      } else if (state.lineIndent < parentIndent) {
        indentStatus = -1;
      }
    }
  }
  if (indentStatus === 1) {
    while (readTagProperty(state) || readAnchorProperty(state)) {
      if (skipSeparationSpace(state, true, -1)) {
        atNewLine = true;
        allowBlockCollections = allowBlockStyles;
        if (state.lineIndent > parentIndent) {
          indentStatus = 1;
        } else if (state.lineIndent === parentIndent) {
          indentStatus = 0;
        } else if (state.lineIndent < parentIndent) {
          indentStatus = -1;
        }
      } else {
        allowBlockCollections = false;
      }
    }
  }
  if (allowBlockCollections) {
    allowBlockCollections = atNewLine || allowCompact;
  }
  if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
    if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {
      flowIndent = parentIndent;
    } else {
      flowIndent = parentIndent + 1;
    }
    blockIndent = state.position - state.lineStart;
    if (indentStatus === 1) {
      if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) {
        hasContent = true;
      } else {
        if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) {
          hasContent = true;
        } else if (readAlias(state)) {
          hasContent = true;
          if (state.tag !== null || state.anchor !== null) {
            throwError(state, "alias node should not have any properties");
          }
        } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
          hasContent = true;
          if (state.tag === null) {
            state.tag = "?";
          }
        }
        if (state.anchor !== null) {
          state.anchorMap[state.anchor] = state.result;
        }
      }
    } else if (indentStatus === 0) {
      hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);
    }
  }
  if (state.tag === null) {
    if (state.anchor !== null) {
      state.anchorMap[state.anchor] = state.result;
    }
  } else if (state.tag === "?") {
    if (state.result !== null && state.kind !== "scalar") {
      throwError(
        state,
        'unacceptable node kind for !<?> tag; it should be "scalar", not "' + state.kind + '"'
      );
    }
    for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
      type2 = state.implicitTypes[typeIndex];
      if (type2.resolve(state.result)) {
        state.result = type2.construct(state.result);
        state.tag = type2.tag;
        if (state.anchor !== null) {
          state.anchorMap[state.anchor] = state.result;
        }
        break;
      }
    }
  } else if (state.tag !== "!") {
    if (_hasOwnProperty$1.call(state.typeMap[state.kind || "fallback"], state.tag)) {
      type2 = state.typeMap[state.kind || "fallback"][state.tag];
    } else {
      type2 = null;
      typeList = state.typeMap.multi[state.kind || "fallback"];
      for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {
        if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {
          type2 = typeList[typeIndex];
          break;
        }
      }
    }
    if (!type2) {
      throwError(state, "unknown tag !<" + state.tag + ">");
    }
    if (state.result !== null && type2.kind !== state.kind) {
      throwError(
        state,
        "unacceptable node kind for !<" + state.tag + '> tag; it should be "' + type2.kind + '", not "' + state.kind + '"'
      );
    }
    if (!type2.resolve(state.result, state.tag)) {
      throwError(
        state,
        "cannot resolve a node with !<" + state.tag + "> explicit tag"
      );
    } else {
      state.result = type2.construct(state.result, state.tag);
      if (state.anchor !== null) {
        state.anchorMap[state.anchor] = state.result;
      }
    }
  }
  if (state.listener !== null) {
    state.listener("close", state);
  }
  return state.tag !== null || state.anchor !== null || hasContent;
}
function readDocument(state) {
  var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;
  state.version = null;
  state.checkLineBreaks = state.legacy;
  state.tagMap = /* @__PURE__ */ Object.create(null);
  state.anchorMap = /* @__PURE__ */ Object.create(null);
  while ((ch = state.input.charCodeAt(state.position)) !== 0) {
    skipSeparationSpace(state, true, -1);
    ch = state.input.charCodeAt(state.position);
    if (state.lineIndent > 0 || ch !== 37) {
      break;
    }
    hasDirectives = true;
    ch = state.input.charCodeAt(++state.position);
    _position = state.position;
    while (ch !== 0 && !is_WS_OR_EOL(ch)) {
      ch = state.input.charCodeAt(++state.position);
    }
    directiveName = state.input.slice(_position, state.position);
    directiveArgs = [];
    if (directiveName.length < 1) {
      throwError(
        state,
        "directive name must not be less than one character in length"
      );
    }
    while (ch !== 0) {
      while (is_WHITE_SPACE(ch)) {
        ch = state.input.charCodeAt(++state.position);
      }
      if (ch === 35) {
        do {
          ch = state.input.charCodeAt(++state.position);
        } while (ch !== 0 && !is_EOL(ch));
        break;
      }
      if (is_EOL(ch))
        break;
      _position = state.position;
      while (ch !== 0 && !is_WS_OR_EOL(ch)) {
        ch = state.input.charCodeAt(++state.position);
      }
      directiveArgs.push(state.input.slice(_position, state.position));
    }
    if (ch !== 0)
      readLineBreak(state);
    if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {
      directiveHandlers[directiveName](state, directiveName, directiveArgs);
    } else {
      throwWarning(state, 'unknown document directive "' + directiveName + '"');
    }
  }
  skipSeparationSpace(state, true, -1);
  if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 45 && state.input.charCodeAt(state.position + 1) === 45 && state.input.charCodeAt(state.position + 2) === 45) {
    state.position += 3;
    skipSeparationSpace(state, true, -1);
  } else if (hasDirectives) {
    throwError(state, "directives end mark is expected");
  }
  composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
  skipSeparationSpace(state, true, -1);
  if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(
    state.input.slice(documentStart, state.position)
  )) {
    throwWarning(state, "non-ASCII line breaks are interpreted as content");
  }
  state.documents.push(state.result);
  if (state.position === state.lineStart && testDocumentSeparator(state)) {
    if (state.input.charCodeAt(state.position) === 46) {
      state.position += 3;
      skipSeparationSpace(state, true, -1);
    }
    return;
  }
  if (state.position < state.length - 1) {
    throwError(state, "end of the stream or a document separator is expected");
  } else {
    return;
  }
}
function loadDocuments(input, options) {
  input = String(input);
  options = options || {};
  if (input.length !== 0) {
    if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) {
      input += "\n";
    }
    if (input.charCodeAt(0) === 65279) {
      input = input.slice(1);
    }
  }
  var state = new State$1(input, options);
  var nullpos = input.indexOf("\0");
  if (nullpos !== -1) {
    state.position = nullpos;
    throwError(state, "null byte is not allowed in input");
  }
  state.input += "\0";
  while (state.input.charCodeAt(state.position) === 32) {
    state.lineIndent += 1;
    state.position += 1;
  }
  while (state.position < state.length - 1) {
    readDocument(state);
  }
  return state.documents;
}
function loadAll$1(input, iterator, options) {
  if (iterator !== null && typeof iterator === "object" && typeof options === "undefined") {
    options = iterator;
    iterator = null;
  }
  var documents = loadDocuments(input, options);
  if (typeof iterator !== "function") {
    return documents;
  }
  for (var index = 0, length = documents.length; index < length; index += 1) {
    iterator(documents[index]);
  }
}
function load$1(input, options) {
  var documents = loadDocuments(input, options);
  if (documents.length === 0) {
    return void 0;
  } else if (documents.length === 1) {
    return documents[0];
  }
  throw new exception(
    "expected a single document in the stream, but found more"
  );
}
var loadAll_1 = loadAll$1;
var load_1 = load$1;
var loader = {
  loadAll: loadAll_1,
  load: load_1
};
var _toString = Object.prototype.toString;
var _hasOwnProperty = Object.prototype.hasOwnProperty;
var CHAR_BOM = 65279;
var CHAR_TAB = 9;
var CHAR_LINE_FEED = 10;
var CHAR_CARRIAGE_RETURN = 13;
var CHAR_SPACE = 32;
var CHAR_EXCLAMATION = 33;
var CHAR_DOUBLE_QUOTE = 34;
var CHAR_SHARP = 35;
var CHAR_PERCENT = 37;
var CHAR_AMPERSAND = 38;
var CHAR_SINGLE_QUOTE = 39;
var CHAR_ASTERISK = 42;
var CHAR_COMMA = 44;
var CHAR_MINUS = 45;
var CHAR_COLON = 58;
var CHAR_EQUALS = 61;
var CHAR_GREATER_THAN = 62;
var CHAR_QUESTION = 63;
var CHAR_COMMERCIAL_AT = 64;
var CHAR_LEFT_SQUARE_BRACKET = 91;
var CHAR_RIGHT_SQUARE_BRACKET = 93;
var CHAR_GRAVE_ACCENT = 96;
var CHAR_LEFT_CURLY_BRACKET = 123;
var CHAR_VERTICAL_LINE = 124;
var CHAR_RIGHT_CURLY_BRACKET = 125;
var ESCAPE_SEQUENCES = {};
ESCAPE_SEQUENCES[0] = "\\0";
ESCAPE_SEQUENCES[7] = "\\a";
ESCAPE_SEQUENCES[8] = "\\b";
ESCAPE_SEQUENCES[9] = "\\t";
ESCAPE_SEQUENCES[10] = "\\n";
ESCAPE_SEQUENCES[11] = "\\v";
ESCAPE_SEQUENCES[12] = "\\f";
ESCAPE_SEQUENCES[13] = "\\r";
ESCAPE_SEQUENCES[27] = "\\e";
ESCAPE_SEQUENCES[34] = '\\"';
ESCAPE_SEQUENCES[92] = "\\\\";
ESCAPE_SEQUENCES[133] = "\\N";
ESCAPE_SEQUENCES[160] = "\\_";
ESCAPE_SEQUENCES[8232] = "\\L";
ESCAPE_SEQUENCES[8233] = "\\P";
var DEPRECATED_BOOLEANS_SYNTAX = [
  "y",
  "Y",
  "yes",
  "Yes",
  "YES",
  "on",
  "On",
  "ON",
  "n",
  "N",
  "no",
  "No",
  "NO",
  "off",
  "Off",
  "OFF"
];
var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;
function compileStyleMap(schema2, map2) {
  var result, keys, index, length, tag, style, type2;
  if (map2 === null)
    return {};
  result = {};
  keys = Object.keys(map2);
  for (index = 0, length = keys.length; index < length; index += 1) {
    tag = keys[index];
    style = String(map2[tag]);
    if (tag.slice(0, 2) === "!!") {
      tag = "tag:yaml.org,2002:" + tag.slice(2);
    }
    type2 = schema2.compiledTypeMap["fallback"][tag];
    if (type2 && _hasOwnProperty.call(type2.styleAliases, style)) {
      style = type2.styleAliases[style];
    }
    result[tag] = style;
  }
  return result;
}
function encodeHex(character) {
  var string, handle, length;
  string = character.toString(16).toUpperCase();
  if (character <= 255) {
    handle = "x";
    length = 2;
  } else if (character <= 65535) {
    handle = "u";
    length = 4;
  } else if (character <= 4294967295) {
    handle = "U";
    length = 8;
  } else {
    throw new exception(
      "code point within a string may not be greater than 0xFFFFFFFF"
    );
  }
  return "\\" + handle + common.repeat("0", length - string.length) + string;
}
var QUOTING_TYPE_SINGLE = 1;
var QUOTING_TYPE_DOUBLE = 2;
function State(options) {
  this.schema = options["schema"] || _default;
  this.indent = Math.max(1, options["indent"] || 2);
  this.noArrayIndent = options["noArrayIndent"] || false;
  this.skipInvalid = options["skipInvalid"] || false;
  this.flowLevel = common.isNothing(options["flowLevel"]) ? -1 : options["flowLevel"];
  this.styleMap = compileStyleMap(this.schema, options["styles"] || null);
  this.sortKeys = options["sortKeys"] || false;
  this.lineWidth = options["lineWidth"] || 80;
  this.noRefs = options["noRefs"] || false;
  this.noCompatMode = options["noCompatMode"] || false;
  this.condenseFlow = options["condenseFlow"] || false;
  this.quotingType = options["quotingType"] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;
  this.forceQuotes = options["forceQuotes"] || false;
  this.replacer = typeof options["replacer"] === "function" ? options["replacer"] : null;
  this.implicitTypes = this.schema.compiledImplicit;
  this.explicitTypes = this.schema.compiledExplicit;
  this.tag = null;
  this.result = "";
  this.duplicates = [];
  this.usedDuplicates = null;
}
function indentString(string, spaces) {
  var ind = common.repeat(" ", spaces), position = 0, next = -1, result = "", line, length = string.length;
  while (position < length) {
    next = string.indexOf("\n", position);
    if (next === -1) {
      line = string.slice(position);
      position = length;
    } else {
      line = string.slice(position, next + 1);
      position = next + 1;
    }
    if (line.length && line !== "\n")
      result += ind;
    result += line;
  }
  return result;
}
function generateNextLine(state, level) {
  return "\n" + common.repeat(" ", state.indent * level);
}
function testImplicitResolving(state, str2) {
  var index, length, type2;
  for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {
    type2 = state.implicitTypes[index];
    if (type2.resolve(str2)) {
      return true;
    }
  }
  return false;
}
function isWhitespace(c) {
  return c === CHAR_SPACE || c === CHAR_TAB;
}
function isPrintable(c) {
  return 32 <= c && c <= 126 || 161 <= c && c <= 55295 && c !== 8232 && c !== 8233 || 57344 <= c && c <= 65533 && c !== CHAR_BOM || 65536 <= c && c <= 1114111;
}
function isNsCharOrWhitespace(c) {
  return isPrintable(c) && c !== CHAR_BOM && c !== CHAR_CARRIAGE_RETURN && c !== CHAR_LINE_FEED;
}
function isPlainSafe(c, prev, inblock) {
  var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);
  var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);
  return (inblock ? cIsNsCharOrWhitespace : cIsNsCharOrWhitespace && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET) && c !== CHAR_SHARP && !(prev === CHAR_COLON && !cIsNsChar) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP || prev === CHAR_COLON && cIsNsChar;
}
function isPlainSafeFirst(c) {
  return isPrintable(c) && c !== CHAR_BOM && !isWhitespace(c) && c !== CHAR_MINUS && c !== CHAR_QUESTION && c !== CHAR_COLON && c !== CHAR_COMMA && c !== CHAR_LEFT_SQUARE_BRACKET && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT;
}
function isPlainSafeLast(c) {
  return !isWhitespace(c) && c !== CHAR_COLON;
}
function codePointAt(string, pos) {
  var first = string.charCodeAt(pos), second;
  if (first >= 55296 && first <= 56319 && pos + 1 < string.length) {
    second = string.charCodeAt(pos + 1);
    if (second >= 56320 && second <= 57343) {
      return (first - 55296) * 1024 + second - 56320 + 65536;
    }
  }
  return first;
}
function needIndentIndicator(string) {
  var leadingSpaceRe = /^\n* /;
  return leadingSpaceRe.test(string);
}
var STYLE_PLAIN = 1;
var STYLE_SINGLE = 2;
var STYLE_LITERAL = 3;
var STYLE_FOLDED = 4;
var STYLE_DOUBLE = 5;
function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) {
  var i;
  var char = 0;
  var prevChar = null;
  var hasLineBreak = false;
  var hasFoldableLine = false;
  var shouldTrackWidth = lineWidth !== -1;
  var previousLineBreak = -1;
  var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1));
  if (singleLineOnly || forceQuotes) {
    for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {
      char = codePointAt(string, i);
      if (!isPrintable(char)) {
        return STYLE_DOUBLE;
      }
      plain = plain && isPlainSafe(char, prevChar, inblock);
      prevChar = char;
    }
  } else {
    for (i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {
      char = codePointAt(string, i);
      if (char === CHAR_LINE_FEED) {
        hasLineBreak = true;
        if (shouldTrackWidth) {
          hasFoldableLine = hasFoldableLine || i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ";
          previousLineBreak = i;
        }
      } else if (!isPrintable(char)) {
        return STYLE_DOUBLE;
      }
      plain = plain && isPlainSafe(char, prevChar, inblock);
      prevChar = char;
    }
    hasFoldableLine = hasFoldableLine || shouldTrackWidth && i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ";
  }
  if (!hasLineBreak && !hasFoldableLine) {
    if (plain && !forceQuotes && !testAmbiguousType(string)) {
      return STYLE_PLAIN;
    }
    return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;
  }
  if (indentPerLevel > 9 && needIndentIndicator(string)) {
    return STYLE_DOUBLE;
  }
  if (!forceQuotes) {
    return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;
  }
  return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;
}
function writeScalar(state, string, level, iskey, inblock) {
  state.dump = function() {
    if (string.length === 0) {
      return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''";
    }
    if (!state.noCompatMode) {
      if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {
        return state.quotingType === QUOTING_TYPE_DOUBLE ? '"' + string + '"' : "'" + string + "'";
      }
    }
    var indent = state.indent * Math.max(1, level);
    var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);
    var singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel;
    function testAmbiguity(string2) {
      return testImplicitResolving(state, string2);
    }
    switch (chooseScalarStyle(
      string,
      singleLineOnly,
      state.indent,
      lineWidth,
      testAmbiguity,
      state.quotingType,
      state.forceQuotes && !iskey,
      inblock
    )) {
      case STYLE_PLAIN:
        return string;
      case STYLE_SINGLE:
        return "'" + string.replace(/'/g, "''") + "'";
      case STYLE_LITERAL:
        return "|" + blockHeader(string, state.indent) + dropEndingNewline(indentString(string, indent));
      case STYLE_FOLDED:
        return ">" + blockHeader(string, state.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent));
      case STYLE_DOUBLE:
        return '"' + escapeString(string) + '"';
      default:
        throw new exception("impossible error: invalid scalar style");
    }
  }();
}
function blockHeader(string, indentPerLevel) {
  var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : "";
  var clip = string[string.length - 1] === "\n";
  var keep = clip && (string[string.length - 2] === "\n" || string === "\n");
  var chomp = keep ? "+" : clip ? "" : "-";
  return indentIndicator + chomp + "\n";
}
function dropEndingNewline(string) {
  return string[string.length - 1] === "\n" ? string.slice(0, -1) : string;
}
function foldString(string, width) {
  var lineRe = /(\n+)([^\n]*)/g;
  var result = function() {
    var nextLF = string.indexOf("\n");
    nextLF = nextLF !== -1 ? nextLF : string.length;
    lineRe.lastIndex = nextLF;
    return foldLine(string.slice(0, nextLF), width);
  }();
  var prevMoreIndented = string[0] === "\n" || string[0] === " ";
  var moreIndented;
  var match;
  while (match = lineRe.exec(string)) {
    var prefix = match[1], line = match[2];
    moreIndented = line[0] === " ";
    result += prefix + (!prevMoreIndented && !moreIndented && line !== "" ? "\n" : "") + foldLine(line, width);
    prevMoreIndented = moreIndented;
  }
  return result;
}
function foldLine(line, width) {
  if (line === "" || line[0] === " ")
    return line;
  var breakRe = / [^ ]/g;
  var match;
  var start = 0, end, curr = 0, next = 0;
  var result = "";
  while (match = breakRe.exec(line)) {
    next = match.index;
    if (next - start > width) {
      end = curr > start ? curr : next;
      result += "\n" + line.slice(start, end);
      start = end + 1;
    }
    curr = next;
  }
  result += "\n";
  if (line.length - start > width && curr > start) {
    result += line.slice(start, curr) + "\n" + line.slice(curr + 1);
  } else {
    result += line.slice(start);
  }
  return result.slice(1);
}
function escapeString(string) {
  var result = "";
  var char = 0;
  var escapeSeq;
  for (var i = 0; i < string.length; char >= 65536 ? i += 2 : i++) {
    char = codePointAt(string, i);
    escapeSeq = ESCAPE_SEQUENCES[char];
    if (!escapeSeq && isPrintable(char)) {
      result += string[i];
      if (char >= 65536)
        result += string[i + 1];
    } else {
      result += escapeSeq || encodeHex(char);
    }
  }
  return result;
}
function writeFlowSequence(state, level, object) {
  var _result = "", _tag = state.tag, index, length, value;
  for (index = 0, length = object.length; index < length; index += 1) {
    value = object[index];
    if (state.replacer) {
      value = state.replacer.call(object, String(index), value);
    }
    if (writeNode(state, level, value, false, false) || typeof value === "undefined" && writeNode(state, level, null, false, false)) {
      if (_result !== "")
        _result += "," + (!state.condenseFlow ? " " : "");
      _result += state.dump;
    }
  }
  state.tag = _tag;
  state.dump = "[" + _result + "]";
}
function writeBlockSequence(state, level, object, compact) {
  var _result = "", _tag = state.tag, index, length, value;
  for (index = 0, length = object.length; index < length; index += 1) {
    value = object[index];
    if (state.replacer) {
      value = state.replacer.call(object, String(index), value);
    }
    if (writeNode(state, level + 1, value, true, true, false, true) || typeof value === "undefined" && writeNode(state, level + 1, null, true, true, false, true)) {
      if (!compact || _result !== "") {
        _result += generateNextLine(state, level);
      }
      if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
        _result += "-";
      } else {
        _result += "- ";
      }
      _result += state.dump;
    }
  }
  state.tag = _tag;
  state.dump = _result || "[]";
}
function writeFlowMapping(state, level, object) {
  var _result = "", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, pairBuffer;
  for (index = 0, length = objectKeyList.length; index < length; index += 1) {
    pairBuffer = "";
    if (_result !== "")
      pairBuffer += ", ";
    if (state.condenseFlow)
      pairBuffer += '"';
    objectKey = objectKeyList[index];
    objectValue = object[objectKey];
    if (state.replacer) {
      objectValue = state.replacer.call(object, objectKey, objectValue);
    }
    if (!writeNode(state, level, objectKey, false, false)) {
      continue;
    }
    if (state.dump.length > 1024)
      pairBuffer += "? ";
    pairBuffer += state.dump + (state.condenseFlow ? '"' : "") + ":" + (state.condenseFlow ? "" : " ");
    if (!writeNode(state, level, objectValue, false, false)) {
      continue;
    }
    pairBuffer += state.dump;
    _result += pairBuffer;
  }
  state.tag = _tag;
  state.dump = "{" + _result + "}";
}
function writeBlockMapping(state, level, object, compact) {
  var _result = "", _tag = state.tag, objectKeyList = Object.keys(object), index, length, objectKey, objectValue, explicitPair, pairBuffer;
  if (state.sortKeys === true) {
    objectKeyList.sort();
  } else if (typeof state.sortKeys === "function") {
    objectKeyList.sort(state.sortKeys);
  } else if (state.sortKeys) {
    throw new exception("sortKeys must be a boolean or a function");
  }
  for (index = 0, length = objectKeyList.length; index < length; index += 1) {
    pairBuffer = "";
    if (!compact || _result !== "") {
      pairBuffer += generateNextLine(state, level);
    }
    objectKey = objectKeyList[index];
    objectValue = object[objectKey];
    if (state.replacer) {
      objectValue = state.replacer.call(object, objectKey, objectValue);
    }
    if (!writeNode(state, level + 1, objectKey, true, true, true)) {
      continue;
    }
    explicitPair = state.tag !== null && state.tag !== "?" || state.dump && state.dump.length > 1024;
    if (explicitPair) {
      if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
        pairBuffer += "?";
      } else {
        pairBuffer += "? ";
      }
    }
    pairBuffer += state.dump;
    if (explicitPair) {
      pairBuffer += generateNextLine(state, level);
    }
    if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {
      continue;
    }
    if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
      pairBuffer += ":";
    } else {
      pairBuffer += ": ";
    }
    pairBuffer += state.dump;
    _result += pairBuffer;
  }
  state.tag = _tag;
  state.dump = _result || "{}";
}
function detectType(state, object, explicit) {
  var _result, typeList, index, length, type2, style;
  typeList = explicit ? state.explicitTypes : state.implicitTypes;
  for (index = 0, length = typeList.length; index < length; index += 1) {
    type2 = typeList[index];
    if ((type2.instanceOf || type2.predicate) && (!type2.instanceOf || typeof object === "object" && object instanceof type2.instanceOf) && (!type2.predicate || type2.predicate(object))) {
      if (explicit) {
        if (type2.multi && type2.representName) {
          state.tag = type2.representName(object);
        } else {
          state.tag = type2.tag;
        }
      } else {
        state.tag = "?";
      }
      if (type2.represent) {
        style = state.styleMap[type2.tag] || type2.defaultStyle;
        if (_toString.call(type2.represent) === "[object Function]") {
          _result = type2.represent(object, style);
        } else if (_hasOwnProperty.call(type2.represent, style)) {
          _result = type2.represent[style](object, style);
        } else {
          throw new exception(
            "!<" + type2.tag + '> tag resolver accepts not "' + style + '" style'
          );
        }
        state.dump = _result;
      }
      return true;
    }
  }
  return false;
}
function writeNode(state, level, object, block, compact, iskey, isblockseq) {
  state.tag = null;
  state.dump = object;
  if (!detectType(state, object, false)) {
    detectType(state, object, true);
  }
  var type2 = _toString.call(state.dump);
  var inblock = block;
  var tagStr;
  if (block) {
    block = state.flowLevel < 0 || state.flowLevel > level;
  }
  var objectOrArray = type2 === "[object Object]" || type2 === "[object Array]", duplicateIndex, duplicate;
  if (objectOrArray) {
    duplicateIndex = state.duplicates.indexOf(object);
    duplicate = duplicateIndex !== -1;
  }
  if (state.tag !== null && state.tag !== "?" || duplicate || state.indent !== 2 && level > 0) {
    compact = false;
  }
  if (duplicate && state.usedDuplicates[duplicateIndex]) {
    state.dump = "*ref_" + duplicateIndex;
  } else {
    if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {
      state.usedDuplicates[duplicateIndex] = true;
    }
    if (type2 === "[object Object]") {
      if (block && Object.keys(state.dump).length !== 0) {
        writeBlockMapping(state, level, state.dump, compact);
        if (duplicate) {
          state.dump = "&ref_" + duplicateIndex + state.dump;
        }
      } else {
        writeFlowMapping(state, level, state.dump);
        if (duplicate) {
          state.dump = "&ref_" + duplicateIndex + " " + state.dump;
        }
      }
    } else if (type2 === "[object Array]") {
      if (block && state.dump.length !== 0) {
        if (state.noArrayIndent && !isblockseq && level > 0) {
          writeBlockSequence(state, level - 1, state.dump, compact);
        } else {
          writeBlockSequence(state, level, state.dump, compact);
        }
        if (duplicate) {
          state.dump = "&ref_" + duplicateIndex + state.dump;
        }
      } else {
        writeFlowSequence(state, level, state.dump);
        if (duplicate) {
          state.dump = "&ref_" + duplicateIndex + " " + state.dump;
        }
      }
    } else if (type2 === "[object String]") {
      if (state.tag !== "?") {
        writeScalar(state, state.dump, level, iskey, inblock);
      }
    } else if (type2 === "[object Undefined]") {
      return false;
    } else {
      if (state.skipInvalid)
        return false;
      throw new exception("unacceptable kind of an object to dump " + type2);
    }
    if (state.tag !== null && state.tag !== "?") {
      tagStr = encodeURI(
        state.tag[0] === "!" ? state.tag.slice(1) : state.tag
      ).replace(/!/g, "%21");
      if (state.tag[0] === "!") {
        tagStr = "!" + tagStr;
      } else if (tagStr.slice(0, 18) === "tag:yaml.org,2002:") {
        tagStr = "!!" + tagStr.slice(18);
      } else {
        tagStr = "!<" + tagStr + ">";
      }
      state.dump = tagStr + " " + state.dump;
    }
  }
  return true;
}
function getDuplicateReferences(object, state) {
  var objects = [], duplicatesIndexes = [], index, length;
  inspectNode(object, objects, duplicatesIndexes);
  for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {
    state.duplicates.push(objects[duplicatesIndexes[index]]);
  }
  state.usedDuplicates = new Array(length);
}
function inspectNode(object, objects, duplicatesIndexes) {
  var objectKeyList, index, length;
  if (object !== null && typeof object === "object") {
    index = objects.indexOf(object);
    if (index !== -1) {
      if (duplicatesIndexes.indexOf(index) === -1) {
        duplicatesIndexes.push(index);
      }
    } else {
      objects.push(object);
      if (Array.isArray(object)) {
        for (index = 0, length = object.length; index < length; index += 1) {
          inspectNode(object[index], objects, duplicatesIndexes);
        }
      } else {
        objectKeyList = Object.keys(object);
        for (index = 0, length = objectKeyList.length; index < length; index += 1) {
          inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);
        }
      }
    }
  }
}
function dump$1(input, options) {
  options = options || {};
  var state = new State(options);
  if (!state.noRefs)
    getDuplicateReferences(input, state);
  var value = input;
  if (state.replacer) {
    value = state.replacer.call({ "": value }, "", value);
  }
  if (writeNode(state, 0, value, true, true))
    return state.dump + "\n";
  return "";
}
var dump_1 = dump$1;
var dumper = {
  dump: dump_1
};
function renamed(from, to) {
  return function() {
    throw new Error(
      "Function yaml." + from + " is removed in js-yaml 4. Use yaml." + to + " instead, which is now safe by default."
    );
  };
}
var Type = type;
var Schema = schema;
var load = loader.load;
var loadAll = loader.loadAll;
var dump = dumper.dump;
var safeLoad = renamed("safeLoad", "load");
var safeLoadAll = renamed("safeLoadAll", "loadAll");
var safeDump = renamed("safeDump", "dump");

// js-yaml-schema.ts
var QuartoJSONSchema = new Schema({
  implicit: [_null, bool, int, float],
  include: [failsafe],
  explicit: [
    new Type("!expr", {
      kind: "scalar",
      construct(data) {
        const result = data !== null ? data : "";
        return {
          value: result,
          tag: "!expr"
        };
      }
    })
  ]
});

// ../yaml-schema/types.ts
function schemaType(schema2) {
  if (schema2 === false) {
    return "false";
  }
  if (schema2 === true) {
    return "true";
  }
  return schema2.type;
}
function schemaDispatch(s, d) {
  const st = schemaType(s);
  if (d[st]) {
    d[st](s);
  }
}
function schemaCall(s, d, other) {
  const st = schemaType(s);
  if (d[st]) {
    return d[st](s);
  }
  if (other) {
    return other(s);
  }
  throw new Error(`Internal Error: dispatch failed for type ${st}`);
}
function schemaDocString(d) {
  if (typeof d === "string") {
    return d;
  }
  if (d.short) {
    return d.short;
  }
  return "";
}
function schemaDescription(schema2) {
  if (schema2 === true) {
    return `be anything`;
  } else if (schema2 === false) {
    return `be no possible value`;
  } else {
    return schema2.description || `be ${schemaType(schema2)}`;
  }
}

// ../yaml-validation/schema.ts
function schemaAccepts(schema2, testType) {
  const t = schemaType(schema2);
  if (t === testType) {
    return true;
  }
  switch (t) {
    case "anyOf":
      return schema2.anyOf.some(
        (s) => schemaAccepts(s, testType)
      );
    case "allOf":
      return schema2.allOf.every(
        (s) => schemaAccepts(s, testType)
      );
  }
  return false;
}
var definitionsObject = {};
function hasSchemaDefinition(key) {
  return definitionsObject[key] !== void 0;
}
function getSchemaDefinition(key) {
  if (definitionsObject[key] === void 0) {
    throw new Error(`Internal Error: Schema ${key} not found.`);
  }
  return definitionsObject[key];
}
function setSchemaDefinition(schema2) {
  if (schema2.$id === void 0) {
    throw new Error(
      "Internal Error, setSchemaDefinition needs $id"
    );
  }
  if (definitionsObject[schema2.$id] === void 0) {
    definitionsObject[schema2.$id] = schema2;
  }
}
function getSchemaDefinitionsObject() {
  return Object.assign({}, definitionsObject);
}
function expandAliasesFrom(lst, defs) {
  const aliases = defs;
  const result = [];
  lst = lst.slice();
  for (let i = 0; i < lst.length; ++i) {
    const el = lst[i];
    if (el.startsWith("$")) {
      const v = aliases[el.slice(1)];
      if (v === void 0) {
        throw new Error(
          `Internal Error: ${el} doesn't have an entry in the aliases map`
        );
      }
      lst.push(...v);
    } else {
      result.push(el);
    }
  }
  return result;
}

// ../yaml-validation/resolve.ts
function resolveSchema(schema2, visit, hasRef, next) {
  if (schema2 === false || schema2 === true) {
    return schema2;
  }
  if (hasRef === void 0) {
    hasRef = (cursor) => {
      return schemaCall(cursor, {
        ref: (_s) => true
      }, (_s) => false);
    };
  }
  if (!hasRef(schema2)) {
    return schema2;
  }
  if (visit === void 0) {
    visit = (_schema) => {
    };
  }
  if (next === void 0) {
    next = (cursor) => {
      const result = schemaCall(cursor, {
        ref: (s) => getSchemaDefinition(s.$ref)
      });
      if (result === void 0) {
        throw new Error(
          "Internal Error, couldn't resolve schema ${JSON.stringify(cursor)}"
        );
      }
      return result;
    };
  }
  let cursor1 = schema2;
  let cursor2 = schema2;
  let stopped = false;
  do {
    cursor1 = next(cursor1);
    visit(cursor1);
    if (hasRef(cursor2)) {
      cursor2 = next(cursor2);
    } else {
      stopped = true;
    }
    if (hasRef(cursor2)) {
      cursor2 = next(cursor2);
    } else {
      stopped = true;
    }
    if (!stopped && cursor1 === cursor2) {
      throw new Error(`reference cycle detected at ${JSON.stringify(cursor1)}`);
    }
  } while (hasRef(cursor1));
  return cursor1;
}

// ../external/regexpp.mjs
var largeIdStartRanges = void 0;
var largeIdContinueRanges = void 0;
function isIdStart(cp) {
  if (cp < 65)
    return false;
  if (cp < 91)
    return true;
  if (cp < 97)
    return false;
  if (cp < 123)
    return true;
  return isLargeIdStart(cp);
}
function isIdContinue(cp) {
  if (cp < 48)
    return false;
  if (cp < 58)
    return true;
  if (cp < 65)
    return false;
  if (cp < 91)
    return true;
  if (cp === 95)
    return true;
  if (cp < 97)
    return false;
  if (cp < 123)
    return true;
  return isLargeIdStart(cp) || isLargeIdContinue(cp);
}
function isLargeIdStart(cp) {
  return isInRange(cp, largeIdStartRanges || (largeIdStartRanges = initLargeIdStartRanges()));
}
function isLargeIdContinue(cp) {
  return isInRange(cp, largeIdContinueRanges || (largeIdContinueRanges = initLargeIdContinueRanges()));
}
function initLargeIdStartRanges() {
  return restoreRanges("4q 0 b 0 5 0 6 m 2 u 2 cp 5 b f 4 8 0 2 0 3m 4 2 1 3 3 2 0 7 0 2 2 2 0 2 j 2 2a 2 3u 9 4l 2 11 3 0 7 14 20 q 5 3 1a 16 10 1 2 2q 2 0 g 1 8 1 b 2 3 0 h 0 2 t u 2g c 0 p w a 1 5 0 6 l 5 0 a 0 4 0 o o 8 a 1i k 2 h 1p 1h 4 0 j 0 8 9 g f 5 7 3 1 3 l 2 6 2 0 4 3 4 0 h 0 e 1 2 2 f 1 b 0 9 5 5 1 3 l 2 6 2 1 2 1 2 1 w 3 2 0 k 2 h 8 2 2 2 l 2 6 2 1 2 4 4 0 j 0 g 1 o 0 c 7 3 1 3 l 2 6 2 1 2 4 4 0 v 1 2 2 g 0 i 0 2 5 4 2 2 3 4 1 2 0 2 1 4 1 4 2 4 b n 0 1h 7 2 2 2 m 2 f 4 0 r 2 6 1 v 0 5 7 2 2 2 m 2 9 2 4 4 0 x 0 2 1 g 1 i 8 2 2 2 14 3 0 h 0 6 2 9 2 p 5 6 h 4 n 2 8 2 0 3 6 1n 1b 2 1 d 6 1n 1 2 0 2 4 2 n 2 0 2 9 2 1 a 0 3 4 2 0 m 3 x 0 1s 7 2 z s 4 38 16 l 0 h 5 5 3 4 0 4 1 8 2 5 c d 0 i 11 2 0 6 0 3 16 2 98 2 3 3 6 2 0 2 3 3 14 2 3 3 w 2 3 3 6 2 0 2 3 3 e 2 1k 2 3 3 1u 12 f h 2d 3 5 4 h7 3 g 2 p 6 22 4 a 8 c 2 3 f h f h f c 2 2 g 1f 10 0 5 0 1w 2g 8 14 2 0 6 1x b u 1e t 3 4 c 17 5 p 1j m a 1g 2b 0 2m 1a i 6 1k t e 1 b 17 r z 16 2 b z 3 8 8 16 3 2 16 3 2 5 2 1 4 0 6 5b 1t 7p 3 5 3 11 3 5 3 7 2 0 2 0 2 0 2 u 3 1g 2 6 2 0 4 2 2 6 4 3 3 5 5 c 6 2 2 6 39 0 e 0 h c 2u 0 5 0 3 9 2 0 3 5 7 0 2 0 2 0 2 f 3 3 6 4 5 0 i 14 22g 1a 2 1a 2 3o 7 3 4 1 d 11 2 0 6 0 3 1j 8 0 h m a 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 fb 2 q 8 8 4 3 4 5 2d 5 4 2 2h 2 3 6 16 2 2l i v 1d f e9 533 1t g70 4 wc 1w 19 3 7g 4 f b 1 l 1a h u 3 27 14 8 3 2u 3 1g 3 8 17 c 2 2 2 3 2 m u 1f f 1d 1r 5 4 0 2 1 c r b m q s 8 1a t 0 h 4 2 9 b 4 2 14 o 2 2 7 l m 4 0 4 1d 2 0 4 1 3 4 3 0 2 0 p 2 3 a 8 2 d 5 3 5 3 5 a 6 2 6 2 16 2 d 7 36 u 8mb d m 5 1c 6it a5 3 2x 13 6 d 4 6 0 2 9 2 c 2 4 2 0 2 1 2 1 2 2z y a2 j 1r 3 1h 15 b 39 4 2 3q 11 p 7 p c 2g 4 5 3 5 3 5 3 2 10 b 2 p 2 i 2 1 2 e 3 d z 3e 1y 1g 7g s 4 1c 1c v e t 6 11 b t 3 z 5 7 2 4 17 4d j z 5 z 5 13 9 1f 4d 8m a l b 7 49 5 3 0 2 17 2 1 4 0 3 m b m a u 1u i 2 1 b l b p 1z 1j 7 1 1t 0 g 3 2 2 2 s 17 s 4 s 10 7 2 r s 1h b l b i e h 33 20 1k 1e e 1e e z 9p 15 7 1 27 s b 0 9 l 2z k s m d 1g 24 18 x o r z u 0 3 0 9 y 4 0 d 1b f 3 m 0 2 0 10 h 2 o 2d 6 2 0 2 3 2 e 2 9 8 1a 13 7 3 1 3 l 2 6 2 1 2 4 4 0 j 0 d 4 4f 1g j 3 l 2 v 1b l 1 2 0 55 1a 16 3 11 1b l 0 1o 16 e 0 20 q 6e 17 39 1r w 7 3 0 3 7 2 1 2 n g 0 2 0 2n 7 3 12 h 0 2 0 t 0 b 13 8 0 m 0 c 19 k 0 z 1k 7c 8 2 10 i 0 1e t 35 6 2 1 2 11 m 0 q 5 2 1 2 v f 0 94 i 5a 0 28 pl 2v 32 i 5f 24d tq 34i g6 6nu fs 8 u 36 t j 1b h 3 w k 6 i j5 1r 3l 22 6 0 1v c 1t 1 2 0 t 4qf 9 yd 17 8 6wo 7y 1e 2 i 3 9 az 1s5 2y 6 c 4 8 8 9 4mf 2c 2 1y 2 1 3 0 3 1 3 3 2 b 2 0 2 6 2 1s 2 3 3 7 2 6 2 r 2 3 2 4 2 0 4 6 2 9f 3 o 2 o 2 u 2 o 2 u 2 o 2 u 2 o 2 u 2 o 2 7 1th 18 b 6 h 0 aa 17 105 5g 1o 1v 8 0 xh 3 2 q 2 1 2 0 3 0 2 9 2 3 2 0 2 0 7 0 5 0 2 0 2 0 2 2 2 1 2 0 3 0 2 0 2 0 2 0 2 0 2 1 2 0 3 3 2 6 2 3 2 3 2 0 2 9 2 g 6 2 2 4 2 g 3et wyl z 378 c 65 3 4g1 f 5rk 2e8 f1 15v 3t6");
}
function initLargeIdContinueRanges() {
  return restoreRanges("53 0 g9 33 o 0 70 4 7e 18 2 0 2 1 2 1 2 0 21 a 1d u 7 0 2u 6 3 5 3 1 2 3 3 9 o 0 v q 2k a g 9 y 8 a 0 p 3 2 8 2 2 2 4 18 2 3c e 2 w 1j 2 2 h 2 6 b 1 3 9 i 2 1l 0 2 6 3 1 3 2 a 0 b 1 3 9 f 0 3 2 1l 0 2 4 5 1 3 2 4 0 l b 4 0 c 2 1l 0 2 7 2 2 2 2 l 1 3 9 b 5 2 2 1l 0 2 6 3 1 3 2 8 2 b 1 3 9 j 0 1o 4 4 2 2 3 a 0 f 9 h 4 1m 6 2 2 2 3 8 1 c 1 3 9 i 2 1l 0 2 6 2 2 2 3 8 1 c 1 3 9 h 3 1k 1 2 6 2 2 2 3 a 0 b 1 3 9 i 2 1z 0 5 5 2 0 2 7 7 9 3 1 1q 0 3 6 d 7 2 9 2g 0 3 8 c 5 3 9 1r 1 7 9 c 0 2 0 2 0 5 1 1e j 2 1 6 a 2 z a 0 2t j 2 9 d 3 5 2 2 2 3 6 4 3 e b 2 e jk 2 a 8 pt 2 u 2 u 1 v 1 1t v a 0 3 9 y 2 3 9 40 0 3b b 5 b b 9 3l a 1p 4 1m 9 2 s 3 a 7 9 n d 2 1 1s 4 1c g c 9 i 8 d 2 v c 3 9 19 d 1d j 9 9 7 9 3b 2 2 k 5 0 7 0 3 2 5j 1l 2 4 g0 1 k 0 3g c 5 0 4 b 2db 2 3y 0 2p v ff 5 2y 1 n7q 9 1y 0 5 9 x 1 29 1 7l 0 4 0 5 0 o 4 5 0 2c 1 1f h b 9 7 h e a t 7 q c 19 3 1c d g 9 c 0 b 9 1c d d 0 9 1 3 9 y 2 1f 0 2 2 3 1 6 1 2 0 16 4 6 1 6l 7 2 1 3 9 fmt 0 ki f h f 4 1 p 2 5d 9 12 0 ji 0 6b 0 46 4 86 9 120 2 2 1 6 3 15 2 5 0 4m 1 fy 3 9 9 aa 1 4a a 4w 2 1i e w 9 g 3 1a a 1i 9 7 2 11 d 2 9 6 1 19 0 d 2 1d d 9 3 2 b 2b b 7 0 4h b 6 9 7 3 1k 1 2 6 3 1 3 2 a 0 b 1 3 6 4 4 5d h a 9 5 0 2a j d 9 5y 6 3 8 s 1 2b g g 9 2a c 9 9 2c e 5 9 6r e 4m 9 1z 5 2 1 3 3 2 0 2 1 d 9 3c 6 3 6 4 0 t 9 15 6 2 3 9 0 a a 1b f ba 7 2 7 h 9 1l l 2 d 3f 5 4 0 2 1 2 6 2 0 9 9 1d 4 2 1 2 4 9 9 96 3 ewa 9 3r 4 1o 6 q 9 s6 0 2 1i 8 3 2a 0 c 1 f58 1 43r 4 4 5 9 7 3 6 v 3 45 2 13e 1d e9 1i 5 1d 9 0 f 0 n 4 2 e 11t 6 2 g 3 6 2 1 2 4 7a 6 a 9 bn d 15j 6 32 6 6 9 3o7 9 gvt3 6n");
}
function isInRange(cp, ranges) {
  let l = 0, r = ranges.length / 2 | 0, i = 0, min = 0, max = 0;
  while (l < r) {
    i = (l + r) / 2 | 0;
    min = ranges[2 * i];
    max = ranges[2 * i + 1];
    if (cp < min) {
      r = i;
    } else if (cp > max) {
      l = i + 1;
    } else {
      return true;
    }
  }
  return false;
}
function restoreRanges(data) {
  let last = 0;
  return data.split(" ").map((s) => last += parseInt(s, 36) | 0);
}
var DataSet = class {
  constructor(raw2018, raw2019, raw2020, raw2021) {
    this._raw2018 = raw2018;
    this._raw2019 = raw2019;
    this._raw2020 = raw2020;
    this._raw2021 = raw2021;
  }
  get es2018() {
    return this._set2018 || (this._set2018 = new Set(this._raw2018.split(" ")));
  }
  get es2019() {
    return this._set2019 || (this._set2019 = new Set(this._raw2019.split(" ")));
  }
  get es2020() {
    return this._set2020 || (this._set2020 = new Set(this._raw2020.split(" ")));
  }
  get es2021() {
    return this._set2021 || (this._set2021 = new Set(this._raw2021.split(" ")));
  }
};
var gcNameSet = /* @__PURE__ */ new Set(["General_Category", "gc"]);
var scNameSet = /* @__PURE__ */ new Set(["Script", "Script_Extensions", "sc", "scx"]);
var gcValueSets = new DataSet("C Cased_Letter Cc Cf Close_Punctuation Cn Co Combining_Mark Connector_Punctuation Control Cs Currency_Symbol Dash_Punctuation Decimal_Number Enclosing_Mark Final_Punctuation Format Initial_Punctuation L LC Letter Letter_Number Line_Separator Ll Lm Lo Lowercase_Letter Lt Lu M Mark Math_Symbol Mc Me Mn Modifier_Letter Modifier_Symbol N Nd Nl No Nonspacing_Mark Number Open_Punctuation Other Other_Letter Other_Number Other_Punctuation Other_Symbol P Paragraph_Separator Pc Pd Pe Pf Pi Po Private_Use Ps Punctuation S Sc Separator Sk Sm So Space_Separator Spacing_Mark Surrogate Symbol Titlecase_Letter Unassigned Uppercase_Letter Z Zl Zp Zs cntrl digit punct", "", "", "");
var scValueSets = new DataSet("Adlam Adlm Aghb Ahom Anatolian_Hieroglyphs Arab Arabic Armenian Armi Armn Avestan Avst Bali Balinese Bamu Bamum Bass Bassa_Vah Batak Batk Beng Bengali Bhaiksuki Bhks Bopo Bopomofo Brah Brahmi Brai Braille Bugi Buginese Buhd Buhid Cakm Canadian_Aboriginal Cans Cari Carian Caucasian_Albanian Chakma Cham Cher Cherokee Common Copt Coptic Cprt Cuneiform Cypriot Cyrillic Cyrl Deseret Deva Devanagari Dsrt Dupl Duployan Egyp Egyptian_Hieroglyphs Elba Elbasan Ethi Ethiopic Geor Georgian Glag Glagolitic Gonm Goth Gothic Gran Grantha Greek Grek Gujarati Gujr Gurmukhi Guru Han Hang Hangul Hani Hano Hanunoo Hatr Hatran Hebr Hebrew Hira Hiragana Hluw Hmng Hung Imperial_Aramaic Inherited Inscriptional_Pahlavi Inscriptional_Parthian Ital Java Javanese Kaithi Kali Kana Kannada Katakana Kayah_Li Khar Kharoshthi Khmer Khmr Khoj Khojki Khudawadi Knda Kthi Lana Lao Laoo Latin Latn Lepc Lepcha Limb Limbu Lina Linb Linear_A Linear_B Lisu Lyci Lycian Lydi Lydian Mahajani Mahj Malayalam Mand Mandaic Mani Manichaean Marc Marchen Masaram_Gondi Meetei_Mayek Mend Mende_Kikakui Merc Mero Meroitic_Cursive Meroitic_Hieroglyphs Miao Mlym Modi Mong Mongolian Mro Mroo Mtei Mult Multani Myanmar Mymr Nabataean Narb Nbat New_Tai_Lue Newa Nko Nkoo Nshu Nushu Ogam Ogham Ol_Chiki Olck Old_Hungarian Old_Italic Old_North_Arabian Old_Permic Old_Persian Old_South_Arabian Old_Turkic Oriya Orkh Orya Osage Osge Osma Osmanya Pahawh_Hmong Palm Palmyrene Pau_Cin_Hau Pauc Perm Phag Phags_Pa Phli Phlp Phnx Phoenician Plrd Prti Psalter_Pahlavi Qaac Qaai Rejang Rjng Runic Runr Samaritan Samr Sarb Saur Saurashtra Sgnw Sharada Shavian Shaw Shrd Sidd Siddham SignWriting Sind Sinh Sinhala Sora Sora_Sompeng Soyo Soyombo Sund Sundanese Sylo Syloti_Nagri Syrc Syriac Tagalog Tagb Tagbanwa Tai_Le Tai_Tham Tai_Viet Takr Takri Tale Talu Tamil Taml Tang Tangut Tavt Telu Telugu Tfng Tglg Thaa Thaana Thai Tibetan Tibt Tifinagh Tirh Tirhuta Ugar Ugaritic Vai Vaii Wara Warang_Citi Xpeo Xsux Yi Yiii Zanabazar_Square Zanb Zinh Zyyy", "Dogr Dogra Gong Gunjala_Gondi Hanifi_Rohingya Maka Makasar Medefaidrin Medf Old_Sogdian Rohg Sogd Sogdian Sogo", "Elym Elymaic Hmnp Nand Nandinagari Nyiakeng_Puachue_Hmong Wancho Wcho", "Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi");
var binPropertySets = new DataSet("AHex ASCII ASCII_Hex_Digit Alpha Alphabetic Any Assigned Bidi_C Bidi_Control Bidi_M Bidi_Mirrored CI CWCF CWCM CWKCF CWL CWT CWU Case_Ignorable Cased Changes_When_Casefolded Changes_When_Casemapped Changes_When_Lowercased Changes_When_NFKC_Casefolded Changes_When_Titlecased Changes_When_Uppercased DI Dash Default_Ignorable_Code_Point Dep Deprecated Dia Diacritic Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Ext Extender Gr_Base Gr_Ext Grapheme_Base Grapheme_Extend Hex Hex_Digit IDC IDS IDSB IDST IDS_Binary_Operator IDS_Trinary_Operator ID_Continue ID_Start Ideo Ideographic Join_C Join_Control LOE Logical_Order_Exception Lower Lowercase Math NChar Noncharacter_Code_Point Pat_Syn Pat_WS Pattern_Syntax Pattern_White_Space QMark Quotation_Mark RI Radical Regional_Indicator SD STerm Sentence_Terminal Soft_Dotted Term Terminal_Punctuation UIdeo Unified_Ideograph Upper Uppercase VS Variation_Selector White_Space XIDC XIDS XID_Continue XID_Start space", "Extended_Pictographic", "", "EBase EComp EMod EPres ExtPict");
function isValidUnicodeProperty(version, name, value) {
  if (gcNameSet.has(name)) {
    return version >= 2018 && gcValueSets.es2018.has(value);
  }
  if (scNameSet.has(name)) {
    return version >= 2018 && scValueSets.es2018.has(value) || version >= 2019 && scValueSets.es2019.has(value) || version >= 2020 && scValueSets.es2020.has(value) || version >= 2021 && scValueSets.es2021.has(value);
  }
  return false;
}
function isValidLoneUnicodeProperty(version, value) {
  return version >= 2018 && binPropertySets.es2018.has(value) || version >= 2019 && binPropertySets.es2019.has(value) || version >= 2021 && binPropertySets.es2021.has(value);
}
var Backspace = 8;
var CharacterTabulation = 9;
var LineFeed = 10;
var LineTabulation = 11;
var FormFeed = 12;
var CarriageReturn = 13;
var ExclamationMark = 33;
var DollarSign = 36;
var LeftParenthesis = 40;
var RightParenthesis = 41;
var Asterisk = 42;
var PlusSign = 43;
var Comma = 44;
var HyphenMinus = 45;
var FullStop = 46;
var Solidus = 47;
var DigitZero = 48;
var DigitOne = 49;
var DigitSeven = 55;
var DigitNine = 57;
var Colon = 58;
var LessThanSign = 60;
var EqualsSign = 61;
var GreaterThanSign = 62;
var QuestionMark = 63;
var LatinCapitalLetterA = 65;
var LatinCapitalLetterB = 66;
var LatinCapitalLetterD = 68;
var LatinCapitalLetterF = 70;
var LatinCapitalLetterP = 80;
var LatinCapitalLetterS = 83;
var LatinCapitalLetterW = 87;
var LatinCapitalLetterZ = 90;
var LowLine = 95;
var LatinSmallLetterA = 97;
var LatinSmallLetterB = 98;
var LatinSmallLetterC = 99;
var LatinSmallLetterD = 100;
var LatinSmallLetterF = 102;
var LatinSmallLetterG = 103;
var LatinSmallLetterI = 105;
var LatinSmallLetterK = 107;
var LatinSmallLetterM = 109;
var LatinSmallLetterN = 110;
var LatinSmallLetterP = 112;
var LatinSmallLetterR = 114;
var LatinSmallLetterS = 115;
var LatinSmallLetterT = 116;
var LatinSmallLetterU = 117;
var LatinSmallLetterV = 118;
var LatinSmallLetterW = 119;
var LatinSmallLetterX = 120;
var LatinSmallLetterY = 121;
var LatinSmallLetterZ = 122;
var LeftSquareBracket = 91;
var ReverseSolidus = 92;
var RightSquareBracket = 93;
var CircumflexAccent = 94;
var LeftCurlyBracket = 123;
var VerticalLine = 124;
var RightCurlyBracket = 125;
var ZeroWidthNonJoiner = 8204;
var ZeroWidthJoiner = 8205;
var LineSeparator = 8232;
var ParagraphSeparator = 8233;
var MinCodePoint = 0;
var MaxCodePoint = 1114111;
function isLatinLetter(code2) {
  return code2 >= LatinCapitalLetterA && code2 <= LatinCapitalLetterZ || code2 >= LatinSmallLetterA && code2 <= LatinSmallLetterZ;
}
function isDecimalDigit(code2) {
  return code2 >= DigitZero && code2 <= DigitNine;
}
function isOctalDigit(code2) {
  return code2 >= DigitZero && code2 <= DigitSeven;
}
function isHexDigit(code2) {
  return code2 >= DigitZero && code2 <= DigitNine || code2 >= LatinCapitalLetterA && code2 <= LatinCapitalLetterF || code2 >= LatinSmallLetterA && code2 <= LatinSmallLetterF;
}
function isLineTerminator(code2) {
  return code2 === LineFeed || code2 === CarriageReturn || code2 === LineSeparator || code2 === ParagraphSeparator;
}
function isValidUnicode(code2) {
  return code2 >= MinCodePoint && code2 <= MaxCodePoint;
}
function digitToInt(code2) {
  if (code2 >= LatinSmallLetterA && code2 <= LatinSmallLetterF) {
    return code2 - LatinSmallLetterA + 10;
  }
  if (code2 >= LatinCapitalLetterA && code2 <= LatinCapitalLetterF) {
    return code2 - LatinCapitalLetterA + 10;
  }
  return code2 - DigitZero;
}
function isLeadSurrogate(code2) {
  return code2 >= 55296 && code2 <= 56319;
}
function isTrailSurrogate(code2) {
  return code2 >= 56320 && code2 <= 57343;
}
function combineSurrogatePair(lead, trail) {
  return (lead - 55296) * 1024 + (trail - 56320) + 65536;
}
var legacyImpl = {
  at(s, end, i) {
    return i < end ? s.charCodeAt(i) : -1;
  },
  width(c) {
    return 1;
  }
};
var unicodeImpl = {
  at(s, end, i) {
    return i < end ? s.codePointAt(i) : -1;
  },
  width(c) {
    return c > 65535 ? 2 : 1;
  }
};
var Reader = class {
  constructor() {
    this._impl = legacyImpl;
    this._s = "";
    this._i = 0;
    this._end = 0;
    this._cp1 = -1;
    this._w1 = 1;
    this._cp2 = -1;
    this._w2 = 1;
    this._cp3 = -1;
    this._w3 = 1;
    this._cp4 = -1;
  }
  get source() {
    return this._s;
  }
  get index() {
    return this._i;
  }
  get currentCodePoint() {
    return this._cp1;
  }
  get nextCodePoint() {
    return this._cp2;
  }
  get nextCodePoint2() {
    return this._cp3;
  }
  get nextCodePoint3() {
    return this._cp4;
  }
  reset(source, start, end, uFlag) {
    this._impl = uFlag ? unicodeImpl : legacyImpl;
    this._s = source;
    this._end = end;
    this.rewind(start);
  }
  rewind(index) {
    const impl = this._impl;
    this._i = index;
    this._cp1 = impl.at(this._s, this._end, index);
    this._w1 = impl.width(this._cp1);
    this._cp2 = impl.at(this._s, this._end, index + this._w1);
    this._w2 = impl.width(this._cp2);
    this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2);
    this._w3 = impl.width(this._cp3);
    this._cp4 = impl.at(this._s, this._end, index + this._w1 + this._w2 + this._w3);
  }
  advance() {
    if (this._cp1 !== -1) {
      const impl = this._impl;
      this._i += this._w1;
      this._cp1 = this._cp2;
      this._w1 = this._w2;
      this._cp2 = this._cp3;
      this._w2 = impl.width(this._cp2);
      this._cp3 = this._cp4;
      this._w3 = impl.width(this._cp3);
      this._cp4 = impl.at(this._s, this._end, this._i + this._w1 + this._w2 + this._w3);
    }
  }
  eat(cp) {
    if (this._cp1 === cp) {
      this.advance();
      return true;
    }
    return false;
  }
  eat2(cp1, cp2) {
    if (this._cp1 === cp1 && this._cp2 === cp2) {
      this.advance();
      this.advance();
      return true;
    }
    return false;
  }
  eat3(cp1, cp2, cp3) {
    if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {
      this.advance();
      this.advance();
      this.advance();
      return true;
    }
    return false;
  }
};
var RegExpSyntaxError = class extends SyntaxError {
  constructor(source, uFlag, index, message) {
    if (source) {
      if (!source.startsWith("/")) {
        source = `/${source}/${uFlag ? "u" : ""}`;
      }
      source = `: ${source}`;
    }
    super(`Invalid regular expression${source}: ${message}`);
    this.index = index;
  }
};
function isSyntaxCharacter(cp) {
  return cp === CircumflexAccent || cp === DollarSign || cp === ReverseSolidus || cp === FullStop || cp === Asterisk || cp === PlusSign || cp === QuestionMark || cp === LeftParenthesis || cp === RightParenthesis || cp === LeftSquareBracket || cp === RightSquareBracket || cp === LeftCurlyBracket || cp === RightCurlyBracket || cp === VerticalLine;
}
function isRegExpIdentifierStart(cp) {
  return isIdStart(cp) || cp === DollarSign || cp === LowLine;
}
function isRegExpIdentifierPart(cp) {
  return isIdContinue(cp) || cp === DollarSign || cp === LowLine || cp === ZeroWidthNonJoiner || cp === ZeroWidthJoiner;
}
function isUnicodePropertyNameCharacter(cp) {
  return isLatinLetter(cp) || cp === LowLine;
}
function isUnicodePropertyValueCharacter(cp) {
  return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp);
}
var RegExpValidator = class {
  constructor(options) {
    this._reader = new Reader();
    this._uFlag = false;
    this._nFlag = false;
    this._lastIntValue = 0;
    this._lastMinValue = 0;
    this._lastMaxValue = 0;
    this._lastStrValue = "";
    this._lastKeyValue = "";
    this._lastValValue = "";
    this._lastAssertionIsQuantifiable = false;
    this._numCapturingParens = 0;
    this._groupNames = /* @__PURE__ */ new Set();
    this._backreferenceNames = /* @__PURE__ */ new Set();
    this._options = options || {};
  }
  validateLiteral(source, start = 0, end = source.length) {
    this._uFlag = this._nFlag = false;
    this.reset(source, start, end);
    this.onLiteralEnter(start);
    if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {
      const flagStart = this.index;
      const uFlag = source.includes("u", flagStart);
      this.validateFlags(source, flagStart, end);
      this.validatePattern(source, start + 1, flagStart - 1, uFlag);
    } else if (start >= end) {
      this.raise("Empty");
    } else {
      const c = String.fromCodePoint(this.currentCodePoint);
      this.raise(`Unexpected character '${c}'`);
    }
    this.onLiteralLeave(start, end);
  }
  validateFlags(source, start = 0, end = source.length) {
    const existingFlags = /* @__PURE__ */ new Set();
    let global = false;
    let ignoreCase = false;
    let multiline = false;
    let sticky = false;
    let unicode = false;
    let dotAll = false;
    let hasIndices = false;
    for (let i = start; i < end; ++i) {
      const flag = source.charCodeAt(i);
      if (existingFlags.has(flag)) {
        this.raise(`Duplicated flag '${source[i]}'`);
      }
      existingFlags.add(flag);
      if (flag === LatinSmallLetterG) {
        global = true;
      } else if (flag === LatinSmallLetterI) {
        ignoreCase = true;
      } else if (flag === LatinSmallLetterM) {
        multiline = true;
      } else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {
        unicode = true;
      } else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {
        sticky = true;
      } else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {
        dotAll = true;
      } else if (flag === LatinSmallLetterD && this.ecmaVersion >= 2022) {
        hasIndices = true;
      } else {
        this.raise(`Invalid flag '${source[i]}'`);
      }
    }
    this.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices);
  }
  validatePattern(source, start = 0, end = source.length, uFlag = false) {
    this._uFlag = uFlag && this.ecmaVersion >= 2015;
    this._nFlag = uFlag && this.ecmaVersion >= 2018;
    this.reset(source, start, end);
    this.consumePattern();
    if (!this._nFlag && this.ecmaVersion >= 2018 && this._groupNames.size > 0) {
      this._nFlag = true;
      this.rewind(start);
      this.consumePattern();
    }
  }
  get strict() {
    return Boolean(this._options.strict || this._uFlag);
  }
  get ecmaVersion() {
    return this._options.ecmaVersion || 2022;
  }
  onLiteralEnter(start) {
    if (this._options.onLiteralEnter) {
      this._options.onLiteralEnter(start);
    }
  }
  onLiteralLeave(start, end) {
    if (this._options.onLiteralLeave) {
      this._options.onLiteralLeave(start, end);
    }
  }
  onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices) {
    if (this._options.onFlags) {
      this._options.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices);
    }
  }
  onPatternEnter(start) {
    if (this._options.onPatternEnter) {
      this._options.onPatternEnter(start);
    }
  }
  onPatternLeave(start, end) {
    if (this._options.onPatternLeave) {
      this._options.onPatternLeave(start, end);
    }
  }
  onDisjunctionEnter(start) {
    if (this._options.onDisjunctionEnter) {
      this._options.onDisjunctionEnter(start);
    }
  }
  onDisjunctionLeave(start, end) {
    if (this._options.onDisjunctionLeave) {
      this._options.onDisjunctionLeave(start, end);
    }
  }
  onAlternativeEnter(start, index) {
    if (this._options.onAlternativeEnter) {
      this._options.onAlternativeEnter(start, index);
    }
  }
  onAlternativeLeave(start, end, index) {
    if (this._options.onAlternativeLeave) {
      this._options.onAlternativeLeave(start, end, index);
    }
  }
  onGroupEnter(start) {
    if (this._options.onGroupEnter) {
      this._options.onGroupEnter(start);
    }
  }
  onGroupLeave(start, end) {
    if (this._options.onGroupLeave) {
      this._options.onGroupLeave(start, end);
    }
  }
  onCapturingGroupEnter(start, name) {
    if (this._options.onCapturingGroupEnter) {
      this._options.onCapturingGroupEnter(start, name);
    }
  }
  onCapturingGroupLeave(start, end, name) {
    if (this._options.onCapturingGroupLeave) {
      this._options.onCapturingGroupLeave(start, end, name);
    }
  }
  onQuantifier(start, end, min, max, greedy) {
    if (this._options.onQuantifier) {
      this._options.onQuantifier(start, end, min, max, greedy);
    }
  }
  onLookaroundAssertionEnter(start, kind, negate) {
    if (this._options.onLookaroundAssertionEnter) {
      this._options.onLookaroundAssertionEnter(start, kind, negate);
    }
  }
  onLookaroundAssertionLeave(start, end, kind, negate) {
    if (this._options.onLookaroundAssertionLeave) {
      this._options.onLookaroundAssertionLeave(start, end, kind, negate);
    }
  }
  onEdgeAssertion(start, end, kind) {
    if (this._options.onEdgeAssertion) {
      this._options.onEdgeAssertion(start, end, kind);
    }
  }
  onWordBoundaryAssertion(start, end, kind, negate) {
    if (this._options.onWordBoundaryAssertion) {
      this._options.onWordBoundaryAssertion(start, end, kind, negate);
    }
  }
  onAnyCharacterSet(start, end, kind) {
    if (this._options.onAnyCharacterSet) {
      this._options.onAnyCharacterSet(start, end, kind);
    }
  }
  onEscapeCharacterSet(start, end, kind, negate) {
    if (this._options.onEscapeCharacterSet) {
      this._options.onEscapeCharacterSet(start, end, kind, negate);
    }
  }
  onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {
    if (this._options.onUnicodePropertyCharacterSet) {
      this._options.onUnicodePropertyCharacterSet(start, end, kind, key, value, negate);
    }
  }
  onCharacter(start, end, value) {
    if (this._options.onCharacter) {
      this._options.onCharacter(start, end, value);
    }
  }
  onBackreference(start, end, ref) {
    if (this._options.onBackreference) {
      this._options.onBackreference(start, end, ref);
    }
  }
  onCharacterClassEnter(start, negate) {
    if (this._options.onCharacterClassEnter) {
      this._options.onCharacterClassEnter(start, negate);
    }
  }
  onCharacterClassLeave(start, end, negate) {
    if (this._options.onCharacterClassLeave) {
      this._options.onCharacterClassLeave(start, end, negate);
    }
  }
  onCharacterClassRange(start, end, min, max) {
    if (this._options.onCharacterClassRange) {
      this._options.onCharacterClassRange(start, end, min, max);
    }
  }
  get source() {
    return this._reader.source;
  }
  get index() {
    return this._reader.index;
  }
  get currentCodePoint() {
    return this._reader.currentCodePoint;
  }
  get nextCodePoint() {
    return this._reader.nextCodePoint;
  }
  get nextCodePoint2() {
    return this._reader.nextCodePoint2;
  }
  get nextCodePoint3() {
    return this._reader.nextCodePoint3;
  }
  reset(source, start, end) {
    this._reader.reset(source, start, end, this._uFlag);
  }
  rewind(index) {
    this._reader.rewind(index);
  }
  advance() {
    this._reader.advance();
  }
  eat(cp) {
    return this._reader.eat(cp);
  }
  eat2(cp1, cp2) {
    return this._reader.eat2(cp1, cp2);
  }
  eat3(cp1, cp2, cp3) {
    return this._reader.eat3(cp1, cp2, cp3);
  }
  raise(message) {
    throw new RegExpSyntaxError(this.source, this._uFlag, this.index, message);
  }
  eatRegExpBody() {
    const start = this.index;
    let inClass = false;
    let escaped = false;
    for (; ; ) {
      const cp = this.currentCodePoint;
      if (cp === -1 || isLineTerminator(cp)) {
        const kind = inClass ? "character class" : "regular expression";
        this.raise(`Unterminated ${kind}`);
      }
      if (escaped) {
        escaped = false;
      } else if (cp === ReverseSolidus) {
        escaped = true;
      } else if (cp === LeftSquareBracket) {
        inClass = true;
      } else if (cp === RightSquareBracket) {
        inClass = false;
      } else if (cp === Solidus && !inClass || cp === Asterisk && this.index === start) {
        break;
      }
      this.advance();
    }
    return this.index !== start;
  }
  consumePattern() {
    const start = this.index;
    this._numCapturingParens = this.countCapturingParens();
    this._groupNames.clear();
    this._backreferenceNames.clear();
    this.onPatternEnter(start);
    this.consumeDisjunction();
    const cp = this.currentCodePoint;
    if (this.currentCodePoint !== -1) {
      if (cp === RightParenthesis) {
        this.raise("Unmatched ')'");
      }
      if (cp === ReverseSolidus) {
        this.raise("\\ at end of pattern");
      }
      if (cp === RightSquareBracket || cp === RightCurlyBracket) {
        this.raise("Lone quantifier brackets");
      }
      const c = String.fromCodePoint(cp);
      this.raise(`Unexpected character '${c}'`);
    }
    for (const name of this._backreferenceNames) {
      if (!this._groupNames.has(name)) {
        this.raise("Invalid named capture referenced");
      }
    }
    this.onPatternLeave(start, this.index);
  }
  countCapturingParens() {
    const start = this.index;
    let inClass = false;
    let escaped = false;
    let count = 0;
    let cp = 0;
    while ((cp = this.currentCodePoint) !== -1) {
      if (escaped) {
        escaped = false;
      } else if (cp === ReverseSolidus) {
        escaped = true;
      } else if (cp === LeftSquareBracket) {
        inClass = true;
      } else if (cp === RightSquareBracket) {
        inClass = false;
      } else if (cp === LeftParenthesis && !inClass && (this.nextCodePoint !== QuestionMark || this.nextCodePoint2 === LessThanSign && this.nextCodePoint3 !== EqualsSign && this.nextCodePoint3 !== ExclamationMark)) {
        count += 1;
      }
      this.advance();
    }
    this.rewind(start);
    return count;
  }
  consumeDisjunction() {
    const start = this.index;
    let i = 0;
    this.onDisjunctionEnter(start);
    do {
      this.consumeAlternative(i++);
    } while (this.eat(VerticalLine));
    if (this.consumeQuantifier(true)) {
      this.raise("Nothing to repeat");
    }
    if (this.eat(LeftCurlyBracket)) {
      this.raise("Lone quantifier brackets");
    }
    this.onDisjunctionLeave(start, this.index);
  }
  consumeAlternative(i) {
    const start = this.index;
    this.onAlternativeEnter(start, i);
    while (this.currentCodePoint !== -1 && this.consumeTerm()) {
    }
    this.onAlternativeLeave(start, this.index, i);
  }
  consumeTerm() {
    if (this._uFlag || this.strict) {
      return this.consumeAssertion() || this.consumeAtom() && this.consumeOptionalQuantifier();
    }
    return this.consumeAssertion() && (!this._lastAssertionIsQuantifiable || this.consumeOptionalQuantifier()) || this.consumeExtendedAtom() && this.consumeOptionalQuantifier();
  }
  consumeOptionalQuantifier() {
    this.consumeQuantifier();
    return true;
  }
  consumeAssertion() {
    const start = this.index;
    this._lastAssertionIsQuantifiable = false;
    if (this.eat(CircumflexAccent)) {
      this.onEdgeAssertion(start, this.index, "start");
      return true;
    }
    if (this.eat(DollarSign)) {
      this.onEdgeAssertion(start, this.index, "end");
      return true;
    }
    if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {
      this.onWordBoundaryAssertion(start, this.index, "word", true);
      return true;
    }
    if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {
      this.onWordBoundaryAssertion(start, this.index, "word", false);
      return true;
    }
    if (this.eat2(LeftParenthesis, QuestionMark)) {
      const lookbehind = this.ecmaVersion >= 2018 && this.eat(LessThanSign);
      let negate = false;
      if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {
        const kind = lookbehind ? "lookbehind" : "lookahead";
        this.onLookaroundAssertionEnter(start, kind, negate);
        this.consumeDisjunction();
        if (!this.eat(RightParenthesis)) {
          this.raise("Unterminated group");
        }
        this._lastAssertionIsQuantifiable = !lookbehind && !this.strict;
        this.onLookaroundAssertionLeave(start, this.index, kind, negate);
        return true;
      }
      this.rewind(start);
    }
    return false;
  }
  consumeQuantifier(noConsume = false) {
    const start = this.index;
    let min = 0;
    let max = 0;
    let greedy = false;
    if (this.eat(Asterisk)) {
      min = 0;
      max = Number.POSITIVE_INFINITY;
    } else if (this.eat(PlusSign)) {
      min = 1;
      max = Number.POSITIVE_INFINITY;
    } else if (this.eat(QuestionMark)) {
      min = 0;
      max = 1;
    } else if (this.eatBracedQuantifier(noConsume)) {
      min = this._lastMinValue;
      max = this._lastMaxValue;
    } else {
      return false;
    }
    greedy = !this.eat(QuestionMark);
    if (!noConsume) {
      this.onQuantifier(start, this.index, min, max, greedy);
    }
    return true;
  }
  eatBracedQuantifier(noError) {
    const start = this.index;
    if (this.eat(LeftCurlyBracket)) {
      this._lastMinValue = 0;
      this._lastMaxValue = Number.POSITIVE_INFINITY;
      if (this.eatDecimalDigits()) {
        this._lastMinValue = this._lastMaxValue = this._lastIntValue;
        if (this.eat(Comma)) {
          this._lastMaxValue = this.eatDecimalDigits() ? this._lastIntValue : Number.POSITIVE_INFINITY;
        }
        if (this.eat(RightCurlyBracket)) {
          if (!noError && this._lastMaxValue < this._lastMinValue) {
            this.raise("numbers out of order in {} quantifier");
          }
          return true;
        }
      }
      if (!noError && (this._uFlag || this.strict)) {
        this.raise("Incomplete quantifier");
      }
      this.rewind(start);
    }
    return false;
  }
  consumeAtom() {
    return this.consumePatternCharacter() || this.consumeDot() || this.consumeReverseSolidusAtomEscape() || this.consumeCharacterClass() || this.consumeUncapturingGroup() || this.consumeCapturingGroup();
  }
  consumeDot() {
    if (this.eat(FullStop)) {
      this.onAnyCharacterSet(this.index - 1, this.index, "any");
      return true;
    }
    return false;
  }
  consumeReverseSolidusAtomEscape() {
    const start = this.index;
    if (this.eat(ReverseSolidus)) {
      if (this.consumeAtomEscape()) {
        return true;
      }
      this.rewind(start);
    }
    return false;
  }
  consumeUncapturingGroup() {
    const start = this.index;
    if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {
      this.onGroupEnter(start);
      this.consumeDisjunction();
      if (!this.eat(RightParenthesis)) {
        this.raise("Unterminated group");
      }
      this.onGroupLeave(start, this.index);
      return true;
    }
    return false;
  }
  consumeCapturingGroup() {
    const start = this.index;
    if (this.eat(LeftParenthesis)) {
      let name = null;
      if (this.ecmaVersion >= 2018) {
        if (this.consumeGroupSpecifier()) {
          name = this._lastStrValue;
        }
      } else if (this.currentCodePoint === QuestionMark) {
        this.raise("Invalid group");
      }
      this.onCapturingGroupEnter(start, name);
      this.consumeDisjunction();
      if (!this.eat(RightParenthesis)) {
        this.raise("Unterminated group");
      }
      this.onCapturingGroupLeave(start, this.index, name);
      return true;
    }
    return false;
  }
  consumeExtendedAtom() {
    return this.consumeDot() || this.consumeReverseSolidusAtomEscape() || this.consumeReverseSolidusFollowedByC() || this.consumeCharacterClass() || this.consumeUncapturingGroup() || this.consumeCapturingGroup() || this.consumeInvalidBracedQuantifier() || this.consumeExtendedPatternCharacter();
  }
  consumeReverseSolidusFollowedByC() {
    const start = this.index;
    if (this.currentCodePoint === ReverseSolidus && this.nextCodePoint === LatinSmallLetterC) {
      this._lastIntValue = this.currentCodePoint;
      this.advance();
      this.onCharacter(start, this.index, ReverseSolidus);
      return true;
    }
    return false;
  }
  consumeInvalidBracedQuantifier() {
    if (this.eatBracedQuantifier(true)) {
      this.raise("Nothing to repeat");
    }
    return false;
  }
  consumePatternCharacter() {
    const start = this.index;
    const cp = this.currentCodePoint;
    if (cp !== -1 && !isSyntaxCharacter(cp)) {
      this.advance();
      this.onCharacter(start, this.index, cp);
      return true;
    }
    return false;
  }
  consumeExtendedPatternCharacter() {
    const start = this.index;
    const cp = this.currentCodePoint;
    if (cp !== -1 && cp !== CircumflexAccent && cp !== DollarSign && cp !== ReverseSolidus && cp !== FullStop && cp !== Asterisk && cp !== PlusSign && cp !== QuestionMark && cp !== LeftParenthesis && cp !== RightParenthesis && cp !== LeftSquareBracket && cp !== VerticalLine) {
      this.advance();
      this.onCharacter(start, this.index, cp);
      return true;
    }
    return false;
  }
  consumeGroupSpecifier() {
    if (this.eat(QuestionMark)) {
      if (this.eatGroupName()) {
        if (!this._groupNames.has(this._lastStrValue)) {
          this._groupNames.add(this._lastStrValue);
          return true;
        }
        this.raise("Duplicate capture group name");
      }
      this.raise("Invalid group");
    }
    return false;
  }
  consumeAtomEscape() {
    if (this.consumeBackreference() || this.consumeCharacterClassEscape() || this.consumeCharacterEscape() || this._nFlag && this.consumeKGroupName()) {
      return true;
    }
    if (this.strict || this._uFlag) {
      this.raise("Invalid escape");
    }
    return false;
  }
  consumeBackreference() {
    const start = this.index;
    if (this.eatDecimalEscape()) {
      const n = this._lastIntValue;
      if (n <= this._numCapturingParens) {
        this.onBackreference(start - 1, this.index, n);
        return true;
      }
      if (this.strict || this._uFlag) {
        this.raise("Invalid escape");
      }
      this.rewind(start);
    }
    return false;
  }
  consumeCharacterClassEscape() {
    const start = this.index;
    if (this.eat(LatinSmallLetterD)) {
      this._lastIntValue = -1;
      this.onEscapeCharacterSet(start - 1, this.index, "digit", false);
      return true;
    }
    if (this.eat(LatinCapitalLetterD)) {
      this._lastIntValue = -1;
      this.onEscapeCharacterSet(start - 1, this.index, "digit", true);
      return true;
    }
    if (this.eat(LatinSmallLetterS)) {
      this._lastIntValue = -1;
      this.onEscapeCharacterSet(start - 1, this.index, "space", false);
      return true;
    }
    if (this.eat(LatinCapitalLetterS)) {
      this._lastIntValue = -1;
      this.onEscapeCharacterSet(start - 1, this.index, "space", true);
      return true;
    }
    if (this.eat(LatinSmallLetterW)) {
      this._lastIntValue = -1;
      this.onEscapeCharacterSet(start - 1, this.index, "word", false);
      return true;
    }
    if (this.eat(LatinCapitalLetterW)) {
      this._lastIntValue = -1;
      this.onEscapeCharacterSet(start - 1, this.index, "word", true);
      return true;
    }
    let negate = false;
    if (this._uFlag && this.ecmaVersion >= 2018 && (this.eat(LatinSmallLetterP) || (negate = this.eat(LatinCapitalLetterP)))) {
      this._lastIntValue = -1;
      if (this.eat(LeftCurlyBracket) && this.eatUnicodePropertyValueExpression() && this.eat(RightCurlyBracket)) {
        this.onUnicodePropertyCharacterSet(start - 1, this.index, "property", this._lastKeyValue, this._lastValValue || null, negate);
        return true;
      }
      this.raise("Invalid property name");
    }
    return false;
  }
  consumeCharacterEscape() {
    const start = this.index;
    if (this.eatControlEscape() || this.eatCControlLetter() || this.eatZero() || this.eatHexEscapeSequence() || this.eatRegExpUnicodeEscapeSequence() || !this.strict && !this._uFlag && this.eatLegacyOctalEscapeSequence() || this.eatIdentityEscape()) {
      this.onCharacter(start - 1, this.index, this._lastIntValue);
      return true;
    }
    return false;
  }
  consumeKGroupName() {
    const start = this.index;
    if (this.eat(LatinSmallLetterK)) {
      if (this.eatGroupName()) {
        const groupName = this._lastStrValue;
        this._backreferenceNames.add(groupName);
        this.onBackreference(start - 1, this.index, groupName);
        return true;
      }
      this.raise("Invalid named reference");
    }
    return false;
  }
  consumeCharacterClass() {
    const start = this.index;
    if (this.eat(LeftSquareBracket)) {
      const negate = this.eat(CircumflexAccent);
      this.onCharacterClassEnter(start, negate);
      this.consumeClassRanges();
      if (!this.eat(RightSquareBracket)) {
        this.raise("Unterminated character class");
      }
      this.onCharacterClassLeave(start, this.index, negate);
      return true;
    }
    return false;
  }
  consumeClassRanges() {
    const strict = this.strict || this._uFlag;
    for (; ; ) {
      const rangeStart = this.index;
      if (!this.consumeClassAtom()) {
        break;
      }
      const min = this._lastIntValue;
      if (!this.eat(HyphenMinus)) {
        continue;
      }
      this.onCharacter(this.index - 1, this.index, HyphenMinus);
      if (!this.consumeClassAtom()) {
        break;
      }
      const max = this._lastIntValue;
      if (min === -1 || max === -1) {
        if (strict) {
          this.raise("Invalid character class");
        }
        continue;
      }
      if (min > max) {
        this.raise("Range out of order in character class");
      }
      this.onCharacterClassRange(rangeStart, this.index, min, max);
    }
  }
  consumeClassAtom() {
    const start = this.index;
    const cp = this.currentCodePoint;
    if (cp !== -1 && cp !== ReverseSolidus && cp !== RightSquareBracket) {
      this.advance();
      this._lastIntValue = cp;
      this.onCharacter(start, this.index, this._lastIntValue);
      return true;
    }
    if (this.eat(ReverseSolidus)) {
      if (this.consumeClassEscape()) {
        return true;
      }
      if (!this.strict && this.currentCodePoint === LatinSmallLetterC) {
        this._lastIntValue = ReverseSolidus;
        this.onCharacter(start, this.index, this._lastIntValue);
        return true;
      }
      if (this.strict || this._uFlag) {
        this.raise("Invalid escape");
      }
      this.rewind(start);
    }
    return false;
  }
  consumeClassEscape() {
    const start = this.index;
    if (this.eat(LatinSmallLetterB)) {
      this._lastIntValue = Backspace;
      this.onCharacter(start - 1, this.index, this._lastIntValue);
      return true;
    }
    if (this._uFlag && this.eat(HyphenMinus)) {
      this._lastIntValue = HyphenMinus;
      this.onCharacter(start - 1, this.index, this._lastIntValue);
      return true;
    }
    let cp = 0;
    if (!this.strict && !this._uFlag && this.currentCodePoint === LatinSmallLetterC && (isDecimalDigit(cp = this.nextCodePoint) || cp === LowLine)) {
      this.advance();
      this.advance();
      this._lastIntValue = cp % 32;
      this.onCharacter(start - 1, this.index, this._lastIntValue);
      return true;
    }
    return this.consumeCharacterClassEscape() || this.consumeCharacterEscape();
  }
  eatGroupName() {
    if (this.eat(LessThanSign)) {
      if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {
        return true;
      }
      this.raise("Invalid capture group name");
    }
    return false;
  }
  eatRegExpIdentifierName() {
    if (this.eatRegExpIdentifierStart()) {
      this._lastStrValue = String.fromCodePoint(this._lastIntValue);
      while (this.eatRegExpIdentifierPart()) {
        this._lastStrValue += String.fromCodePoint(this._lastIntValue);
      }
      return true;
    }
    return false;
  }
  eatRegExpIdentifierStart() {
    const start = this.index;
    const forceUFlag = !this._uFlag && this.ecmaVersion >= 2020;
    let cp = this.currentCodePoint;
    this.advance();
    if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence(forceUFlag)) {
      cp = this._lastIntValue;
    } else if (forceUFlag && isLeadSurrogate(cp) && isTrailSurrogate(this.currentCodePoint)) {
      cp = combineSurrogatePair(cp, this.currentCodePoint);
      this.advance();
    }
    if (isRegExpIdentifierStart(cp)) {
      this._lastIntValue = cp;
      return true;
    }
    if (this.index !== start) {
      this.rewind(start);
    }
    return false;
  }
  eatRegExpIdentifierPart() {
    const start = this.index;
    const forceUFlag = !this._uFlag && this.ecmaVersion >= 2020;
    let cp = this.currentCodePoint;
    this.advance();
    if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence(forceUFlag)) {
      cp = this._lastIntValue;
    } else if (forceUFlag && isLeadSurrogate(cp) && isTrailSurrogate(this.currentCodePoint)) {
      cp = combineSurrogatePair(cp, this.currentCodePoint);
      this.advance();
    }
    if (isRegExpIdentifierPart(cp)) {
      this._lastIntValue = cp;
      return true;
    }
    if (this.index !== start) {
      this.rewind(start);
    }
    return false;
  }
  eatCControlLetter() {
    const start = this.index;
    if (this.eat(LatinSmallLetterC)) {
      if (this.eatControlLetter()) {
        return true;
      }
      this.rewind(start);
    }
    return false;
  }
  eatZero() {
    if (this.currentCodePoint === DigitZero && !isDecimalDigit(this.nextCodePoint)) {
      this._lastIntValue = 0;
      this.advance();
      return true;
    }
    return false;
  }
  eatControlEscape() {
    if (this.eat(LatinSmallLetterF)) {
      this._lastIntValue = FormFeed;
      return true;
    }
    if (this.eat(LatinSmallLetterN)) {
      this._lastIntValue = LineFeed;
      return true;
    }
    if (this.eat(LatinSmallLetterR)) {
      this._lastIntValue = CarriageReturn;
      return true;
    }
    if (this.eat(LatinSmallLetterT)) {
      this._lastIntValue = CharacterTabulation;
      return true;
    }
    if (this.eat(LatinSmallLetterV)) {
      this._lastIntValue = LineTabulation;
      return true;
    }
    return false;
  }
  eatControlLetter() {
    const cp = this.currentCodePoint;
    if (isLatinLetter(cp)) {
      this.advance();
      this._lastIntValue = cp % 32;
      return true;
    }
    return false;
  }
  eatRegExpUnicodeEscapeSequence(forceUFlag = false) {
    const start = this.index;
    const uFlag = forceUFlag || this._uFlag;
    if (this.eat(LatinSmallLetterU)) {
      if (uFlag && this.eatRegExpUnicodeSurrogatePairEscape() || this.eatFixedHexDigits(4) || uFlag && this.eatRegExpUnicodeCodePointEscape()) {
        return true;
      }
      if (this.strict || uFlag) {
        this.raise("Invalid unicode escape");
      }
      this.rewind(start);
    }
    return false;
  }
  eatRegExpUnicodeSurrogatePairEscape() {
    const start = this.index;
    if (this.eatFixedHexDigits(4)) {
      const lead = this._lastIntValue;
      if (isLeadSurrogate(lead) && this.eat(ReverseSolidus) && this.eat(LatinSmallLetterU) && this.eatFixedHexDigits(4)) {
        const trail = this._lastIntValue;
        if (isTrailSurrogate(trail)) {
          this._lastIntValue = combineSurrogatePair(lead, trail);
          return true;
        }
      }
      this.rewind(start);
    }
    return false;
  }
  eatRegExpUnicodeCodePointEscape() {
    const start = this.index;
    if (this.eat(LeftCurlyBracket) && this.eatHexDigits() && this.eat(RightCurlyBracket) && isValidUnicode(this._lastIntValue)) {
      return true;
    }
    this.rewind(start);
    return false;
  }
  eatIdentityEscape() {
    const cp = this.currentCodePoint;
    if (this.isValidIdentityEscape(cp)) {
      this._lastIntValue = cp;
      this.advance();
      return true;
    }
    return false;
  }
  isValidIdentityEscape(cp) {
    if (cp === -1) {
      return false;
    }
    if (this._uFlag) {
      return isSyntaxCharacter(cp) || cp === Solidus;
    }
    if (this.strict) {
      return !isIdContinue(cp);
    }
    if (this._nFlag) {
      return !(cp === LatinSmallLetterC || cp === LatinSmallLetterK);
    }
    return cp !== LatinSmallLetterC;
  }
  eatDecimalEscape() {
    this._lastIntValue = 0;
    let cp = this.currentCodePoint;
    if (cp >= DigitOne && cp <= DigitNine) {
      do {
        this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero);
        this.advance();
      } while ((cp = this.currentCodePoint) >= DigitZero && cp <= DigitNine);
      return true;
    }
    return false;
  }
  eatUnicodePropertyValueExpression() {
    const start = this.index;
    if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {
      this._lastKeyValue = this._lastStrValue;
      if (this.eatUnicodePropertyValue()) {
        this._lastValValue = this._lastStrValue;
        if (isValidUnicodeProperty(this.ecmaVersion, this._lastKeyValue, this._lastValValue)) {
          return true;
        }
        this.raise("Invalid property name");
      }
    }
    this.rewind(start);
    if (this.eatLoneUnicodePropertyNameOrValue()) {
      const nameOrValue = this._lastStrValue;
      if (isValidUnicodeProperty(this.ecmaVersion, "General_Category", nameOrValue)) {
        this._lastKeyValue = "General_Category";
        this._lastValValue = nameOrValue;
        return true;
      }
      if (isValidLoneUnicodeProperty(this.ecmaVersion, nameOrValue)) {
        this._lastKeyValue = nameOrValue;
        this._lastValValue = "";
        return true;
      }
      this.raise("Invalid property name");
    }
    return false;
  }
  eatUnicodePropertyName() {
    this._lastStrValue = "";
    while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {
      this._lastStrValue += String.fromCodePoint(this.currentCodePoint);
      this.advance();
    }
    return this._lastStrValue !== "";
  }
  eatUnicodePropertyValue() {
    this._lastStrValue = "";
    while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {
      this._lastStrValue += String.fromCodePoint(this.currentCodePoint);
      this.advance();
    }
    return this._lastStrValue !== "";
  }
  eatLoneUnicodePropertyNameOrValue() {
    return this.eatUnicodePropertyValue();
  }
  eatHexEscapeSequence() {
    const start = this.index;
    if (this.eat(LatinSmallLetterX)) {
      if (this.eatFixedHexDigits(2)) {
        return true;
      }
      if (this._uFlag || this.strict) {
        this.raise("Invalid escape");
      }
      this.rewind(start);
    }
    return false;
  }
  eatDecimalDigits() {
    const start = this.index;
    this._lastIntValue = 0;
    while (isDecimalDigit(this.currentCodePoint)) {
      this._lastIntValue = 10 * this._lastIntValue + digitToInt(this.currentCodePoint);
      this.advance();
    }
    return this.index !== start;
  }
  eatHexDigits() {
    const start = this.index;
    this._lastIntValue = 0;
    while (isHexDigit(this.currentCodePoint)) {
      this._lastIntValue = 16 * this._lastIntValue + digitToInt(this.currentCodePoint);
      this.advance();
    }
    return this.index !== start;
  }
  eatLegacyOctalEscapeSequence() {
    if (this.eatOctalDigit()) {
      const n1 = this._lastIntValue;
      if (this.eatOctalDigit()) {
        const n2 = this._lastIntValue;
        if (n1 <= 3 && this.eatOctalDigit()) {
          this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue;
        } else {
          this._lastIntValue = n1 * 8 + n2;
        }
      } else {
        this._lastIntValue = n1;
      }
      return true;
    }
    return false;
  }
  eatOctalDigit() {
    const cp = this.currentCodePoint;
    if (isOctalDigit(cp)) {
      this.advance();
      this._lastIntValue = cp - DigitZero;
      return true;
    }
    this._lastIntValue = 0;
    return false;
  }
  eatFixedHexDigits(length) {
    const start = this.index;
    this._lastIntValue = 0;
    for (let i = 0; i < length; ++i) {
      const cp = this.currentCodePoint;
      if (!isHexDigit(cp)) {
        this.rewind(start);
        return false;
      }
      this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp);
      this.advance();
    }
    return true;
  }
};
var DummyPattern = {};
var DummyFlags = {};
var DummyCapturingGroup = {};
var RegExpParserState = class {
  constructor(options) {
    this._node = DummyPattern;
    this._flags = DummyFlags;
    this._backreferences = [];
    this._capturingGroups = [];
    this.source = "";
    this.strict = Boolean(options && options.strict);
    this.ecmaVersion = options && options.ecmaVersion || 2022;
  }
  get pattern() {
    if (this._node.type !== "Pattern") {
      throw new Error("UnknownError");
    }
    return this._node;
  }
  get flags() {
    if (this._flags.type !== "Flags") {
      throw new Error("UnknownError");
    }
    return this._flags;
  }
  onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices) {
    this._flags = {
      type: "Flags",
      parent: null,
      start,
      end,
      raw: this.source.slice(start, end),
      global,
      ignoreCase,
      multiline,
      unicode,
      sticky,
      dotAll,
      hasIndices
    };
  }
  onPatternEnter(start) {
    this._node = {
      type: "Pattern",
      parent: null,
      start,
      end: start,
      raw: "",
      alternatives: []
    };
    this._backreferences.length = 0;
    this._capturingGroups.length = 0;
  }
  onPatternLeave(start, end) {
    this._node.end = end;
    this._node.raw = this.source.slice(start, end);
    for (const reference of this._backreferences) {
      const ref = reference.ref;
      const group = typeof ref === "number" ? this._capturingGroups[ref - 1] : this._capturingGroups.find((g) => g.name === ref);
      reference.resolved = group;
      group.references.push(reference);
    }
  }
  onAlternativeEnter(start) {
    const parent = this._node;
    if (parent.type !== "Assertion" && parent.type !== "CapturingGroup" && parent.type !== "Group" && parent.type !== "Pattern") {
      throw new Error("UnknownError");
    }
    this._node = {
      type: "Alternative",
      parent,
      start,
      end: start,
      raw: "",
      elements: []
    };
    parent.alternatives.push(this._node);
  }
  onAlternativeLeave(start, end) {
    const node = this._node;
    if (node.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    node.end = end;
    node.raw = this.source.slice(start, end);
    this._node = node.parent;
  }
  onGroupEnter(start) {
    const parent = this._node;
    if (parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    this._node = {
      type: "Group",
      parent,
      start,
      end: start,
      raw: "",
      alternatives: []
    };
    parent.elements.push(this._node);
  }
  onGroupLeave(start, end) {
    const node = this._node;
    if (node.type !== "Group" || node.parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    node.end = end;
    node.raw = this.source.slice(start, end);
    this._node = node.parent;
  }
  onCapturingGroupEnter(start, name) {
    const parent = this._node;
    if (parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    this._node = {
      type: "CapturingGroup",
      parent,
      start,
      end: start,
      raw: "",
      name,
      alternatives: [],
      references: []
    };
    parent.elements.push(this._node);
    this._capturingGroups.push(this._node);
  }
  onCapturingGroupLeave(start, end) {
    const node = this._node;
    if (node.type !== "CapturingGroup" || node.parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    node.end = end;
    node.raw = this.source.slice(start, end);
    this._node = node.parent;
  }
  onQuantifier(start, end, min, max, greedy) {
    const parent = this._node;
    if (parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    const element = parent.elements.pop();
    if (element == null || element.type === "Quantifier" || element.type === "Assertion" && element.kind !== "lookahead") {
      throw new Error("UnknownError");
    }
    const node = {
      type: "Quantifier",
      parent,
      start: element.start,
      end,
      raw: this.source.slice(element.start, end),
      min,
      max,
      greedy,
      element
    };
    parent.elements.push(node);
    element.parent = node;
  }
  onLookaroundAssertionEnter(start, kind, negate) {
    const parent = this._node;
    if (parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    const node = this._node = {
      type: "Assertion",
      parent,
      start,
      end: start,
      raw: "",
      kind,
      negate,
      alternatives: []
    };
    parent.elements.push(node);
  }
  onLookaroundAssertionLeave(start, end) {
    const node = this._node;
    if (node.type !== "Assertion" || node.parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    node.end = end;
    node.raw = this.source.slice(start, end);
    this._node = node.parent;
  }
  onEdgeAssertion(start, end, kind) {
    const parent = this._node;
    if (parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    parent.elements.push({
      type: "Assertion",
      parent,
      start,
      end,
      raw: this.source.slice(start, end),
      kind
    });
  }
  onWordBoundaryAssertion(start, end, kind, negate) {
    const parent = this._node;
    if (parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    parent.elements.push({
      type: "Assertion",
      parent,
      start,
      end,
      raw: this.source.slice(start, end),
      kind,
      negate
    });
  }
  onAnyCharacterSet(start, end, kind) {
    const parent = this._node;
    if (parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    parent.elements.push({
      type: "CharacterSet",
      parent,
      start,
      end,
      raw: this.source.slice(start, end),
      kind
    });
  }
  onEscapeCharacterSet(start, end, kind, negate) {
    const parent = this._node;
    if (parent.type !== "Alternative" && parent.type !== "CharacterClass") {
      throw new Error("UnknownError");
    }
    parent.elements.push({
      type: "CharacterSet",
      parent,
      start,
      end,
      raw: this.source.slice(start, end),
      kind,
      negate
    });
  }
  onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {
    const parent = this._node;
    if (parent.type !== "Alternative" && parent.type !== "CharacterClass") {
      throw new Error("UnknownError");
    }
    parent.elements.push({
      type: "CharacterSet",
      parent,
      start,
      end,
      raw: this.source.slice(start, end),
      kind,
      key,
      value,
      negate
    });
  }
  onCharacter(start, end, value) {
    const parent = this._node;
    if (parent.type !== "Alternative" && parent.type !== "CharacterClass") {
      throw new Error("UnknownError");
    }
    parent.elements.push({
      type: "Character",
      parent,
      start,
      end,
      raw: this.source.slice(start, end),
      value
    });
  }
  onBackreference(start, end, ref) {
    const parent = this._node;
    if (parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    const node = {
      type: "Backreference",
      parent,
      start,
      end,
      raw: this.source.slice(start, end),
      ref,
      resolved: DummyCapturingGroup
    };
    parent.elements.push(node);
    this._backreferences.push(node);
  }
  onCharacterClassEnter(start, negate) {
    const parent = this._node;
    if (parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    this._node = {
      type: "CharacterClass",
      parent,
      start,
      end: start,
      raw: "",
      negate,
      elements: []
    };
    parent.elements.push(this._node);
  }
  onCharacterClassLeave(start, end) {
    const node = this._node;
    if (node.type !== "CharacterClass" || node.parent.type !== "Alternative") {
      throw new Error("UnknownError");
    }
    node.end = end;
    node.raw = this.source.slice(start, end);
    this._node = node.parent;
  }
  onCharacterClassRange(start, end) {
    const parent = this._node;
    if (parent.type !== "CharacterClass") {
      throw new Error("UnknownError");
    }
    const elements = parent.elements;
    const max = elements.pop();
    const hyphen = elements.pop();
    const min = elements.pop();
    if (!min || !max || !hyphen || min.type !== "Character" || max.type !== "Character" || hyphen.type !== "Character" || hyphen.value !== HyphenMinus) {
      throw new Error("UnknownError");
    }
    const node = {
      type: "CharacterClassRange",
      parent,
      start,
      end,
      raw: this.source.slice(start, end),
      min,
      max
    };
    min.parent = node;
    max.parent = node;
    elements.push(node);
  }
};
var RegExpParser = class {
  constructor(options) {
    this._state = new RegExpParserState(options);
    this._validator = new RegExpValidator(this._state);
  }
  parseLiteral(source, start = 0, end = source.length) {
    this._state.source = source;
    this._validator.validateLiteral(source, start, end);
    const pattern = this._state.pattern;
    const flags = this._state.flags;
    const literal = {
      type: "RegExpLiteral",
      parent: null,
      start,
      end,
      raw: source,
      pattern,
      flags
    };
    pattern.parent = literal;
    flags.parent = literal;
    return literal;
  }
  parseFlags(source, start = 0, end = source.length) {
    this._state.source = source;
    this._validator.validateFlags(source, start, end);
    return this._state.flags;
  }
  parsePattern(source, start = 0, end = source.length, uFlag = false) {
    this._state.source = source;
    this._validator.validatePattern(source, start, end, uFlag);
    return this._state.pattern;
  }
};
function parseRegExpLiteral(source, options) {
  return new RegExpParser(options).parseLiteral(String(source));
}

// ../regexp.js
function prefixesFromParse(parse) {
  if (parse.type === "Pattern" || parse.type === "CapturingGroup") {
    const alternatives = parse.alternatives.map(prefixesFromParse);
    return `(${alternatives.join("|")})`;
  } else if (parse.type === "Alternative") {
    const result = [];
    for (let i = 0; i < parse.elements.length; ++i) {
      const thisRe = [];
      for (let j = 0; j < i; ++j) {
        thisRe.push(parse.elements[j].raw);
      }
      thisRe.push(prefixesFromParse(parse.elements[i]));
      result.push(thisRe.join(""));
    }
    return `(${result.join("|")})`;
  } else if (parse.type === "RegExpLiteral") {
    return prefixesFromParse(parse.pattern);
  } else if (parse.type === "Character") {
    return `${parse.raw}?`;
  } else if (parse.type === "Quantifier") {
    if (parse.min === 0 && parse.max === 1) {
      return prefixesFromParse(parse.element);
    }
    if (parse.min === 1 && parse.max === Infinity) {
      return `(${parse.element.raw}*)` + prefixesFromParse(parse.element);
    }
    if (parse.min === 0 && parse.max === Infinity) {
      return `(${parse.element.raw}*)` + prefixesFromParse(parse.element);
    } else {
      throw new Error(
        `Internal Error, can't handle quantifiers min=${parse.min} max=${parse.max}`
      );
    }
  } else if (parse.type === "CharacterSet") {
    return `${parse.raw}?`;
  } else if (parse.type === "CharacterClass") {
    return `${parse.raw}?`;
  }
  throw new Error(`Internal Error, don't know how to handle ${parse.type}`);
}
function prefixes(regexp) {
  regexp = regexp.source;
  regexp = regexp.slice(1, -1);
  return new RegExp(
    "^" + prefixesFromParse(parseRegExpLiteral(new RegExp(regexp))) + "$"
  );
}

// ../yaml-validation/schema-navigation.ts
function navigateSchemaByInstancePath(schema2, path, allowPartialMatches) {
  const inner = (subSchema, index) => {
    subSchema = resolveSchema(subSchema);
    if (index === path.length) {
      return [subSchema];
    }
    const st = schemaType(subSchema);
    if (st === "object") {
      const key = path[index];
      if (typeof key === "number") {
        return [];
      }
      if (subSchema.properties && subSchema.properties[key]) {
        return inner(subSchema.properties[key], index + 1);
      }
      const patternPropMatch = matchPatternProperties(
        subSchema,
        key,
        allowPartialMatches !== void 0 && allowPartialMatches && index === path.length - 1
      );
      if (patternPropMatch) {
        return inner(patternPropMatch, index + 1);
      }
      if (index !== path.length - 1) {
        return [];
      }
      const completions2 = Object.getOwnPropertyNames(subSchema.properties || {}).filter(
        (name) => name.startsWith(key)
      );
      if (completions2.length === 0) {
        return [];
      }
      return [subSchema];
    } else if (st === "array") {
      if (subSchema.items === void 0) {
        return [];
      }
      if (typeof path[index] === "string") {
        return [];
      }
      return inner(subSchema.items, index + 1);
    } else if (st === "anyOf") {
      return subSchema.anyOf.map((ss) => inner(ss, index));
    } else if (st === "allOf") {
      return subSchema.allOf.map((ss) => inner(ss, index));
    } else {
      return [];
    }
  };
  return inner(schema2, 0).flat(Infinity);
}
function navigateSchemaBySchemaPathSingle(schema2, path) {
  const ensurePathFragment = (fragment, expected) => {
    if (fragment !== expected) {
      throw new Error(
        `Internal Error in navigateSchemaBySchemaPathSingle: ${fragment} !== ${expected}`
      );
    }
  };
  const inner = (subschema, index) => {
    subschema = resolveSchema(subschema);
    if (subschema === void 0) {
      throw new Error(
        `Internal Error in navigateSchemaBySchemaPathSingle: invalid path navigation`
      );
    }
    if (index === path.length) {
      return subschema;
    }
    const st = schemaType(subschema);
    switch (st) {
      case "anyOf":
        ensurePathFragment(path[index], "anyOf");
        return inner(subschema.anyOf[path[index + 1]], index + 2);
      case "allOf":
        ensurePathFragment(path[index], "allOf");
        return inner(subschema.allOf[path[index + 1]], index + 2);
      case "array":
        ensurePathFragment(path[index], "array");
        return inner(subschema.arrayOf.schema, index + 2);
      case "object":
        ensurePathFragment(path[index], "object");
        if (path[index + 1] === "properties") {
          return inner(subschema.properties[path[index + 2]], index + 3);
        } else if (path[index + 1] === "patternProperties") {
          return inner(subschema.patternProperties[path[index + 2]], index + 3);
        } else if (path[index + 1] === "additionalProperties") {
          return inner(subschema.additionalProperties, index + 2);
        } else {
          throw new Error(
            `Internal Error in navigateSchemaBySchemaPathSingle: bad path fragment ${path[index]} in object navigation`
          );
        }
      default:
        throw new Error(
          `Internal Error in navigateSchemaBySchemaPathSingle: can't navigate schema type ${st}`
        );
    }
  };
  return inner(schema2, 0);
}
function matchPatternProperties(schema2, key, matchThroughPrefixes) {
  for (const [regexpStr, subschema] of Object.entries(
    schema2.patternProperties || {}
  )) {
    let pattern;
    if (matchThroughPrefixes) {
      pattern = prefixes(new RegExp(regexpStr));
    } else {
      pattern = new RegExp(regexpStr);
    }
    if (key.match(pattern)) {
      return subschema;
    }
  }
  return false;
}

// ../yaml-validation/schema-utils.ts
function resolveDescription(s) {
  if (typeof s === "string") {
    return s;
  }
  const valueS = resolveSchema(s);
  if (valueS === false || valueS === true) {
    return "";
  }
  if (valueS.documentation === void 0) {
    return "";
  }
  if (typeof valueS.documentation === "string") {
    return valueS.documentation;
  }
  if (valueS.documentation.short) {
    return valueS.documentation.short;
  } else {
    return "";
  }
}
function schemaCompletions(s) {
  if (s === true || s === false) {
    return [];
  }
  let schema2 = resolveSchema(s);
  schema2 = resolveSchema(
    schema2,
    (_schema) => {
    },
    (schema3) => {
      return schema3.tags !== void 0 && schema3.tags["complete-from"] !== void 0;
    },
    (schema3) => {
      return navigateSchemaBySchemaPathSingle(
        schema3,
        schema3.tags["complete-from"]
      );
    }
  );
  if (schema2 === true || schema2 === false) {
    return [];
  }
  const normalize = (completions2) => {
    const result = (completions2 || []).map((c) => {
      if (typeof c === "string") {
        return {
          type: "value",
          display: c,
          value: c,
          description: "",
          suggest_on_accept: false,
          schema: schema2
        };
      }
      return {
        ...c,
        description: resolveDescription(c.description),
        schema: schema2
      };
    });
    return result;
  };
  if (schema2.completions && schema2.completions.length) {
    return normalize(schema2.completions);
  }
  if (schema2.tags && schema2.tags.completions) {
    if (Array.isArray(schema2.tags.completions) && schema2.tags.completions.length) {
      return normalize(schema2.tags.completions);
    } else {
      return normalize(
        Object.values(schema2.tags.completions)
      );
    }
  }
  return schemaCall(schema2, {
    array: (s2) => {
      if (s2.items) {
        return schemaCompletions(s2.items);
      } else {
        return [];
      }
    },
    anyOf: (s2) => {
      return s2.anyOf.map(schemaCompletions).flat();
    },
    allOf: (s2) => {
      return s2.allOf.map(schemaCompletions).flat();
    },
    "object": (s2) => {
      s2.cachedCompletions = getObjectCompletions(s2);
      return normalize(s2.cachedCompletions);
    }
  }, (_) => []);
}
function getObjectCompletions(s) {
  const completionsParam = s.tags && s.tags.completions || [];
  return schemaCall(s, {
    "object": (schema2) => {
      const properties = schema2.properties;
      const objectKeys = completionsParam.length ? completionsParam : Object.getOwnPropertyNames(properties);
      const _uniqueValues = (lst) => {
        const obj = {};
        for (const c of lst) {
          obj[c.value] = c;
        }
        return Object.getOwnPropertyNames(obj).map((k) => obj[k]);
      };
      const completions2 = [];
      for (const k of objectKeys) {
        const schema3 = properties && properties[k];
        const maybeDescriptions = [];
        let hidden = false;
        if (schema3 !== void 0 && schema3 !== true && schema3 !== false) {
          if (schema3.documentation) {
            maybeDescriptions.push(schemaDocString(schema3.documentation));
          } else {
            let described = false;
            const visitor = (schema4) => {
              if (schema4 === false || schema4 === true) {
                return;
              }
              if (schema4.hidden) {
                hidden = true;
              }
              if (described) {
                return;
              }
              if (schema4.documentation) {
                maybeDescriptions.push(schemaDocString(schema4.documentation));
                described = true;
              }
            };
            try {
              resolveSchema(schema3, visitor);
            } catch (_e) {
            }
            if (!described) {
              schemaDispatch(schema3, {
                ref: (schema4) => maybeDescriptions.push({ $ref: schema4.$ref })
              });
            }
          }
        }
        if (hidden) {
          continue;
        }
        let description = "";
        for (const md of maybeDescriptions) {
          if (md !== void 0) {
            description = md;
            break;
          }
        }
        completions2.push({
          type: "key",
          display: "",
          value: `${k}: `,
          description,
          suggest_on_accept: true
        });
      }
      return completions2;
    }
  }, (_) => completionsParam.map((c) => ({
    type: "value",
    display: "",
    value: c,
    description: "",
    suggest_on_accept: false
  })));
}
function possibleSchemaKeys(schema2) {
  const precomputedCompletions = schemaCompletions(schema2).filter(
    (c) => c.type === "key"
  ).map((c) => c.value.split(":")[0]);
  if (precomputedCompletions.length) {
    return precomputedCompletions;
  }
  const results = [];
  walkSchema(schema2, {
    "object": (s) => {
      results.push(...Object.keys(s.properties || {}));
      return true;
    },
    "array": (_s) => true
  });
  return results;
}
function possibleSchemaValues(schema2) {
  const results = [];
  walkSchema(schema2, {
    "enum": (s) => {
      results.push(...s["enum"].map(String));
      return true;
    },
    "array": (_s) => true,
    "object": (_s) => true
  });
  return results;
}
function walkSchema(schema2, f) {
  const recur = {
    "anyOf": (ss) => {
      for (const s of ss.anyOf) {
        walkSchema(s, f);
      }
    },
    "allOf": (ss) => {
      for (const s of ss.allOf) {
        walkSchema(s, f);
      }
    },
    "array": (x) => {
      if (x.items) {
        walkSchema(x.items, f);
      }
    },
    "object": (x) => {
      if (x.properties) {
        for (const ss of Object.values(x.properties)) {
          walkSchema(ss, f);
        }
      }
      if (x.patternProperties) {
        for (const ss of Object.values(x.patternProperties)) {
          walkSchema(ss, f);
        }
      }
      if (x.propertyNames) {
        walkSchema(x.propertyNames, f);
      }
    }
  };
  if (typeof f === "function") {
    if (f(schema2) === true) {
      return;
    }
  } else {
    if (schemaCall(schema2, f, (_) => false) === true) {
      return;
    }
  }
  schemaCall(schema2, recur, (_) => false);
}

// ../yaml-validation/errors.ts
function setDefaultErrorHandlers(validator) {
  validator.addHandler(ignoreExprViolations);
  validator.addHandler(expandEmptySpan);
  validator.addHandler(improveErrorHeadingForValueErrors);
  validator.addHandler(checkForTypeMismatch);
  validator.addHandler(checkForBadBoolean);
  validator.addHandler(checkForBadColon);
  validator.addHandler(checkForBadEquals);
  validator.addHandler(identifyKeyErrors);
  validator.addHandler(checkForNearbyCorrection);
  validator.addHandler(checkForNearbyRequired);
  validator.addHandler(schemaDefinedErrors);
}
function errorKeyword(error) {
  if (error.schemaPath.length === 0) {
    return "";
  }
  return String(error.schemaPath[error.schemaPath.length - 1]);
}
function schemaPathMatches(error, strs) {
  const schemaPath = error.schemaPath.slice(-strs.length);
  if (schemaPath.length !== strs.length) {
    return false;
  }
  return strs.every((str2, i) => str2 === schemaPath[i]);
}
function getBadKey(error) {
  if (error.schemaPath.indexOf("propertyNames") === -1 && error.schemaPath.indexOf("closed") === -1) {
    return void 0;
  }
  const result = error.violatingObject.result;
  if (typeof result !== "string") {
    throw new Error(
      "Internal Error: propertyNames error has a violating non-string."
    );
  }
  return result;
}
function getVerbatimInput(error) {
  return error.source.value;
}
function navigate(path, annotation, returnKey = false, pathIndex = 0) {
  if (annotation === void 0) {
    throw new Error("Can't navigate an undefined annotation");
  }
  if (pathIndex >= path.length) {
    return annotation;
  }
  if (annotation.kind === "mapping" || annotation.kind === "block_mapping") {
    const { components } = annotation;
    const searchKey = path[pathIndex];
    const lastKeyIndex = ~~((components.length - 1) / 2) * 2;
    for (let i = lastKeyIndex; i >= 0; i -= 2) {
      const key = components[i].result;
      if (key === searchKey) {
        if (returnKey && pathIndex === path.length - 1) {
          return navigate(path, components[i], returnKey, pathIndex + 1);
        } else {
          return navigate(path, components[i + 1], returnKey, pathIndex + 1);
        }
      }
    }
    return annotation;
  } else if (["sequence", "block_sequence", "flow_sequence"].indexOf(annotation.kind) !== -1) {
    const searchKey = Number(path[pathIndex]);
    if (isNaN(searchKey) || searchKey < 0 || searchKey >= annotation.components.length) {
      return annotation;
    }
    return navigate(
      path,
      annotation.components[searchKey],
      returnKey,
      pathIndex + 1
    );
  } else {
    return annotation;
  }
}
function isEmptyValue(error) {
  const rawVerbatimInput = getVerbatimInput(error);
  return rawVerbatimInput.trim().length === 0;
}
function getLastFragment(instancePath) {
  if (instancePath.length === 0) {
    return void 0;
  }
  return instancePath[instancePath.length - 1];
}
function reindent(str2) {
  const s = /* @__PURE__ */ new Set();
  const ls = lines(str2);
  for (const l of ls) {
    const r = l.match("^[ ]+");
    if (r) {
      s.add(r[0].length);
    }
  }
  if (s.size === 0) {
    return str2;
  } else if (s.size === 1) {
    const v = Array.from(s)[0];
    const oldIndent = " ".repeat(v);
    if (v <= 2) {
      return str2;
    }
    return ls.map((l) => l.startsWith(oldIndent) ? l.slice(v - 2) : l).join(
      "\n"
    );
  } else {
    const [first, second] = Array.from(s);
    const oldIndent = " ".repeat(first);
    const newIndent = second - first;
    if (newIndent >= first) {
      return str2;
    }
    return ls.map(
      (l) => l.startsWith(oldIndent) ? l.slice(first - newIndent) : l
    ).join("\n");
  }
}
function ignoreExprViolations(error, _parse, _schema) {
  const { result } = error.violatingObject;
  if (typeof result !== "object" || Array.isArray(result) || result === null || error.schemaPath.slice(-1)[0] !== "type") {
    return error;
  }
  if (result.tag === "!expr" && typeof result.value === "string") {
    return null;
  } else {
    return error;
  }
}
function formatHeadingForKeyError(_error, _parse, _schema, key) {
  return `property name ${blue(key)} is invalid`;
}
function formatHeadingForValueError(error, _parse, _schema) {
  const rawVerbatimInput = reindent(getVerbatimInput(error));
  const rawLines = lines(rawVerbatimInput);
  let verbatimInput;
  if (rawLines.length > 4) {
    verbatimInput = quotedStringColor(
      [...rawLines.slice(0, 2), "...", ...rawLines.slice(-2)].join("\n")
    );
  } else {
    verbatimInput = quotedStringColor(rawVerbatimInput);
  }
  const empty = isEmptyValue(error);
  const lastFragment = getLastFragment(error.instancePath);
  switch (typeof lastFragment) {
    case "undefined":
      if (empty) {
        return "YAML value is missing.";
      } else {
        return `YAML value ${verbatimInput} must ${schemaDescription(error.schema)}.`;
      }
    case "number":
      if (empty) {
        return `Array entry ${lastFragment + 1} is empty but it must instead ${schemaDescription(error.schema)}.`;
      } else {
        return `Array entry ${lastFragment + 1} with value ${verbatimInput} failed to ${schemaDescription(error.schema)}.`;
      }
    case "string": {
      const formatLastFragment = '"' + blue(lastFragment) + '"';
      if (empty) {
        return `Field ${formatLastFragment} has empty value but it must instead ${schemaDescription(error.schema)}`;
      } else {
        if (verbatimInput.indexOf("\n") !== -1) {
          return `Field ${formatLastFragment} has value

${verbatimInput}

The value must instead ${schemaDescription(error.schema)}.`;
        } else {
          return `Field ${formatLastFragment} has value ${verbatimInput}, which must instead ${schemaDescription(error.schema)}`;
        }
      }
    }
  }
}
function identifyKeyErrors(error, parse, schema2) {
  if (error.schemaPath.indexOf("propertyNames") === -1 && error.schemaPath.indexOf("closed") === -1) {
    return error;
  }
  const badKey = getBadKey(error);
  if (badKey) {
    if (error.instancePath.length && error.instancePath[error.instancePath.length - 1] !== badKey) {
      addInstancePathInfo(
        error.niceError,
        [...error.instancePath, badKey]
      );
    } else {
      addInstancePathInfo(
        error.niceError,
        error.instancePath
      );
    }
    error.niceError.heading = formatHeadingForKeyError(
      error,
      parse,
      schema2,
      badKey
    );
  }
  return error;
}
function improveErrorHeadingForValueErrors(error, parse, schema2) {
  if (error.schemaPath.indexOf("propertyNames") !== -1 || error.schemaPath.indexOf("closed") !== -1 || errorKeyword(error) === "required") {
    return error;
  }
  return {
    ...error,
    niceError: {
      ...error.niceError,
      heading: formatHeadingForValueError(error, parse, schema2)
    }
  };
}
function expandEmptySpan(error, parse, _schema) {
  if (error.location.start.line !== error.location.end.line || error.location.start.column !== error.location.end.column || !isEmptyValue(error) || typeof getLastFragment(error.instancePath) === "undefined") {
    return error;
  }
  const lastKey = navigate(
    error.instancePath,
    parse,
    true
  );
  const locF = mappedIndexToLineCol(parse.source);
  try {
    const location = {
      start: locF(lastKey.start),
      end: locF(lastKey.end)
    };
    return {
      ...error,
      location,
      niceError: {
        ...error.niceError,
        location
      }
    };
  } catch (_e) {
    return error;
  }
}
function checkForTypeMismatch(error, parse, schema2) {
  const rawVerbatimInput = getVerbatimInput(error);
  const rawLines = lines(rawVerbatimInput);
  let verbatimInput;
  if (rawLines.length > 4) {
    verbatimInput = quotedStringColor(
      [...rawLines.slice(0, 2), "...", ...rawLines.slice(-2)].join("\n")
    );
  } else {
    verbatimInput = quotedStringColor(rawVerbatimInput);
  }
  const goodType = (obj) => {
    if (Array.isArray(obj)) {
      return "an array";
    }
    if (obj === null) {
      return "a null value";
    }
    return typeof obj;
  };
  if (errorKeyword(error) === "type" && rawVerbatimInput.length > 0) {
    const reindented = reindent(verbatimInput);
    const subject = reindented.indexOf("\n") === -1 ? `The value ${reindented} ` : `The value

${reindented}

`;
    const newError = {
      ...error.niceError,
      heading: formatHeadingForValueError(
        error,
        parse,
        schema2
      ),
      error: [
        `${subject}is of type ${goodType(
          error.violatingObject.result
        )}.`
      ],
      info: {},
      location: error.niceError.location
    };
    addInstancePathInfo(newError, error.instancePath);
    addFileInfo(newError, error.source);
    return {
      ...error,
      niceError: newError
    };
  }
  return error;
}
function checkForBadBoolean(error, parse, _schema) {
  const schema2 = error.schema;
  if (!(typeof error.violatingObject.result === "string" && errorKeyword(error) === "type" && schemaType(schema2) === "boolean")) {
    return error;
  }
  const strValue = error.violatingObject.result;
  const verbatimInput = quotedStringColor(getVerbatimInput(error));
  const yesses = new Set("y|Y|yes|Yes|YES|true|True|TRUE|on|On|ON".split("|"));
  const nos = new Set("n|N|no|No|NO|false|False|FALSE|off|Off|OFF".split("|"));
  let fix;
  if (yesses.has(strValue)) {
    fix = true;
  } else if (nos.has(strValue)) {
    fix = false;
  } else {
    return error;
  }
  const errorMessage = `The value ${verbatimInput} is a string.`;
  const suggestion1 = `Quarto uses YAML 1.2, which interprets booleans strictly.`;
  const suggestion2 = `Try using ${quotedStringColor(String(fix))} instead.`;
  const newError = {
    heading: formatHeadingForValueError(error, parse, schema2),
    error: [errorMessage],
    info: {},
    location: error.niceError.location
  };
  addInstancePathInfo(newError, error.instancePath);
  addFileInfo(newError, error.source);
  newError.info["yaml-version-1.2"] = suggestion1;
  newError.info["suggestion-fix"] = suggestion2;
  return {
    ...error,
    niceError: newError
  };
}
function checkForBadColon(error, parse, schema2) {
  if (typeof error.violatingObject.result !== "string") {
    return error;
  }
  if (!schemaPathMatches(error, ["object", "type"])) {
    return error;
  }
  if (!error.violatingObject.result.match(/^.+:[^ ].*$/)) {
    return error;
  }
  const verbatimInput = quotedStringColor(getVerbatimInput(error));
  const errorMessage = `The value ${verbatimInput} is a string.`;
  const suggestion1 = `In YAML, key-value pairs in objects must be separated by a space.`;
  const suggestion2 = `Did you mean ${quotedStringColor(
    quotedStringColor(getVerbatimInput(error)).replace(/:/g, ": ")
  )} instead?`;
  const newError = {
    heading: formatHeadingForValueError(error, parse, schema2),
    error: [errorMessage],
    info: {},
    location: error.niceError.location
  };
  addInstancePathInfo(newError, error.instancePath);
  addFileInfo(newError, error.source);
  newError.info["yaml-key-value-pairs"] = suggestion1;
  newError.info["suggestion-fix"] = suggestion2;
  return {
    ...error,
    niceError: newError
  };
}
function checkForBadEquals(error, parse, schema2) {
  if (typeof error.violatingObject.result !== "string") {
    return error;
  }
  if (!schemaPathMatches(error, ["object", "type"]) && !schemaPathMatches(error, ["object", "propertyNames", "string", "pattern"])) {
    return error;
  }
  if (!error.violatingObject.result.match(/^.+ *= *.+$/)) {
    return error;
  }
  const verbatimInput = quotedStringColor(getVerbatimInput(error));
  const errorMessage = `The value ${verbatimInput} is a string.`;
  const suggestion1 = `In YAML, key-value pairs in objects must be separated by a colon and a space.`;
  const suggestion2 = `Did you mean ${quotedStringColor(
    quotedStringColor(getVerbatimInput(error)).replace(/ *= */g, ": ")
  )} instead?`;
  const newError = {
    heading: formatHeadingForValueError(error, parse, schema2),
    error: [errorMessage],
    info: {},
    location: error.niceError.location
  };
  addInstancePathInfo(newError, error.instancePath);
  addFileInfo(newError, error.source);
  newError.info["yaml-key-value-pairs"] = suggestion1;
  newError.info["suggestion-fix"] = suggestion2;
  return {
    ...error,
    niceError: newError
  };
}
function createErrorFragments(error) {
  const rawVerbatimInput = getVerbatimInput(error);
  const verbatimInput = quotedStringColor(reindent(rawVerbatimInput));
  const pathFragments = error.instancePath.map((s) => blue(String(s)));
  return {
    location: locationString(error.location),
    fullPath: pathFragments.join(":"),
    key: pathFragments[pathFragments.length - 1],
    value: verbatimInput
  };
}
function schemaDefinedErrors(error, _parse, _schema) {
  const schema2 = error.schema;
  if (schema2 === true || schema2 === false) {
    return error;
  }
  if (schema2.errorMessage === void 0) {
    return error;
  }
  if (typeof schema2.errorMessage !== "string") {
    return error;
  }
  let result = schema2.errorMessage;
  for (const [k, v] of Object.entries(createErrorFragments(error))) {
    result = result.replace("${" + k + "}", v);
  }
  return {
    ...error,
    niceError: {
      ...error.niceError,
      heading: result
    }
  };
}
function checkForNearbyRequired(error, _parse, _schema) {
  const schema2 = error.schema;
  if (errorKeyword(error) !== "required") {
    return error;
  }
  const missingKeys = [];
  const errObj = error.violatingObject.result;
  const keys = Object.keys(errObj);
  schemaCall(schema2, {
    object(s) {
      if (s.required === void 0) {
        throw new Error(
          "Internal Error: required schema error without a required field"
        );
      }
      for (const r of s.required) {
        if (keys.indexOf(r) === -1) {
          missingKeys.push(r);
        }
      }
    }
  }, (_) => {
    throw new Error("Internal Error: required error on a non-object schema");
  });
  for (const missingKey of missingKeys) {
    let bestCorrection;
    let bestDistance = Infinity;
    for (const correction of keys) {
      const d = editDistance(correction, missingKey);
      if (d < bestDistance) {
        bestCorrection = [correction];
        bestDistance = d;
      } else if (d === bestDistance) {
        bestCorrection.push(correction);
        bestDistance = d;
      }
    }
    if (bestDistance > missingKey.length * 10 * 0.3) {
      continue;
    }
    const suggestions = bestCorrection.map((s) => blue(s));
    if (suggestions.length === 1) {
      error.niceError.info[`did-you-mean-key`] = `Is ${suggestions[0]} a typo of ${blue(missingKey)}?`;
    } else if (suggestions.length === 2) {
      error.niceError.info[`did-you-mean-key`] = `Is ${suggestions[0]} or ${suggestions[1]} a typo of ${blue(missingKey)}?`;
    } else {
      suggestions[suggestions.length - 1] = `or ${suggestions[suggestions.length - 1]}`;
      error.niceError.info[`did-you-mean-key`] = `Is one of ${suggestions.join(", ")} a typo of ${blue(missingKey)}?`;
    }
  }
  return error;
}
function checkForNearbyCorrection(error, parse, _schema) {
  const schema2 = error.schema;
  const corrections = [];
  let errVal = "";
  let keyOrValue = "";
  const key = getBadKey(error);
  if (key) {
    errVal = key;
    corrections.push(...possibleSchemaKeys(schema2));
    keyOrValue = "key";
  } else {
    const val = navigate(error.instancePath, parse);
    if (typeof val.result !== "string") {
      return error;
    }
    errVal = val.result;
    corrections.push(...possibleSchemaValues(schema2));
    keyOrValue = "value";
  }
  if (corrections.length === 0) {
    return error;
  }
  let bestCorrection;
  let bestDistance = Infinity;
  for (const correction of corrections) {
    const d = editDistance(correction, errVal);
    if (d < bestDistance) {
      bestCorrection = [correction];
      bestDistance = d;
    } else if (d === bestDistance) {
      bestCorrection.push(correction);
      bestDistance = d;
    }
  }
  if (bestDistance > errVal.length * 10 * 0.3) {
    return error;
  }
  const suggestions = bestCorrection.map((s) => blue(s));
  if (suggestions.length === 1) {
    error.niceError.info[`did-you-mean-${keyOrValue}`] = `Did you mean ${suggestions[0]}?`;
  } else if (suggestions.length === 2) {
    error.niceError.info[`did-you-mean-${keyOrValue}`] = `Did you mean ${suggestions[0]} or ${suggestions[1]}?`;
  } else {
    suggestions[suggestions.length - 1] = `or ${suggestions[suggestions.length - 1]}`;
    error.niceError.info[`did-you-mean-${keyOrValue}`] = `Did you mean ${suggestions.join(", ")}?`;
  }
  return error;
}
function createSourceContext(src, location) {
  const startMapResult = src.map(location.start, true);
  const endMapResult = src.map(location.end, true);
  const locF = mappedIndexToLineCol(src);
  let sourceLocation;
  try {
    sourceLocation = {
      start: locF(location.start),
      end: locF(location.end)
    };
  } catch (_e) {
    sourceLocation = {
      start: { line: 0, column: 0 },
      end: { line: 0, column: 0 }
    };
  }
  if (startMapResult === void 0 || endMapResult === void 0) {
    throw new Error(
      "Internal Error: createSourceContext called with bad location."
    );
  }
  if (startMapResult.originalString !== endMapResult.originalString) {
    throw new Error(
      "Internal Error: don't know how to create source context across different source files"
    );
  }
  const originalString = startMapResult.originalString;
  const nLines = lines(originalString.value).length;
  const {
    start,
    end
  } = sourceLocation;
  const {
    prefixWidth,
    lines: formattedLines
  } = formatLineRange(
    originalString.value,
    Math.max(0, start.line - 1),
    Math.min(end.line + 1, nLines - 1)
  );
  const contextLines = [];
  let mustPrintEllipsis = true;
  for (const { lineNumber, content, rawLine } of formattedLines) {
    if (lineNumber < start.line || lineNumber > end.line) {
      if (rawLine.trim().length) {
        contextLines.push(content);
      }
    } else {
      if (lineNumber >= start.line + 2 && lineNumber <= end.line - 2) {
        if (mustPrintEllipsis) {
          mustPrintEllipsis = false;
          contextLines.push("...");
        }
      } else {
        const startColumn = lineNumber > start.line ? 0 : start.column;
        const endColumn = lineNumber < end.line ? rawLine.length : end.column;
        contextLines.push(content);
        contextLines.push(
          " ".repeat(prefixWidth + startColumn - 1) + "~".repeat(endColumn - startColumn + 1)
        );
      }
    }
  }
  return contextLines.join("\n");
}
function createLocalizedError(obj) {
  const {
    violatingObject,
    instancePath,
    schemaPath,
    source,
    message,
    schema: schema2
  } = obj;
  const locF = mappedIndexToLineCol(source);
  let location;
  try {
    location = {
      start: locF(violatingObject.start),
      end: locF(violatingObject.end)
    };
  } catch (_e) {
    location = {
      start: { line: 0, column: 0 },
      end: { line: 0, column: 0 }
    };
  }
  const mapResult = source.map(violatingObject.start);
  const fileName = mapResult ? mapResult.originalString.fileName : void 0;
  return {
    source: mappedString(source, [{
      start: violatingObject.start,
      end: violatingObject.end
    }]),
    violatingObject,
    instancePath,
    schemaPath,
    schema: schema2,
    message,
    location,
    niceError: {
      heading: message,
      error: [],
      info: {},
      fileName,
      location,
      sourceContext: createSourceContext(violatingObject.source, {
        start: violatingObject.start,
        end: violatingObject.end
      })
    }
  };
}

// annotated-yaml.ts
function postProcessAnnotation(parse) {
  if (parse.components.length === 1 && parse.start === parse.components[0].start && parse.end === parse.components[0].end) {
    return postProcessAnnotation(parse.components[0]);
  } else {
    return {
      ...parse,
      components: parse.components.map(postProcessAnnotation)
    };
  }
}
function jsYamlParseLenient(yml) {
  try {
    return load(yml, { schema: QuartoJSONSchema });
  } catch (_e) {
    return yml;
  }
}
function readAnnotatedYamlFromMappedString(mappedSource2, lenient = false) {
  if (lenient) {
    const parser = getTreeSitterSync();
    const tree = parser.parse(mappedSource2.value);
    const treeSitterAnnotation = buildTreeSitterAnnotation(tree, mappedSource2);
    if (treeSitterAnnotation) {
      return treeSitterAnnotation;
    }
  }
  try {
    return buildJsYamlAnnotation(mappedSource2);
  } catch (e) {
    const m = e.stack.split("\n")[0].match(/^.+ \((\d+):(\d+)\)$/);
    if (m) {
      const f = lineColToIndex(mappedSource2.value);
      const location = { line: Number(m[1]) - 1, column: Number(m[2] - 1) };
      const offset = f(location);
      const { originalString } = mappedSource2.map(offset, true);
      const filename = originalString.fileName;
      const f2 = mappedIndexToLineCol(mappedSource2);
      const { line, column } = f2(offset);
      const sourceContext = createSourceContext(mappedSource2, {
        start: offset,
        end: offset + 1
      });
      e.stack = `${e.reason} (${filename}, ${line + 1}:${column + 1})
${sourceContext}`;
      e.message = e.stack;
      if (mappedLines(mappedSource2)[location.line].value.indexOf("!expr") !== -1 && e.reason.match(/bad indentation of a mapping entry/)) {
        e.message = `${e.message}
${tidyverseInfo(
          "YAML tags like !expr must be followed by YAML strings."
        )}
${tidyverseInfo(
          "Is it possible you need to quote the value you passed to !expr ?"
        )}`;
      }
      e.stack = "";
    }
    throw e;
  }
}
function buildJsYamlAnnotation(mappedYaml) {
  const yml = mappedYaml.value;
  const stack = [];
  const results = [];
  function listener(what, state) {
    const { result, position, kind } = state;
    if (what === "close") {
      const { position: openPosition } = stack.pop();
      if (results.length > 0) {
        const last = results[results.length - 1];
        if (last.start === openPosition && last.end === position) {
          return;
        }
      }
      const components = [];
      while (results.length > 0) {
        const last = results[results.length - 1];
        if (last.end <= openPosition) {
          break;
        }
        components.push(results.pop());
      }
      components.reverse();
      const rawRange = yml.substring(openPosition, position);
      const leftTrim = rawRange.length - rawRange.trimLeft().length;
      const rightTrim = rawRange.length - rawRange.trimRight().length;
      if (rawRange.trim().length === 0) {
        results.push({
          start: position - rightTrim,
          end: position - rightTrim,
          result,
          components,
          kind,
          source: mappedYaml
        });
      } else {
        results.push({
          start: openPosition + leftTrim,
          end: position - rightTrim,
          result,
          components,
          kind,
          source: mappedYaml
        });
      }
    } else {
      stack.push({ position });
    }
  }
  load(yml, { listener, schema: QuartoJSONSchema });
  if (results.length === 0) {
    return {
      start: 0,
      end: 0,
      result: null,
      kind: "null",
      components: [],
      source: mappedYaml
    };
  }
  if (results.length !== 1) {
    throw new Error(
      `Internal Error - expected a single result, got ${results.length} instead`
    );
  }
  JSON.stringify(results[0]);
  return postProcessAnnotation(results[0]);
}
function buildTreeSitterAnnotation(tree, mappedSource2) {
  const errors = [];
  const singletonBuild = (node) => {
    let tag = void 0;
    for (const child of node.children) {
      if (child.type === "tag") {
        tag = child;
        continue;
      }
      if (child.type !== "comment") {
        const result2 = buildNode(child, node.endIndex);
        if (tag) {
          return annotateTag(result2, tag, node);
        } else {
          return result2;
        }
      }
    }
    return annotateEmpty(node.endIndex);
  };
  const buildNode = (node, endIndex) => {
    if (node === null) {
      return annotateEmpty(endIndex === void 0 ? -1 : endIndex);
    }
    if (dispatch[node.type] === void 0) {
      return annotateEmpty(endIndex || node.endIndex || -1);
    }
    return dispatch[node.type](node);
  };
  const annotateError = (start, end, message) => {
    errors.push({ start, end, message });
    return {
      start,
      end,
      result: null,
      kind: "<<ERROR>>",
      components: [],
      source: mappedSource2
    };
  };
  const annotateEmpty = (position) => {
    return {
      start: position,
      end: position,
      result: null,
      kind: "<<EMPTY>>",
      components: [],
      source: mappedSource2
    };
  };
  const annotate = (node, result2, components) => {
    return {
      start: node.startIndex,
      end: node.endIndex,
      result: result2,
      kind: node.type,
      components,
      source: mappedSource2
    };
  };
  const annotateTag = (innerParse, tagNode, outerNode) => {
    const tagParse = annotate(tagNode, tagNode.text, []);
    const result2 = annotate(outerNode, {
      tag: tagNode.text,
      value: innerParse.result
    }, [tagParse, innerParse]);
    return result2;
  };
  const buildPair = (node) => {
    let key, value;
    const children = node.children.filter((n) => n.type !== "comment");
    if (children.length === 3) {
      key = annotate(children[0], children[0].text, []);
      value = buildNode(children[2], node.endIndex);
    } else if (children.length === 2) {
      key = annotate(children[0], children[0].text, []);
      value = annotateEmpty(node.endIndex);
    } else {
      key = annotateEmpty(node.endIndex);
      value = annotateEmpty(node.endIndex);
    }
    return annotate(node, {
      key: key.result,
      value: value.result
    }, [key, value]);
  };
  const dispatch = {
    "stream": singletonBuild,
    "document": singletonBuild,
    "block_node": singletonBuild,
    "flow_node": singletonBuild,
    "double_quote_scalar": (node) => {
      return annotate(node, jsYamlParseLenient(node.text), []);
    },
    "single_quote_scalar": (node) => {
      return annotate(node, jsYamlParseLenient(node.text), []);
    },
    "plain_scalar": (node) => {
      return annotate(node, jsYamlParseLenient(node.text), []);
    },
    "block_scalar": (node) => {
      return annotate(node, jsYamlParseLenient(node.text), []);
    },
    "block_sequence": (node) => {
      const result2 = [], components = [];
      for (let i = 0; i < node.childCount; ++i) {
        const child = node.child(i);
        if (child.type !== "block_sequence_item") {
          continue;
        }
        const component = buildNode(child, node.endIndex);
        components.push(component);
        result2.push(component && component.result);
      }
      return annotate(node, result2, components);
    },
    "block_sequence_item": (node) => {
      if (node.childCount < 2) {
        return annotateEmpty(node.endIndex);
      } else {
        return buildNode(node.child(1), node.endIndex);
      }
    },
    "flow_sequence": (node) => {
      const result2 = [], components = [];
      for (let i = 0; i < node.childCount; ++i) {
        const child = node.child(i);
        if (child.type !== "flow_node") {
          continue;
        }
        const component = buildNode(child, node.endIndex);
        components.push(component);
        result2.push(component.result);
      }
      return annotate(node, result2, components);
    },
    "block_mapping": (node) => {
      const result2 = {}, components = [];
      for (let i = 0; i < node.childCount; ++i) {
        const child = node.child(i);
        let component;
        if (child.type === "ERROR") {
          result2[child.text] = "<<ERROR>>";
          const key2 = annotate(child, child.text, []);
          const value2 = annotateEmpty(child.endIndex);
          component = annotate(child, {
            key: key2.result,
            value: value2.result
          }, [key2, value2]);
        } else if (child.type !== "block_mapping_pair") {
          continue;
        } else {
          component = buildNode(child, node.endIndex);
        }
        const { key, value } = component.result;
        result2[String(key)] = value;
        components.push(...component.components);
      }
      return annotate(node, result2, components);
    },
    "flow_pair": buildPair,
    "flow_mapping": (node) => {
      const result2 = {}, components = [];
      for (let i = 0; i < node.childCount; ++i) {
        const child = node.child(i);
        if (child.type === "flow_node") {
          continue;
        }
        if (child.type === "flow_pair") {
          const component = buildNode(child, node.endIndex);
          const { key, value } = component.result;
          result2[String(key)] = value;
          components.push(...component.components);
        }
      }
      return annotate(node, result2, components);
    },
    "block_mapping_pair": buildPair
  };
  const result = buildNode(tree.rootNode, tree.rootNode.endIndex);
  if (errors.length) {
    result.errors = errors;
  }
  const parsedSize = tree.rootNode.text.trim().length;
  const codeSize = mappedSource2.value.trim().length;
  const lossage = parsedSize / codeSize;
  if (lossage < 0.95) {
    return null;
  }
  return result;
}
function locateCursor(annotation, position) {
  let failedLast = false;
  let innermostAnnotation;
  let keyOrValue;
  const result = [];
  const kInternalLocateError = "Internal error: cursor outside bounds in sequence locate?";
  function locate(node) {
    if (node.kind === "block_mapping" || node.kind === "flow_mapping" || node.kind === "mapping") {
      for (let i = 0; i < node.components.length; i += 2) {
        const keyC = node.components[i], valueC = node.components[i + 1];
        if (keyC.start <= position && position <= keyC.end) {
          innermostAnnotation = keyC;
          result.push(keyC.result);
          keyOrValue = "key";
          return;
        } else if (valueC.start <= position && position <= valueC.end) {
          result.push(keyC.result);
          innermostAnnotation = valueC;
          return locate(valueC);
        }
      }
      failedLast = true;
      return;
    } else if (node.kind === "block_sequence" || node.kind === "flow_sequence") {
      for (let i = 0; i < node.components.length; ++i) {
        const valueC = node.components[i];
        if (valueC.start <= position && position <= valueC.end) {
          result.push(i);
          innermostAnnotation = valueC;
          return locate(valueC);
        }
        if (valueC.start > position) {
          if (i === 0) {
            return;
          } else {
            result.push(i - 1);
            return;
          }
        }
      }
      throw new Error(kInternalLocateError);
    } else {
      if (node.kind !== "<<EMPTY>>") {
        keyOrValue = "value";
        return;
      } else {
        return;
      }
    }
  }
  try {
    locate(annotation);
    return {
      withError: failedLast,
      value: result,
      kind: keyOrValue,
      annotation: innermostAnnotation
    };
  } catch (e) {
    if (e.message === kInternalLocateError) {
      return {
        withError: true
      };
    } else {
      throw e;
    }
  }
}
function locateAnnotation(annotation, position, kind) {
  const originalSource = annotation.source;
  kind = kind || "value";
  for (let i = 0; i < position.length; ++i) {
    const value = position[i];
    if (typeof value === "number") {
      const inner = annotation.components[value];
      if (inner === void 0) {
        throw new Error("Internal Error: invalid path for locateAnnotation");
      }
      annotation = inner;
    } else {
      let found = false;
      for (let j = 0; j < annotation.components.length; j += 2) {
        if (originalSource.value.substring(
          annotation.components[j].start,
          annotation.components[j].end
        ).trim() === value) {
          if (i === position.length - 1) {
            if (kind === "key") {
              annotation = annotation.components[j];
            } else {
              annotation = annotation.components[j + 1];
            }
          }
          found = true;
          break;
        }
      }
      if (!found) {
        throw new Error("Internal Error: invalid path for locateAnnotation");
      }
    }
  }
  return annotation;
}

// ../semaphore.ts
var Semaphore = class {
  constructor(value) {
    this.value = value;
    this.tasks = [];
  }
  release() {
    this.value += 1;
    if (this.tasks.length) {
      const { resolve } = this.tasks.pop();
      resolve();
    }
  }
  async acquire() {
    if (this.value > 0) {
      this.value -= 1;
      return;
    }
    const result = new Promise((resolve, reject) => {
      this.tasks.push({ resolve, reject });
    });
    await result;
    await this.acquire();
  }
  async runExclusive(fun) {
    await this.acquire();
    try {
      const result = await fun();
      this.release();
      return result;
    } catch (e) {
      this.release();
      throw e;
    }
  }
};

// ../yaml-validation/state.ts
function makeInitializer(thunk) {
  let initStarted = false;
  const hasInitSemaphore = new Semaphore(0);
  return async () => {
    if (initStarted) {
      await hasInitSemaphore.runExclusive(async () => {
      });
      return;
    }
    initStarted = true;
    await thunk();
    hasInitSemaphore.release();
  };
}
var initializer = () => {
  throw new Error("initializer not set!!");
};
async function initState() {
  await initializer();
}
var hasSet = false;
function setInitializer(init2) {
  if (hasSet) {
    return;
  }
  initializer = makeInitializer(init2);
  hasSet = true;
}

// ../guess-chunk-options-format.ts
function guessChunkOptionsFormat(options) {
  const noIndentOrColon = /^[^:\s]+[^:]+$/;
  const chunkLines = lines(options);
  if (chunkLines.filter((l) => l.match(noIndentOrColon)).length === 0) {
    return "yaml";
  }
  if (chunkLines.some(
    (l) => l.trim() !== "" && !l.trimRight().endsWith(",") && l.indexOf("=") === -1
  )) {
    return "yaml";
  }
  return "knitr";
}

// ../yaml-validation/validator.ts
var ValidationContext = class {
  constructor() {
    this.instancePath = [];
    this.currentNode = { edge: "#", errors: [], children: [] };
    this.nodeStack = [this.currentNode];
    this.root = this.currentNode;
  }
  error(value, schema2, message) {
    this.currentNode.errors.push({
      value,
      schema: schema2,
      message,
      instancePath: this.instancePath.slice(),
      schemaPath: this.nodeStack.map((node) => node.edge)
    });
  }
  pushSchema(schemaPath) {
    const newNode = {
      edge: schemaPath,
      errors: [],
      children: []
    };
    this.currentNode.children.push(newNode);
    this.currentNode = newNode;
    this.nodeStack.push(newNode);
  }
  popSchema(success) {
    this.nodeStack.pop();
    this.currentNode = this.nodeStack[this.nodeStack.length - 1];
    if (success) {
      this.currentNode.children.pop();
    }
    return success;
  }
  pushInstance(instance) {
    this.instancePath.push(instance);
  }
  popInstance() {
    this.instancePath.pop();
  }
  withSchemaPath(schemaPath, chunk) {
    this.pushSchema(schemaPath);
    return this.popSchema(chunk());
  }
  validate(schema2, source, value, pruneErrors = true) {
    if (validateGeneric(value, schema2, this)) {
      return [];
    }
    return this.collectErrors(schema2, source, value, pruneErrors);
  }
  collectErrors(_schema, source, _value, pruneErrors = true) {
    const inner = (node) => {
      const result2 = [];
      if (node.edge === "anyOf" && pruneErrors) {
        const innerResults = node.children.map(inner);
        const isRequiredError = (e) => e.schemaPath.indexOf("required") === e.schemaPath.length - 1;
        const isPropertyNamesError = (e) => e.schemaPath.indexOf("propertyNames") !== -1;
        if (innerResults.some((el) => el.length && isRequiredError(el[0])) && innerResults.some((el) => el.length && isPropertyNamesError(el[0]))) {
          return innerResults.filter((r) => {
            return r.length && r[0].schemaPath.slice(-1)[0] === "required";
          })[0];
        }
        const errorTypeQuality = (e) => {
          const t = e.schemaPath.slice().reverse();
          if (e.schemaPath.indexOf("propertyNames") !== -1) {
            return 10;
          }
          if (t[0] === "required") {
            return 0;
          }
          if (t[0] === "type") {
            if (t[1] === "null") {
              return 10;
            }
            return 1;
          }
          return 1;
        };
        const errorComparator = (a, b) => {
          for (let i = 0; i < a.length; ++i) {
            if (a[i] < b[i]) {
              return -1;
            }
            if (a[i] > b[i]) {
              return 1;
            }
          }
          return 0;
        };
        let bestResults = [];
        let bestError = [Infinity, Infinity];
        for (const resultGroup of innerResults) {
          let maxQuality = -Infinity;
          let totalSpan = 0;
          for (const result3 of resultGroup) {
            totalSpan += result3.value.end - result3.value.start;
            maxQuality = Math.max(maxQuality, errorTypeQuality(result3));
          }
          const thisError = [maxQuality, totalSpan];
          if (errorComparator(thisError, bestError) === -1) {
            bestError = thisError;
            bestResults = resultGroup;
          }
        }
        return bestResults;
      } else {
        result2.push(...node.errors);
        for (const child of node.children) {
          result2.push(...inner(child));
        }
        return result2;
      }
    };
    const errors = inner(this.root);
    const result = errors.map(
      (validationError) => createLocalizedError({
        violatingObject: validationError.value,
        instancePath: validationError.instancePath,
        schemaPath: validationError.schemaPath,
        schema: validationError.schema,
        message: validationError.message,
        source
      })
    );
    return result;
  }
};
function validateGeneric(value, s, context) {
  s = resolveSchema(s);
  const st = schemaType(s);
  return context.withSchemaPath(st, () => schemaCall(s, {
    "false": (schema2) => {
      context.error(value, schema2, "false");
      return false;
    },
    "true": (_) => true,
    "any": (schema2) => validateAny(value, schema2, context),
    "boolean": (schema2) => validateBoolean(value, schema2, context),
    "number": (schema2) => validateNumber(value, schema2, context),
    "string": (schema2) => validateString(value, schema2, context),
    "null": (schema2) => validateNull(value, schema2, context),
    "enum": (schema2) => validateEnum(value, schema2, context),
    "anyOf": (schema2) => validateAnyOf(value, schema2, context),
    "allOf": (schema2) => validateAllOf(value, schema2, context),
    "array": (schema2) => validateArray(value, schema2, context),
    "object": (schema2) => validateObject(value, schema2, context),
    "ref": (schema2) => validateGeneric(value, resolveSchema(schema2), context)
  }));
}
function typeIsValid(value, schema2, context, valid) {
  if (!valid) {
    return context.withSchemaPath(
      "type",
      () => {
        context.error(value, schema2, "type mismatch");
        return false;
      }
    );
  }
  return valid;
}
function validateAny(_value, _schema, _context) {
  return true;
}
function validateBoolean(value, schema2, context) {
  return typeIsValid(value, schema2, context, typeof value.result === "boolean");
}
function validateNumber(value, schema2, context) {
  if (!typeIsValid(value, schema2, context, typeof value.result === "number")) {
    return false;
  }
  let result = true;
  if (schema2.minimum !== void 0) {
    result = context.withSchemaPath(
      "minimum",
      () => {
        const v = value.result;
        if (!(v >= schema2.minimum)) {
          context.error(
            value,
            schema2,
            `value ${value.result} is less than required minimum ${schema2.minimum}`
          );
          return false;
        }
        return true;
      }
    );
  }
  if (schema2.maximum !== void 0) {
    result = context.withSchemaPath(
      "maximum",
      () => {
        const v = value.result;
        if (!(v <= schema2.maximum)) {
          context.error(
            value,
            schema2,
            `value ${value.result} is greater than required maximum ${schema2.maximum}`
          );
          return false;
        }
        return true;
      }
    );
  }
  if (schema2.exclusiveMinimum !== void 0) {
    result = context.withSchemaPath(
      "exclusiveMinimum",
      () => {
        const v = value.result;
        if (!(v > schema2.exclusiveMinimum)) {
          context.error(
            value,
            schema2,
            `value ${value.result} is less than or equal to required (exclusive) minimum ${schema2.exclusiveMinimum}`
          );
          return false;
        }
        return true;
      }
    );
  }
  if (schema2.exclusiveMaximum !== void 0) {
    result = context.withSchemaPath(
      "exclusiveMaximum",
      () => {
        const v = value.result;
        if (!(v < schema2.exclusiveMaximum)) {
          context.error(
            value,
            schema2,
            `value ${value.result} is greater than or equal to required (exclusive) maximum ${schema2.exclusiveMaximum}`
          );
          return false;
        }
        return true;
      }
    );
  }
  return result;
}
function validateString(value, schema2, context) {
  if (!typeIsValid(value, schema2, context, typeof value.result === "string")) {
    return false;
  }
  if (schema2.pattern !== void 0) {
    if (schema2.compiledPattern === void 0) {
      schema2.compiledPattern = new RegExp(schema2.pattern);
    }
    if (!value.result.match(schema2.compiledPattern)) {
      return context.withSchemaPath(
        "pattern",
        () => {
          context.error(value, schema2, `value doesn't match pattern`);
          return false;
        }
      );
    }
  }
  return true;
}
function validateNull(value, schema2, context) {
  if (!typeIsValid(value, schema2, context, value.result === null)) {
    return false;
  }
  return true;
}
function validateEnum(value, schema2, context) {
  for (const enumValue of schema2["enum"]) {
    if (enumValue === value.result) {
      return true;
    }
  }
  context.error(value, schema2, `must match one of the values`);
  return false;
}
function validateAnyOf(value, schema2, context) {
  let passingSchemas = 0;
  for (let i = 0; i < schema2.anyOf.length; ++i) {
    const subSchema = schema2.anyOf[i];
    context.withSchemaPath(i, () => {
      if (validateGeneric(value, subSchema, context)) {
        passingSchemas++;
        return true;
      }
      return false;
    });
  }
  return passingSchemas > 0;
}
function validateAllOf(value, schema2, context) {
  let passingSchemas = 0;
  for (let i = 0; i < schema2.allOf.length; ++i) {
    const subSchema = schema2.allOf[i];
    context.withSchemaPath(i, () => {
      if (validateGeneric(value, subSchema, context)) {
        passingSchemas++;
        return true;
      }
      return false;
    });
  }
  return passingSchemas === schema2.allOf.length;
}
function validateArray(value, schema2, context) {
  let result = true;
  if (!typeIsValid(value, schema2, context, Array.isArray(value.result))) {
    return false;
  }
  const length = value.result.length;
  if (schema2.minItems !== void 0 && length < schema2.minItems) {
    context.withSchemaPath(
      "minItems",
      () => {
        context.error(
          value,
          schema2,
          `array should have at least ${schema2.minItems} items but has ${length} items instead`
        );
        return false;
      }
    );
    result = false;
  }
  if (schema2.maxItems !== void 0 && length > schema2.maxItems) {
    context.withSchemaPath(
      "maxItems",
      () => {
        context.error(
          value,
          schema2,
          `array should have at most ${schema2.maxItems} items but has ${length} items instead`
        );
        return false;
      }
    );
    result = false;
  }
  if (schema2.items !== void 0) {
    result = context.withSchemaPath("items", () => {
      let result2 = true;
      for (let i = 0; i < value.components.length; ++i) {
        context.pushInstance(i);
        result2 = validateGeneric(value.components[i], schema2.items, context) && result2;
        context.popInstance();
      }
      return result2;
    }) && result;
  }
  return result;
}
function validateObject(value, schema2, context) {
  const isObject3 = typeof value.result === "object" && !Array.isArray(value.result) && value.result !== null;
  if (!typeIsValid(value, schema2, context, isObject3)) {
    return false;
  }
  let result = true;
  const ownProperties = new Set(
    Object.getOwnPropertyNames(value.result)
  );
  const objResult = value.result;
  const locate = (key, keyOrValue = "value") => {
    for (let i = 0; i < value.components.length; i += 2) {
      if (String(value.components[i].result) === key) {
        if (keyOrValue === "value") {
          return value.components[i + 1];
        } else {
          return value.components[i];
        }
      }
    }
    throw new Error(`Internal Error, couldn't locate key ${key}`);
  };
  const inspectedProps = /* @__PURE__ */ new Set();
  if (schema2.closed) {
    result = context.withSchemaPath("closed", () => {
      if (schema2.properties === void 0) {
        throw new Error("Internal Error: closed schemas need properties");
      }
      let innerResult = true;
      for (const key of ownProperties) {
        if (!schema2.properties[key]) {
          context.error(
            locate(key, "key"),
            schema2,
            `object has invalid field ${key}`
          );
          innerResult = false;
        }
      }
      return innerResult;
    }) && result;
  }
  if (schema2.properties !== void 0) {
    result = context.withSchemaPath("properties", () => {
      let result2 = true;
      for (const [key, subSchema] of Object.entries(schema2.properties)) {
        if (ownProperties.has(key)) {
          inspectedProps.add(key);
          context.pushInstance(key);
          result2 = context.withSchemaPath(
            key,
            () => validateGeneric(locate(key), subSchema, context)
          ) && result2;
          context.popInstance();
        }
      }
      return result2;
    }) && result;
  }
  if (schema2.patternProperties !== void 0) {
    result = context.withSchemaPath("patternProperties", () => {
      let result2 = true;
      for (const [key, subSchema] of Object.entries(schema2.patternProperties)) {
        if (schema2.compiledPatterns === void 0) {
          schema2.compiledPatterns = {};
        }
        if (schema2.compiledPatterns[key] === void 0) {
          schema2.compiledPatterns[key] = new RegExp(key);
        }
        const regexp = schema2.compiledPatterns[key];
        for (const [objectKey, _val] of Object.entries(objResult)) {
          if (objectKey.match(regexp)) {
            inspectedProps.add(objectKey);
            context.pushInstance(objectKey);
            result2 = context.withSchemaPath(
              key,
              () => validateGeneric(locate(objectKey), subSchema, context)
            ) && result2;
            context.popInstance();
          }
        }
      }
      return result2;
    }) && result;
  }
  if (schema2.additionalProperties !== void 0) {
    result = context.withSchemaPath("additionalProperties", () => {
      return Object.keys(objResult).filter((objectKey) => !inspectedProps.has(objectKey)).every(
        (objectKey) => validateGeneric(
          locate(objectKey),
          schema2.additionalProperties,
          context
        )
      );
    }) && result;
  }
  if (schema2.propertyNames !== void 0) {
    result = context.withSchemaPath("propertyNames", () => {
      return Array.from(ownProperties).every(
        (key) => validateGeneric(locate(key, "key"), schema2.propertyNames, context)
      );
    }) && result;
  }
  if (schema2.required !== void 0) {
    result = context.withSchemaPath("required", () => {
      let result2 = true;
      for (const reqKey of schema2.required) {
        if (!ownProperties.has(reqKey)) {
          context.error(
            value,
            schema2,
            `object is missing required property ${reqKey}`
          );
          result2 = false;
        }
      }
      return result2;
    }) && result;
  }
  return result;
}
function validate(value, schema2, source, pruneErrors = true) {
  const context = new ValidationContext();
  return context.validate(schema2, source, value, pruneErrors);
}

// ../yaml-validation/yaml-schema.ts
var YAMLSchema = class {
  constructor(schema2) {
    this.errorHandlers = [];
    this.schema = schema2;
  }
  addHandler(handler) {
    this.errorHandlers.push(handler);
  }
  transformErrors(annotation, errors) {
    return errors.map((error) => {
      for (const handler of this.errorHandlers) {
        const localError = handler(error, annotation, this.schema);
        if (localError === null) {
          return null;
        }
        error = localError;
      }
      return error;
    }).filter((error) => error !== null);
  }
  async validateParse(src, annotation, pruneErrors = true) {
    const validationErrors = validate(
      annotation,
      this.schema,
      src,
      pruneErrors
    );
    if (validationErrors.length) {
      const localizedErrors = this.transformErrors(
        annotation,
        validationErrors
      );
      return {
        result: annotation.result,
        errors: localizedErrors
      };
    } else {
      return {
        result: annotation.result,
        errors: []
      };
    }
  }
  reportErrorsInSource(result, _src, message, error, log) {
    if (result.errors.length) {
      if (message.length) {
        error(message);
      }
      for (const err of result.errors) {
        log(err.niceError);
      }
    }
    return result;
  }
  async validateParseWithErrors(src, annotation, message, error, log) {
    const result = await this.validateParse(src, annotation);
    this.reportErrorsInSource(result, src, message, error, log);
    return result;
  }
};

// ../yaml-validation/validator-queue.ts
var yamlValidators = {};
function getSchemaName(schema2) {
  if (schema2 === true || schema2 === false) {
    throw new Error("Expected schema to be named");
  }
  let schemaName = schema2["$id"];
  if (schemaName !== void 0) {
    return schemaName;
  }
  if (schemaType(schema2) === "ref") {
    schemaName = schema2["$ref"];
  }
  if (schemaName !== void 0) {
    return schemaName;
  }
  throw new Error("Expected schema to be named");
}
function getValidator(schema2) {
  const schemaName = getSchemaName(schema2);
  if (yamlValidators[schemaName]) {
    return yamlValidators[schemaName];
  }
  const validator = new YAMLSchema(schema2);
  yamlValidators[schemaName] = validator;
  setDefaultErrorHandlers(validator);
  return validator;
}
async function withValidator(schema2, fun) {
  let result;
  let error;
  try {
    const validator = getValidator(schema2);
    result = await fun(validator);
  } catch (e) {
    error = e;
  }
  if (error !== void 0) {
    throw error;
  }
  return result;
}
function addValidatorErrorHandler(schema2, handler) {
  return withValidator(schema2, async (validator) => {
    validator.addHandler(handler);
  });
}

// ../yaml-schema/constants.ts
var booleanSchema = {
  "type": "boolean",
  "description": "be `true` or `false`",
  "completions": ["true", "false"],
  "exhaustiveCompletions": true
};
var numberSchema = {
  "type": "number",
  "description": "be a number"
};
var stringSchema = {
  "type": "string",
  "description": "be a string"
};
var nullSchema = {
  "type": "null",
  "description": "be the null value",
  "completions": ["null"],
  "exhaustiveCompletions": true
};

// ../yaml-schema/common.ts
var globalInternalIdCounter = 0;
function internalId() {
  return {
    _internalId: ++globalInternalIdCounter
  };
}
function tagSchema(schema2, tags) {
  return {
    ...schema2,
    tags: {
      ...schema2.tags || {},
      ...tags
    }
  };
}
function anySchema(description) {
  return {
    ...internalId(),
    description,
    "type": "any"
  };
}
function enumSchema(...args) {
  if (args.length === 0) {
    throw new Error("Internal Error: Empty enum schema not supported.");
  }
  return {
    ...internalId(),
    "type": "enum",
    "enum": args,
    "description": args.length > 1 ? `be one of: ${args.map((x) => "`" + x + "`").join(", ")}` : `be '${args[0]}'`,
    "completions": args.map(String),
    "exhaustiveCompletions": true
  };
}
function regexSchema(arg, description) {
  const result = {
    ...internalId(),
    "type": "string",
    "pattern": arg
  };
  if (description) {
    result.description = description;
  } else {
    result.description = `be a string that satisfies regex "${arg}"`;
  }
  return result;
}
function anyOfSchema(...args) {
  return {
    ...internalId(),
    "type": "anyOf",
    "anyOf": args,
    "description": `be at least one of: ${args.map((x) => schemaDescription(x).slice(3)).join(", ")}`
  };
}
function allOfSchema(...args) {
  return {
    ...internalId(),
    "type": "allOf",
    "allOf": args,
    "description": `be all of: ${args.map((x) => schemaDescription(x).slice(3)).join(", ")}`
  };
}
function objectSchema(params = {}) {
  let {
    properties,
    patternProperties,
    required,
    additionalProperties,
    description,
    baseSchema,
    exhaustive,
    completions: completionsParam,
    namingConvention,
    propertyNames: propertyNamesSchema,
    closed
  } = params;
  required = required || [];
  properties = properties || {};
  patternProperties = patternProperties || {};
  const tags = {};
  let tagsAreSet = false;
  let propertyNames = propertyNamesSchema;
  const objectKeys = Object.getOwnPropertyNames(completionsParam || properties);
  if (namingConvention !== "ignore") {
    const { pattern, list } = resolveCaseConventionRegex(
      objectKeys,
      namingConvention
    );
    if (pattern !== void 0) {
      if (propertyNames === void 0) {
        propertyNames = {
          "type": "string",
          pattern
        };
      } else {
        propertyNames = allOfSchema(
          propertyNames,
          {
            "type": "string",
            pattern
          }
        );
      }
      tags["case-convention"] = list;
      tagsAreSet = true;
    }
  }
  if (completionsParam) {
    tags["completions"] = completionsParam;
    tagsAreSet = true;
  }
  const hasDescription = description !== void 0;
  description = description || "be an object";
  let result = void 0;
  if (baseSchema) {
    if (!Array.isArray(baseSchema)) {
      baseSchema = [baseSchema];
    }
    if (baseSchema.some((s) => s.type !== "object")) {
      throw new Error("Internal Error: can only extend other object Schema");
    }
    if (baseSchema.length <= 0) {
      throw new Error("Internal Error: base schema must be non-empty");
    }
    let temp = {
      ...internalId()
    };
    for (const base of baseSchema) {
      temp = Object.assign(temp, base);
    }
    result = temp;
    if (result === void 0) {
      throw new Error("Internal Error: result should not be undefined");
    }
    if (result.$id) {
      delete result.$id;
    }
    for (const base of baseSchema) {
      if (base.exhaustiveCompletions) {
        result.exhaustiveCompletions = true;
      }
    }
    if (hasDescription) {
      result.description = description;
    }
    result.properties = Object.assign(
      {},
      ...baseSchema.map((s) => s.properties),
      properties
    );
    result.patternProperties = Object.assign(
      {},
      ...baseSchema.map((s) => s.patternProperties),
      patternProperties
    );
    result.required = [
      ...baseSchema.map((s) => s.required || []),
      required || []
    ].flat();
    if (result.required && result.required.length === 0) {
      result.required = void 0;
    }
    const additionalPropArray = baseSchema.map((s) => s.additionalProperties).filter((s) => s !== void 0);
    if (additionalProperties) {
      additionalPropArray.push(additionalProperties);
    }
    if (additionalPropArray.length) {
      result.additionalProperties = allOfSchema(...additionalPropArray);
    }
    const propNamesArray = baseSchema.map((s) => s.propertyNames).filter((s) => s !== void 0);
    if (propertyNames) {
      propNamesArray.push(propertyNames);
    }
    if (propNamesArray.length === baseSchema.length + 1) {
      result.propertyNames = anyOfSchema(...propNamesArray);
    }
    result.closed = closed || baseSchema.some((s) => s.closed);
  } else {
    result = {
      ...internalId(),
      "type": "object",
      description
    };
    if (exhaustive) {
      result.exhaustiveCompletions = true;
    }
    if (properties) {
      result.properties = properties;
    }
    if (patternProperties) {
      result.patternProperties = patternProperties;
    }
    if (required && required.length > 0) {
      result.required = required;
    }
    result.closed = closed;
    if (additionalProperties !== void 0) {
      result.additionalProperties = additionalProperties;
    }
    if (propertyNames !== void 0) {
      result.propertyNames = propertyNames;
    }
  }
  if (tagsAreSet) {
    result.tags = tags;
  }
  return result;
}
function arraySchema(items) {
  if (items) {
    return {
      ...internalId(),
      "type": "array",
      "description": `be an array of values, where each element must ${schemaDescription(items)}`,
      items
    };
  } else {
    return {
      ...internalId(),
      "type": "array",
      "description": `be an array of values`
    };
  }
}
function documentSchema(schema2, doc) {
  const result = Object.assign({}, schema2);
  result.documentation = doc;
  return result;
}
function describeSchema(schema2, description) {
  const result = Object.assign({}, schema2);
  result.description = `be ${description}`;
  return result;
}
function completeSchema(schema2, ...completions2) {
  const result = Object.assign({}, schema2);
  const prevCompletions = (schema2.completions || []).slice();
  prevCompletions.push(...completions2);
  result.completions = prevCompletions;
  return result;
}
function completeSchemaOverwrite(schema2, ...completions2) {
  const result = Object.assign({}, schema2);
  result.completions = completions2;
  return result;
}
function idSchema(schema2, id) {
  const result = Object.assign({}, schema2);
  result["$id"] = id;
  return result;
}
function errorMessageSchema(schema2, errorMessage) {
  return {
    ...schema2,
    errorMessage
  };
}
function refSchema($ref, description) {
  return {
    ...internalId(),
    "type": "ref",
    $ref,
    description
  };
}
function valueSchema(val, description) {
  return {
    ...internalId(),
    "type": "enum",
    "enum": [val],
    "description": description || `be ${JSON.stringify(val)}`
  };
}

// ../memoize.ts
function memoize(f, keyMemoizer) {
  const memo = {};
  const inner = (...args) => {
    const key = keyMemoizer(...args);
    const v = memo[key];
    if (v !== void 0) {
      return v;
    }
    memo[key] = f(...args);
    return memo[key];
  };
  return inner;
}

// ../glob.ts
var regExpEscapeChars = [
  "!",
  "$",
  "(",
  ")",
  "*",
  "+",
  ".",
  "=",
  "?",
  "[",
  "\\",
  "^",
  "{",
  "|"
];
var rangeEscapeChars = ["-", "\\", "]"];
function globToRegExp(glob, {
  extended = true,
  globstar: globstarOption = true,
  caseInsensitive = false
} = {}) {
  if (glob == "") {
    return /(?!)/;
  }
  const sep = "/+";
  const sepMaybe = "/*";
  const seps = ["/"];
  const globstar = "(?:[^/]*(?:/|$)+)*";
  const wildcard = "[^/]*";
  const escapePrefix = "\\";
  let newLength = glob.length;
  for (; newLength > 1 && seps.includes(glob[newLength - 1]); newLength--)
    ;
  glob = glob.slice(0, newLength);
  let regExpString = "";
  for (let j = 0; j < glob.length; ) {
    let segment = "";
    const groupStack = [];
    let inRange = false;
    let inEscape = false;
    let endsWithSep = false;
    let i = j;
    for (; i < glob.length && !seps.includes(glob[i]); i++) {
      if (inEscape) {
        inEscape = false;
        const escapeChars = inRange ? rangeEscapeChars : regExpEscapeChars;
        segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
        continue;
      }
      if (glob[i] == escapePrefix) {
        inEscape = true;
        continue;
      }
      if (glob[i] == "[") {
        if (!inRange) {
          inRange = true;
          segment += "[";
          if (glob[i + 1] == "!") {
            i++;
            segment += "^";
          } else if (glob[i + 1] == "^") {
            i++;
            segment += "\\^";
          }
          continue;
        } else if (glob[i + 1] == ":") {
          let k = i + 1;
          let value = "";
          while (glob[k + 1] != null && glob[k + 1] != ":") {
            value += glob[k + 1];
            k++;
          }
          if (glob[k + 1] == ":" && glob[k + 2] == "]") {
            i = k + 2;
            if (value == "alnum")
              segment += "\\dA-Za-z";
            else if (value == "alpha")
              segment += "A-Za-z";
            else if (value == "ascii")
              segment += "\0-\x7F";
            else if (value == "blank")
              segment += "	 ";
            else if (value == "cntrl")
              segment += "\0-\x7F";
            else if (value == "digit")
              segment += "\\d";
            else if (value == "graph")
              segment += "!-~";
            else if (value == "lower")
              segment += "a-z";
            else if (value == "print")
              segment += " -~";
            else if (value == "punct") {
              segment += `!"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_\u2018{|}~`;
            } else if (value == "space")
              segment += "\\s\v";
            else if (value == "upper")
              segment += "A-Z";
            else if (value == "word")
              segment += "\\w";
            else if (value == "xdigit")
              segment += "\\dA-Fa-f";
            continue;
          }
        }
      }
      if (glob[i] == "]" && inRange) {
        inRange = false;
        segment += "]";
        continue;
      }
      if (inRange) {
        if (glob[i] == "\\") {
          segment += `\\\\`;
        } else {
          segment += glob[i];
        }
        continue;
      }
      if (glob[i] == ")" && groupStack.length > 0 && groupStack[groupStack.length - 1] != "BRACE") {
        segment += ")";
        const type2 = groupStack.pop();
        if (type2 == "!") {
          segment += wildcard;
        } else if (type2 != "@") {
          segment += type2;
        }
        continue;
      }
      if (glob[i] == "|" && groupStack.length > 0 && groupStack[groupStack.length - 1] != "BRACE") {
        segment += "|";
        continue;
      }
      if (glob[i] == "+" && extended && glob[i + 1] == "(") {
        i++;
        groupStack.push("+");
        segment += "(?:";
        continue;
      }
      if (glob[i] == "@" && extended && glob[i + 1] == "(") {
        i++;
        groupStack.push("@");
        segment += "(?:";
        continue;
      }
      if (glob[i] == "?") {
        if (extended && glob[i + 1] == "(") {
          i++;
          groupStack.push("?");
          segment += "(?:";
        } else {
          segment += ".";
        }
        continue;
      }
      if (glob[i] == "!" && extended && glob[i + 1] == "(") {
        i++;
        groupStack.push("!");
        segment += "(?!";
        continue;
      }
      if (glob[i] == "{") {
        groupStack.push("BRACE");
        segment += "(?:";
        continue;
      }
      if (glob[i] == "}" && groupStack[groupStack.length - 1] == "BRACE") {
        groupStack.pop();
        segment += ")";
        continue;
      }
      if (glob[i] == "," && groupStack[groupStack.length - 1] == "BRACE") {
        segment += "|";
        continue;
      }
      if (glob[i] == "*") {
        if (extended && glob[i + 1] == "(") {
          i++;
          groupStack.push("*");
          segment += "(?:";
        } else {
          const prevChar = glob[i - 1];
          let numStars = 1;
          while (glob[i + 1] == "*") {
            i++;
            numStars++;
          }
          const nextChar = glob[i + 1];
          if (globstarOption && numStars == 2 && [...seps, void 0].includes(prevChar) && [...seps, void 0].includes(nextChar)) {
            segment += globstar;
            endsWithSep = true;
          } else {
            segment += wildcard;
          }
        }
        continue;
      }
      segment += regExpEscapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
    }
    if (groupStack.length > 0 || inRange || inEscape) {
      segment = "";
      for (const c of glob.slice(j, i)) {
        segment += regExpEscapeChars.includes(c) ? `\\${c}` : c;
        endsWithSep = false;
      }
    }
    regExpString += segment;
    if (!endsWithSep) {
      regExpString += i < glob.length ? sep : sepMaybe;
      endsWithSep = true;
    }
    while (seps.includes(glob[i]))
      i++;
    if (!(i > j)) {
      throw new Error("Assertion failure: i > j (potential infinite loop)");
    }
    j = i;
  }
  regExpString = `^${regExpString}$`;
  return new RegExp(regExpString, caseInsensitive ? "i" : "");
}

// resources.ts
var _resources = {};
function setYamlIntelligenceResources(resources) {
  for (const [key, value] of Object.entries(resources)) {
    _resources[key] = value;
  }
}
function getYamlIntelligenceResource(filename) {
  if (_resources[filename] === void 0) {
    throw new Error(
      `Internal Error: getYamlIntelligenceResource called with missing resource ${filename}`
    );
  }
  return _resources[filename];
}
function expandResourceGlob(glob) {
  return Object.keys(_resources).filter(
    (key) => key.match(globToRegExp(glob))
  ).map((key) => [key, getYamlIntelligenceResource(key)]);
}

// ../polyfills.ts
function fromEntries(iterable) {
  return [...iterable].reduce((obj, [key, val]) => {
    obj[key] = val;
    return obj;
  }, {});
}

// ../yaml-schema/validated-yaml.ts
var ValidationError2 = class extends Error {
  constructor(msg, validationErrors) {
    super(
      [msg, ...validationErrors.map((e) => tidyverseFormatError(e.niceError))].join(
        "\n\n"
      )
    );
    Object.setPrototypeOf(this, ValidationError2.prototype);
    this.validationErrors = validationErrors;
  }
};
var isObject2 = (value) => {
  const type2 = typeof value;
  return value !== null && (type2 === "object" || type2 === "function");
};
async function readAndValidateYamlFromMappedString(mappedYaml, schema2, pruneErrors = true, lenient = false) {
  const annotation = await readAnnotatedYamlFromMappedString(
    mappedYaml,
    lenient
  );
  if (annotation === null) {
    throw new Error("Parse error in readAnnotatedYamlFromMappedString");
  }
  const validateYaml = !isObject2(annotation.result) || annotation.result["validate-yaml"] !== false;
  if (!validateYaml) {
    return {
      yaml: annotation.result,
      yamlValidationErrors: []
    };
  }
  const validate2 = async (validator) => {
    const valResult = await validator.validateParse(
      mappedYaml,
      annotation,
      pruneErrors
    );
    return {
      yaml: annotation.result,
      yamlValidationErrors: valResult.errors
    };
  };
  if (typeof annotation.result === "object" && !Array.isArray(annotation.result)) {
    const preCheckResult = await withValidator(
      getSchemaDefinition("bad-parse-schema"),
      validate2
    );
    if (preCheckResult.yamlValidationErrors.length !== 0) {
      return preCheckResult;
    }
  }
  const result = await withValidator(schema2, validate2);
  return result;
}

// ../yaml-schema/from-yaml.ts
function setBaseSchemaProperties(yaml, schema2) {
  if (yaml.additionalCompletions) {
    schema2 = completeSchema(schema2, ...yaml.additionalCompletions);
  }
  if (yaml.completions) {
    schema2 = completeSchemaOverwrite(schema2, ...yaml.completions);
  }
  if (yaml.id) {
    schema2 = idSchema(schema2, yaml.id);
  }
  if (yaml.hidden === true) {
    schema2 = completeSchemaOverwrite(schema2);
    schema2 = tagSchema(schema2, {
      "hidden": true
    });
  }
  if (yaml.tags) {
    schema2 = tagSchema(schema2, yaml.tags);
  }
  if (yaml.description) {
    schema2 = tagSchema(schema2, { description: yaml.description });
    if (typeof yaml.description === "string") {
      schema2 = documentSchema(schema2, yaml.description);
    } else if (typeof yaml.description === "object") {
      schema2 = documentSchema(schema2, yaml.description.short);
    }
  }
  const result = Object.assign({}, schema2);
  if (yaml.errorDescription) {
    result.description = yaml.errorDescription;
  }
  if (yaml.errorMessage) {
    result.errorMessage = yaml.errorMessage;
  }
  return result;
}
function convertFromNull(yaml) {
  return setBaseSchemaProperties(yaml["null"], nullSchema);
}
function convertFromSchema(yaml) {
  const schema2 = convertFromYaml(yaml.schema);
  return setBaseSchemaProperties(yaml, schema2);
}
function convertFromString(yaml) {
  if (yaml["string"].pattern) {
    return setBaseSchemaProperties(
      yaml,
      setBaseSchemaProperties(
        yaml["string"],
        regexSchema(yaml["string"].pattern)
      )
    );
  } else {
    return setBaseSchemaProperties(
      yaml,
      setBaseSchemaProperties(
        yaml["string"],
        stringSchema
      )
    );
  }
}
function convertFromPattern(yaml) {
  if (typeof yaml.pattern === "string") {
    return setBaseSchemaProperties(yaml, regexSchema(yaml.pattern));
  } else {
    return setBaseSchemaProperties(
      yaml,
      setBaseSchemaProperties(yaml.pattern, regexSchema(yaml.pattern.regex))
    );
  }
}
function convertFromPath(yaml) {
  return setBaseSchemaProperties(yaml["path"], stringSchema);
}
function convertFromNumber(yaml) {
  return setBaseSchemaProperties(yaml["number"], numberSchema);
}
function convertFromBoolean(yaml) {
  return setBaseSchemaProperties(yaml["boolean"], booleanSchema);
}
function convertFromRef(yaml) {
  return setBaseSchemaProperties(yaml, refSchema(yaml.ref, `be ${yaml.ref}`));
}
function convertFromMaybeArrayOf(yaml) {
  const inner = convertFromYaml(yaml.maybeArrayOf);
  const schema2 = tagSchema(
    anyOfSchema(inner, arraySchema(inner)),
    {
      "complete-from": ["anyOf", 0]
    }
  );
  return setBaseSchemaProperties(yaml, schema2);
}
function convertFromArrayOf(yaml) {
  if (yaml.arrayOf.schema) {
    const result = arraySchema(convertFromYaml(yaml.arrayOf.schema));
    return setBaseSchemaProperties(
      yaml,
      setBaseSchemaProperties(yaml.arrayOf, result)
    );
  } else {
    return setBaseSchemaProperties(
      yaml,
      arraySchema(convertFromYaml(yaml.arrayOf))
    );
  }
}
function convertFromAllOf(yaml) {
  if (yaml.allOf.schemas) {
    const inner = yaml.allOf.schemas.map((x) => convertFromYaml(x));
    const schema2 = allOfSchema(...inner);
    return setBaseSchemaProperties(
      yaml,
      setBaseSchemaProperties(yaml.allOf, schema2)
    );
  } else {
    const inner = yaml.allOf.map((x) => convertFromYaml(x));
    const schema2 = allOfSchema(...inner);
    return setBaseSchemaProperties(yaml, schema2);
  }
}
function convertFromAnyOf(yaml) {
  if (yaml.anyOf.schemas) {
    const inner = yaml.anyOf.schemas.map((x) => convertFromYaml(x));
    const schema2 = anyOfSchema(...inner);
    return setBaseSchemaProperties(
      yaml,
      setBaseSchemaProperties(yaml.anyOf, schema2)
    );
  } else {
    const inner = yaml.anyOf.map((x) => convertFromYaml(x));
    const schema2 = anyOfSchema(...inner);
    return setBaseSchemaProperties(yaml, schema2);
  }
}
function convertFromEnum(yaml) {
  const schema2 = yaml["enum"];
  if (schema2.hasOwnProperty("values")) {
    return setBaseSchemaProperties(
      yaml,
      setBaseSchemaProperties(yaml["enum"], enumSchema(...schema2.values))
    );
  } else {
    return setBaseSchemaProperties(yaml, enumSchema(...schema2));
  }
}
function convertFromRecord(yaml) {
  if (yaml.record.properties) {
    const schema2 = convertFromObject({
      "object": {
        "properties": yaml.record.properties,
        "closed": true,
        "required": "all"
      }
    });
    return setBaseSchemaProperties(
      yaml,
      setBaseSchemaProperties(yaml.record, schema2)
    );
  } else {
    const schema2 = convertFromObject({
      "object": {
        "properties": yaml.record,
        "closed": true,
        "required": "all"
      }
    });
    return setBaseSchemaProperties(yaml, schema2);
  }
}
function convertFromObject(yaml) {
  const schema2 = yaml["object"];
  const params = {};
  if (schema2.namingConvention) {
    switch (schema2.namingConvention) {
      case "capitalizationCase":
        params.namingConvention = "capitalizationCase";
        break;
      case "capitalization-case":
        params.namingConvention = "capitalizationCase";
        break;
      case "capitalization_case":
        params.namingConvention = "capitalizationCase";
        break;
      case "underscoreCase":
        params.namingConvention = "underscore_case";
        break;
      case "underscore-case":
        params.namingConvention = "underscore_case";
        break;
      case "underscore_case":
        params.namingConvention = "underscore_case";
        break;
      case "dashCase":
        params.namingConvention = "dash-case";
        break;
      case "dash-case":
        params.namingConvention = "dash-case";
        break;
      case "dash_case":
        params.namingConvention = "dash-case";
        break;
      case "camelCase":
        params.namingConvention = "capitalizationCase";
        break;
      case "camel-case":
        params.namingConvention = "capitalizationCase";
        break;
      case "camel_case":
        params.namingConvention = "capitalizationCase";
        break;
      case "snakeCase":
        params.namingConvention = "underscore_case";
        break;
      case "snake-case":
        params.namingConvention = "underscore_case";
        break;
      case "snake_case":
        params.namingConvention = "underscore_case";
        break;
      case "kebabCase":
        params.namingConvention = "dash-case";
        break;
      case "kebab-case":
        params.namingConvention = "dash-case";
        break;
      case "kebab_case":
        params.namingConvention = "dash-case";
        break;
      default:
        throw new Error("Internal Error: this should have failed validation");
    }
    params.namingConvention = schema2.namingConvention;
  }
  if (schema2.properties) {
    params.properties = fromEntries(
      Object.entries(schema2.properties).map(([key, value]) => [key, convertFromYaml(value)])
    );
  }
  if (schema2.patternProperties) {
    params.patternProperties = fromEntries(
      Object.entries(schema2.properties).map(([key, value]) => [key, convertFromYaml(value)])
    );
  }
  if (schema2.propertyNames !== void 0) {
    params.propertyNames = convertFromYaml(schema2.propertyNames);
  } else if (schema2.closed === true) {
    const objectKeys = Object.keys(params.properties || {});
    if (objectKeys.length === 0) {
      throw new Error("object schema `closed` requires field `properties`.");
    }
    if (params.namingConvention !== void 0 && params.namingConvention !== "ignore") {
      throw new Error(
        "object schema `closed` is only supported with namingConvention: `ignore`"
      );
    }
    params.namingConvention = "ignore";
    params.closed = true;
  }
  if (schema2.additionalProperties !== void 0) {
    if (schema2.additionalProperties === false) {
      params.additionalProperties = false;
    } else {
      params.additionalProperties = convertFromYaml(
        schema2.additionalProperties
      );
    }
  }
  if (schema2["super"]) {
    if (Array.isArray(schema2["super"])) {
      params.baseSchema = schema2["super"].map((s) => convertFromYaml(s));
    } else {
      params.baseSchema = convertFromYaml(schema2["super"]);
    }
  }
  if (schema2["required"] === "all") {
    params.required = Object.keys(schema2.properties || {});
  } else if (schema2["required"]) {
    params.required = schema2["required"];
  }
  if (schema2["completions"]) {
    params.completions = schema2["completions"];
  }
  return setBaseSchemaProperties(
    yaml,
    setBaseSchemaProperties(schema2, objectSchema(params))
  );
}
function lookup(yaml) {
  if (!hasSchemaDefinition(yaml.resolveRef)) {
    throw new Error(`lookup of key ${yaml.resolveRef} in definitions failed`);
  }
  return getSchemaDefinition(yaml.resolveRef);
}
function convertFromYaml(yaml) {
  const literalValues = [
    { val: "object", schema: objectSchema() },
    { val: "path", schema: stringSchema },
    { val: "string", schema: stringSchema },
    { val: "number", schema: numberSchema },
    { val: "boolean", schema: booleanSchema },
    { val: "any", schema: anySchema() },
    { val: null, schema: nullSchema }
  ];
  for (const { val, schema: schema2 } of literalValues) {
    if (yaml === val) {
      return schema2;
    }
  }
  if (typeof yaml !== "object") {
    return valueSchema(yaml);
  }
  const schemaObjectKeyFunctions = [
    { key: "anyOf", value: convertFromAnyOf },
    { key: "allOf", value: convertFromAllOf },
    { key: "boolean", value: convertFromBoolean },
    { key: "arrayOf", value: convertFromArrayOf },
    { key: "enum", value: convertFromEnum },
    { key: "maybeArrayOf", value: convertFromMaybeArrayOf },
    { key: "null", value: convertFromNull },
    { key: "number", value: convertFromNumber },
    { key: "object", value: convertFromObject },
    { key: "path", value: convertFromPath },
    { key: "record", value: convertFromRecord },
    { key: "ref", value: convertFromRef },
    { key: "resolveRef", value: lookup },
    { key: "string", value: convertFromString },
    { key: "pattern", value: convertFromPattern },
    { key: "schema", value: convertFromSchema }
  ];
  for (const { key: objectKey, value: fun } of schemaObjectKeyFunctions) {
    if (yaml[objectKey] !== void 0) {
      return fun(yaml);
    }
  }
  throw new Error(
    "Internal Error: Cannot convert object; this should have failed validation."
  );
}
function objectSchemaFromFieldsObject(fields, exclude) {
  exclude = exclude || ((_key) => false);
  const properties = {};
  convertFromFieldsObject(fields, properties);
  for (const key of Object.keys(properties)) {
    if (exclude(key)) {
      delete properties[key];
    }
  }
  return objectSchema({ properties });
}
function annotateSchemaFromField(field, schema2) {
  if (field.enabled !== void 0) {
    schema2 = tagSchema(schema2, {
      formats: field.enabled
    });
  }
  if (field.disabled !== void 0) {
    schema2 = tagSchema(schema2, {
      formats: field.disabled.map((x) => `!${x}`)
    });
  }
  if (field.tags) {
    schema2 = tagSchema(schema2, field.tags);
  }
  if (field.description) {
    if (typeof field.description === "string") {
      schema2 = documentSchema(schema2, field.description);
    } else if (typeof field.description === "object") {
      schema2 = documentSchema(schema2, field.description.short);
    }
    schema2 = tagSchema(schema2, {
      description: field.description
    });
  }
  if (field.hidden) {
    schema2 = tagSchema(schema2, {
      "hidden": true
    });
  }
  return schema2;
}
function schemaFromField(entry) {
  const schema2 = convertFromYaml(entry.schema);
  return annotateSchemaFromField(entry, schema2);
}
function convertFromFieldsObject(yaml, obj) {
  const result = obj || {};
  for (const field of yaml) {
    let schema2 = convertFromYaml(field.schema);
    schema2 = annotateSchemaFromField(field, schema2);
    result[field.name] = schema2;
    if (field.alias) {
      result[field.alias] = schema2;
    }
  }
  return result;
}
function schemaFieldsFromGlob(globPath, testFun) {
  const result = [];
  testFun = testFun || ((_e, _p) => true);
  for (const [file, fields] of expandResourceGlob(globPath)) {
    for (const field of fields) {
      const fieldName = field.name;
      const schemaId = `quarto-resource-${file.split("/").slice(-1)[0].slice(0, -4)}-${fieldName}`;
      if (testFun(field, file)) {
        result.push({
          schemaId,
          field
        });
      }
    }
  }
  return result;
}
var schemaRefContexts = memoize(() => {
  const groups = getYamlIntelligenceResource("schema/groups.yml");
  const result = [];
  for (const [topLevel, sub] of Object.entries(groups)) {
    for (const key of Object.keys(sub)) {
      result.push(`${topLevel}-${key}`);
    }
  }
  return result;
}, () => "const");
function objectRefSchemaFromContextGlob(contextGlob, testFun) {
  const regexp = globToRegExp(contextGlob);
  return objectRefSchemaFromGlob(
    "schema/{document,cell}-*.yml",
    (field, path) => {
      if (testFun !== void 0 && !testFun(field, path)) {
        return false;
      }
      const pathContext = path.split("/").slice(-1)[0].slice(0, -4);
      const schemaContexts = field !== void 0 && field.tags !== void 0 && field.tags.contexts || [];
      if (pathContext.match(regexp)) {
        return true;
      }
      return schemaContexts.some((c) => c.match(regexp));
    }
  );
}
function objectRefSchemaFromGlob(glob, testFun) {
  const properties = {};
  for (const { schemaId, field } of schemaFieldsFromGlob(glob, testFun)) {
    const schema2 = refSchema(schemaId, schemaId);
    properties[field.name] = schema2;
    if (field.alias) {
      properties[field.alias] = schema2;
    }
  }
  return objectSchema({ properties });
}
async function buildResourceSchemas() {
  const path = "schema/{cell-*,document-*,project}.yml";
  for (const [file, fields] of expandResourceGlob(path)) {
    const yaml = fields;
    const entries = Object.entries(convertFromFieldsObject(yaml));
    for (const [fieldName, fieldSchema] of entries) {
      const schemaId = `quarto-resource-${file.split("/").slice(-1)[0].slice(0, -4)}-${fieldName}`;
      const schema2 = idSchema(fieldSchema, schemaId);
      setSchemaDefinition(schema2);
      await withValidator(schema2, async (_validator) => {
      });
    }
  }
}

// ../yaml-schema/definitions.ts
function defineCached(thunk, schemaId) {
  let schema2;
  return async () => {
    if (hasSchemaDefinition(schemaId)) {
      schema2 = getSchemaDefinition(schemaId);
      return refSchema(
        schema2.$id,
        schema2.description || `be a {schema['$id'] as string}`
      );
    }
    const result = await thunk();
    const { errorHandlers } = result;
    schema2 = result.schema;
    if (schemaId !== schema2.$id) {
      schema2 = idSchema(schema2, schemaId);
    }
    define(schema2);
    for (const fun of errorHandlers) {
      addValidatorErrorHandler(schema2, fun);
    }
    return refSchema(
      schema2.$id,
      schema2.description || `be a {schema['$id']}`
    );
  };
}
function define(schema2) {
  if (schema2 !== true && schema2 !== false && schema2.$id && !hasSchemaDefinition(schema2.$id)) {
    setSchemaDefinition(schema2);
  }
}
async function loadDefaultSchemaDefinitions() {
  await loadSchemaDefinitions(
    getYamlIntelligenceResource("schema/definitions.yml")
  );
  await buildResourceSchemas();
}
async function loadSchemaDefinitions(yaml) {
  await Promise.all(yaml.map(async (yamlSchema) => {
    const schema2 = convertFromYaml(yamlSchema);
    if (schema2.$id === void 0) {
      throw new Error(`Internal error: unnamed schema in definitions`);
    }
    setSchemaDefinition(schema2);
  }));
}

// ../yaml-schema/chunk-metadata.ts
function checkForEqualsInChunk(error, _parse, _schema) {
  if (typeof error.violatingObject.result !== "string") {
    return error;
  }
  const badObject = error.source.value.substring(
    error.violatingObject.start,
    error.violatingObject.end
  );
  if (errorKeyword(error) !== "type") {
    return error;
  }
  let m;
  const heading = `${error.location}: ${quotedStringColor(badObject)} must be a YAML mapping.`;
  const errorMsg = [`${quotedStringColor(badObject)} is a string.`];
  const newError = {
    heading,
    error: errorMsg,
    info: {}
  };
  addFileInfo(newError, error.source);
  addInstancePathInfo(newError, error.instancePath);
  if (m = badObject.match(/= *TRUE/i)) {
    newError.info["suggestion-fix"] = `Try using ${quotedStringColor(": true")} instead of ${quotedStringColor(m[0])}.`;
  } else if (m = badObject.match(/= *FALSE/i)) {
    newError.info["suggestion-fix"] = `Try using ${quotedStringColor(": false")} instead of ${quotedStringColor(m[0])}.`;
  } else if (badObject.match("=")) {
    newError.info["suggestion-fix"] = `Try using ${quotedStringColor(":")} instead of ${quotedStringColor("=")}.`;
  } else {
    return error;
  }
  return {
    ...error,
    message: tidyverseFormatError(newError)
  };
}
var makeEngineSchema = (engine) => idSchema(
  objectRefSchemaFromContextGlob(
    "cell-*",
    (field, _path) => {
      const engineTag = field && field.tags && field.tags.engine;
      switch (typeof engineTag) {
        case "undefined":
          return true;
        case "string":
          return engineTag === engine;
        case "object":
          return engineTag.indexOf(engine) !== -1;
        default:
          throw new Error(`Internal Error: bad engine tag ${engineTag}`);
      }
    }
  ),
  `engine-${engine}`
);
var markdownEngineSchema = defineCached(
  async () => {
    return {
      schema: makeEngineSchema("markdown"),
      errorHandlers: []
    };
  },
  "engine-markdown"
);
var knitrEngineSchema = defineCached(
  async () => {
    const result = await makeEngineSchema("knitr");
    return { schema: result, errorHandlers: [checkForEqualsInChunk] };
  },
  "engine-knitr"
);
var jupyterEngineSchema = defineCached(
  async () => {
    return {
      schema: makeEngineSchema("jupyter"),
      errorHandlers: []
    };
  },
  "engine-jupyter"
);
async function getEngineOptionsSchema() {
  const obj = {
    markdown: await markdownEngineSchema(),
    knitr: await knitrEngineSchema(),
    jupyter: await jupyterEngineSchema()
  };
  return obj;
}

// ../partition-cell-options.ts
function mappedSource(source, substrs) {
  const params = [];
  for (const { range } of substrs) {
    params.push(range);
  }
  return mappedString(source, params);
}
async function parseAndValidateCellOptions(mappedYaml, language, validate2 = false, engine = "", lenient = false) {
  if (mappedYaml.value.trim().length === 0) {
    return void 0;
  }
  const engineOptionsSchema = await getEngineOptionsSchema();
  let schema2 = engineOptionsSchema[engine];
  const languages = getYamlIntelligenceResource(
    "handlers/languages.yml"
  );
  if (languages.indexOf(language) !== -1) {
    try {
      schema2 = getYamlIntelligenceResource(
        `handlers/${language}/schema.yml`
      );
    } catch (_e) {
      schema2 = void 0;
    }
  }
  if (schema2 === void 0 || !validate2) {
    return readAnnotatedYamlFromMappedString(mappedYaml, lenient).result;
  }
  const { yaml, yamlValidationErrors } = await readAndValidateYamlFromMappedString(
    mappedYaml,
    schema2,
    void 0,
    lenient
  );
  if (yamlValidationErrors.length > 0) {
    throw new ValidationError2(
      `Validation of YAML metadata for cell with engine ${engine} failed`,
      yamlValidationErrors
    );
  }
  return yaml;
}
function partitionCellOptionsText(language, source) {
  const commentChars = langCommentChars(language);
  const optionPattern = optionCommentPattern(commentChars[0]);
  const optionSuffix = commentChars[1] || "";
  const optionsSource = [];
  const yamlLines = [];
  let endOfYaml = 0;
  for (const line of rangedLines(source.value, true)) {
    const optionMatch = line.substring.match(optionPattern);
    if (optionMatch) {
      if (!optionSuffix || line.substring.trimEnd().endsWith(optionSuffix)) {
        let yamlOption = line.substring.substring(optionMatch[0].length);
        if (optionSuffix) {
          yamlOption = yamlOption.trimEnd();
          yamlOption = yamlOption.substring(
            0,
            yamlOption.length - optionSuffix.length
          ).trimEnd();
        }
        endOfYaml = line.range.start + optionMatch[0].length + yamlOption.length;
        const rangedYamlOption = {
          substring: yamlOption,
          range: {
            start: line.range.start + optionMatch[0].length,
            end: endOfYaml
          }
        };
        yamlLines.push(rangedYamlOption);
        optionsSource.push(line);
        continue;
      }
    }
    break;
  }
  const mappedYaml = yamlLines.length ? mappedSource(source, yamlLines) : void 0;
  return {
    yaml: mappedYaml,
    optionsSource,
    source: mappedString(source, [{
      start: endOfYaml,
      end: source.value.length
    }]),
    sourceStartLine: yamlLines.length
  };
}
async function partitionCellOptionsMapped(language, outerSource, validate2 = false, engine = "", lenient = false) {
  const {
    yaml: mappedYaml,
    optionsSource,
    source,
    sourceStartLine
  } = partitionCellOptionsText(language, outerSource);
  if (language !== "r" || guessChunkOptionsFormat((mappedYaml || asMappedString("")).value) === "yaml") {
    const yaml = await parseAndValidateCellOptions(
      mappedYaml || asMappedString(""),
      language,
      validate2,
      engine,
      lenient
    );
    return {
      yaml,
      optionsSource,
      source,
      sourceStartLine
    };
  } else {
    return {
      yaml: void 0,
      optionsSource,
      source,
      sourceStartLine
    };
  }
}
function langCommentChars(lang) {
  const chars = kLangCommentChars[lang] || "#";
  if (!Array.isArray(chars)) {
    return [chars];
  } else {
    return chars;
  }
}
function optionCommentPattern(comment) {
  return new RegExp("^" + escapeRegExp(comment) + "\\s*\\| ?");
}
var kLangCommentChars = {
  r: "#",
  python: "#",
  julia: "#",
  scala: "//",
  matlab: "%",
  csharp: "//",
  fsharp: "//",
  c: ["/*", "*/"],
  css: ["/*", "*/"],
  sas: ["*", ";"],
  powershell: "#",
  bash: "#",
  sql: "--",
  mysql: "--",
  psql: "--",
  lua: "--",
  cpp: "//",
  cc: "//",
  stan: "#",
  octave: "#",
  fortran: "!",
  fortran95: "!",
  awk: "#",
  gawk: "#",
  stata: "*",
  java: "//",
  groovy: "//",
  sed: "#",
  perl: "#",
  ruby: "#",
  tikz: "%",
  js: "//",
  d3: "//",
  node: "//",
  sass: "//",
  coffee: "#",
  go: "//",
  asy: "//",
  haskell: "--",
  dot: "//",
  ojs: "//",
  apl: "\u235D"
};
function escapeRegExp(str2) {
  return str2.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}

// ../parse-shortcode.ts
function isBlockShortcode(content) {
  const m = content.match(/^\s*{{< (?!\/\*)(.+?)(?<!\*\/) >}}\s*$/);
  if (m) {
    return parseShortcode(m[1]);
  }
}
function parseShortcode(shortCodeCapture) {
  const [name, ...args] = shortCodeCapture.trim().split(" ");
  const namedParams = {};
  const params = [];
  const rawParams = args.map((v) => {
    const p = v.indexOf("=");
    let name2 = void 0;
    let value;
    if (p === -1) {
      value = v;
      params.push(value);
    } else {
      name2 = v.slice(0, p);
      value = v.slice(p + 1);
      namedParams[name2] = value;
    }
    return { name: name2, value };
  });
  return {
    name,
    rawParams,
    namedParams,
    params
  };
}

// ../break-quarto-md.ts
async function breakQuartoMd(src, validate2 = false, lenient = false) {
  if (typeof src === "string") {
    src = asMappedString(src);
  }
  const nb = {
    cells: []
  };
  const yamlRegEx = /^---\s*$/;
  const startCodeCellRegEx = new RegExp(
    "^\\s*```+\\s*\\{([=A-Za-z]+)( *[ ,].*)?\\}\\s*$"
  );
  const startCodeRegEx = /^```/;
  const endCodeRegEx = /^\s*```+\s*$/;
  let language = "";
  let directiveParams = void 0;
  let cellStartLine = 0;
  let codeStartRange;
  let codeEndRange;
  const lineBuffer = [];
  const flushLineBuffer = async (cell_type, index) => {
    if (lineBuffer.length || cell_type === "code") {
      const mappedChunks = [];
      for (const line of lineBuffer) {
        mappedChunks.push(line.range);
      }
      const source = mappedString(src, mappedChunks);
      const makeCellType = () => {
        if (cell_type === "code") {
          return { language };
        } else if (cell_type === "directive") {
          return {
            language: "_directive",
            name: directiveParams.name,
            shortcode: directiveParams
          };
        } else {
          return cell_type;
        }
      };
      const cell = {
        cell_type: makeCellType(),
        source,
        sourceOffset: 0,
        sourceStartLine: 0,
        sourceVerbatim: source,
        cellStartLine
      };
      cellStartLine = index + 1;
      if (cell_type === "code") {
        const { yaml, sourceStartLine } = await partitionCellOptionsMapped(
          language,
          cell.source,
          validate2,
          "",
          lenient
        );
        const breaks = Array.from(lineOffsets(cell.source.value));
        let strUpToLastBreak = "";
        if (sourceStartLine > 0) {
          cell.sourceWithYaml = cell.source;
          cell.source = mappedSubstring(cell.source, breaks[sourceStartLine]);
          if (breaks.length > 1) {
            const lastBreak = breaks[Math.min(sourceStartLine - 1, breaks.length - 1)];
            strUpToLastBreak = cell.source.value.substring(0, lastBreak);
          } else {
            strUpToLastBreak = cell.source.value;
          }
        } else {
          cell.sourceWithYaml = cell.source;
        }
        const prefix = "```{" + language + "}\n";
        cell.sourceOffset = strUpToLastBreak.length + prefix.length;
        cell.sourceVerbatim = mappedString(src, [
          codeStartRange.range,
          ...mappedChunks,
          codeEndRange.range
        ]);
        cell.options = yaml;
        cell.sourceStartLine = sourceStartLine;
      } else if (cell_type === "directive") {
        cell.source = mappedString(src, mappedChunks.slice(1, -1));
      }
      if (mdTrimEmptyLines(lines(cell.sourceVerbatim.value)).length > 0 || cell.options !== void 0) {
        nb.cells.push(cell);
      }
      lineBuffer.splice(0, lineBuffer.length);
    }
  };
  const tickCount = (s) => Array.from(s.split(" ")[0] || "").filter((c) => c === "`").length;
  let inYaml = false, inCodeCell = false, inCode = 0;
  const inPlainText = () => !inCodeCell && !inCode && !inYaml;
  const isYamlDelimiter = (line, index, skipHRs) => {
    if (!yamlRegEx.test(line)) {
      return false;
    }
    if (skipHRs && index > 0 && srcLines[index - 1].substring.trim() === "" && index < srcLines.length - 1 && srcLines[index + 1].substring.trim() === "") {
      return false;
    }
    return true;
  };
  const srcLines = rangedLines(src.value, true);
  for (let i = 0; i < srcLines.length; ++i) {
    const line = srcLines[i];
    const directiveMatch = isBlockShortcode(line.substring);
    if (isYamlDelimiter(line.substring, i, !inYaml) && !inCodeCell && !inCode) {
      if (inYaml) {
        lineBuffer.push(line);
        await flushLineBuffer("raw", i);
        inYaml = false;
      } else {
        await flushLineBuffer("markdown", i);
        lineBuffer.push(line);
        inYaml = true;
      }
    } else if (inPlainText() && directiveMatch) {
      await flushLineBuffer("markdown", i);
      directiveParams = directiveMatch;
      lineBuffer.push(line);
      await flushLineBuffer("directive", i);
    } else if (startCodeCellRegEx.test(line.substring) && inPlainText()) {
      const m = line.substring.match(startCodeCellRegEx);
      language = m[1];
      await flushLineBuffer("markdown", i);
      inCodeCell = true;
      codeStartRange = line;
    } else if (endCodeRegEx.test(line.substring) && (inCodeCell || inCode && tickCount(line.substring) === inCode)) {
      if (inCodeCell) {
        codeEndRange = line;
        inCodeCell = false;
        inCode = 0;
        await flushLineBuffer("code", i);
      } else {
        inCode = 0;
        lineBuffer.push(line);
      }
    } else if (startCodeRegEx.test(line.substring) && inCode === 0) {
      inCode = tickCount(line.substring);
      lineBuffer.push(line);
    } else {
      lineBuffer.push(line);
    }
  }
  await flushLineBuffer("markdown", srcLines.length);
  return nb;
}
function mdTrimEmptyLines(lines2) {
  const firstNonEmpty = lines2.findIndex((line) => line.trim().length > 0);
  if (firstNonEmpty === -1) {
    return [];
  }
  lines2 = lines2.slice(firstNonEmpty);
  let lastNonEmpty = -1;
  for (let i = lines2.length - 1; i >= 0; i--) {
    if (lines2[i].trim().length > 0) {
      lastNonEmpty = i;
      break;
    }
  }
  if (lastNonEmpty > -1) {
    lines2 = lines2.slice(0, lastNonEmpty + 1);
  }
  return lines2;
}

// ../yaml-schema/format-aliases.ts
var formatAliases = void 0;
function getFormatAliases() {
  if (formatAliases !== void 0) {
    return formatAliases;
  }
  formatAliases = getYamlIntelligenceResource("schema/format-aliases.yml").aliases;
  return formatAliases;
}
function expandFormatAliases(lst) {
  return expandAliasesFrom(lst, getFormatAliases());
}

// ../yaml-schema/execute.ts
function getFormatExecuteOptionsSchema() {
  const schema2 = idSchema(
    objectRefSchemaFromContextGlob("document-execute"),
    "front-matter-execute"
  );
  define(schema2);
  return refSchema("front-matter-execute", "be a front-matter-execute object");
}

// ../yaml-schema/format-schemas.ts
function useSchema(schema2, format) {
  const formats = schema2 && schema2.tags && schema2.tags.formats;
  if (formats === void 0) {
    return true;
  }
  const disabled = formats.filter((f) => f.startsWith("!")).map(
    (f) => f.slice(1)
  );
  const enabled2 = formats.filter((f) => !f.startsWith("!"));
  if (disabled.length > 0 && expandFormatAliases(disabled).indexOf(format) !== -1) {
    return false;
  }
  if (enabled2.length > 0 && expandFormatAliases(enabled2).indexOf(format) === -1) {
    return false;
  }
  return true;
}
function getFormatSchema(format) {
  const schema2 = objectRefSchemaFromContextGlob(
    "document-*",
    (field) => {
      const schema3 = schemaFromField(field);
      return useSchema(schema3, format);
    }
  );
  return anyOfSchema(schema2, enumSchema("default"));
}

// ../yaml-schema/front-matter.ts
function pandocFormatsResource() {
  return getYamlIntelligenceResource("pandoc/formats.yml");
}
async function makeFrontMatterFormatSchema(nonStrict = false) {
  const hideFormat = (format) => {
    const hideList = ["html", "epub", "docbook"];
    const hidden = hideList.some(
      (h) => format.startsWith(h) && format.length > h.length
    );
    return { name: format, hidden };
  };
  const formatSchemaDescriptorList = (await pandocFormatsResource()).concat(
    "md",
    "hugo"
  ).map(
    (format) => {
      const {
        name,
        hidden
      } = hideFormat(format);
      return {
        regex: `^(.+-)?${name}([-+].+)?$`,
        schema: getFormatSchema(name),
        name,
        hidden
      };
    }
  );
  const formatSchemas = formatSchemaDescriptorList.map(
    ({ regex, schema: schema2 }) => [regex, schema2]
  );
  const plusFormatStringSchemas = formatSchemaDescriptorList.map(
    ({ regex, name, hidden }) => {
      const schema2 = regexSchema(regex, `be '${name}'`);
      if (hidden) {
        return schema2;
      }
      return completeSchema(schema2, name);
    }
  );
  const luaFilenameS = regexSchema("^.+.lua$");
  plusFormatStringSchemas.push(luaFilenameS);
  const completionsObject = fromEntries(
    formatSchemaDescriptorList.filter(({ hidden }) => !hidden).map(({ name }) => [name, {
      type: "key",
      display: name,
      value: `${name}: `,
      description: `be '${name}'`,
      suggest_on_accept: true
    }])
  );
  return errorMessageSchema(
    anyOfSchema(
      describeSchema(
        anyOfSchema(...plusFormatStringSchemas),
        "the name of a pandoc-supported output format"
      ),
      objectSchema({
        propertyNames: luaFilenameS
      }),
      allOfSchema(
        objectSchema({
          patternProperties: fromEntries(formatSchemas),
          completions: completionsObject,
          additionalProperties: nonStrict
        })
      )
    ),
    "${value} is not a valid output format."
  );
}
var getFrontMatterFormatSchema = defineCached(
  async () => {
    return {
      schema: await makeFrontMatterFormatSchema(),
      errorHandlers: []
    };
  },
  "front-matter-format"
);
var getNonStrictFrontMatterFormatSchema = defineCached(
  async () => {
    return {
      schema: await makeFrontMatterFormatSchema(true),
      errorHandlers: []
    };
  },
  "front-matter-format-nonstrict"
);
var getFrontMatterSchema = defineCached(
  async () => {
    const executeObjSchema = await getFormatExecuteOptionsSchema();
    return {
      schema: anyOfSchema(
        nullSchema,
        allOfSchema(
          objectSchema({
            properties: {
              execute: executeObjSchema,
              format: await getFrontMatterFormatSchema()
            },
            description: "be a Quarto YAML front matter object"
          }),
          objectRefSchemaFromContextGlob(
            "document-*",
            (field) => field.name !== "format"
          ),
          executeObjSchema
        )
      ),
      errorHandlers: []
    };
  },
  "front-matter"
);

// ../yaml-schema/project-config.ts
var getProjectConfigFieldsSchema = defineCached(
  async () => {
    return {
      schema: objectSchemaFromFieldsObject(
        getYamlIntelligenceResource("schema/project.yml")
      ),
      errorHandlers: []
    };
  },
  "project-config-fields"
);
var getExtensionConfigFieldsSchema = defineCached(
  async () => {
    return {
      schema: objectSchemaFromFieldsObject(
        getYamlIntelligenceResource("schema/extension.yml")
      ),
      errorHandlers: []
    };
  },
  "extension-config-fields"
);
function disallowTopLevelType(error, parse, _schema) {
  if (!(error.instancePath.length === 1 && error.instancePath[0] === "type")) {
    return error;
  }
  const violatingObject = locateAnnotation(parse, error.instancePath, "key");
  const localizedError = createLocalizedError({
    ...error,
    message: "top-level key 'type' is not allowed in project configuration.",
    violatingObject,
    source: mappedSubstring(
      parse.source,
      violatingObject.start,
      violatingObject.end + 1
    )
  });
  localizedError.niceError.info["top-level-type-not-allowed"] = "Did you mean to use 'project: type: ...' instead?";
  return localizedError;
}
var getProjectConfigSchema = defineCached(
  async () => {
    const projectConfigFields = await getProjectConfigFieldsSchema();
    const execute = await getFormatExecuteOptionsSchema();
    const format = await getFrontMatterFormatSchema();
    const profile = refSchema(
      "project-profile",
      "Specify a default profile and profile groups"
    );
    const result = allOfSchema(
      objectSchema({
        properties: {
          execute,
          format,
          profile
        },
        description: "be a Quarto YAML front matter object"
      }),
      execute,
      await getFrontMatterSchema(),
      projectConfigFields
    );
    return {
      schema: describeSchema(result, "a project configuration object"),
      errorHandlers: [disallowTopLevelType]
    };
  },
  "project-config"
);
var getExtensionConfigSchema = defineCached(
  async () => {
    const extensionConfig = await getExtensionConfigFieldsSchema();
    return {
      schema: describeSchema(
        extensionConfig,
        "an extension configuration object"
      ),
      errorHandlers: []
    };
  },
  "extension-config"
);

// descriptions.ts
function patchMarkdownDescriptions() {
  const descriptionList = getYamlIntelligenceResource(
    "schema/html-descriptions.yml"
  );
  const schemaList = Object.values(getSchemaDefinitionsObject());
  let cursor = 0;
  for (const schema2 of schemaList) {
    walkSchema(schema2, (s) => {
      if (s === false || s === true) {
        return;
      }
      const description = s && s.tags && s.tags.description;
      if (!description) {
        return;
      }
      const fixedDescription = descriptionList[cursor++];
      if (typeof fixedDescription === "string") {
        s.documentation = fixedDescription;
      } else if (typeof (fixedDescription && fixedDescription.short) === "string") {
        s.documentation = fixedDescription.short;
      }
    });
  }
}

// hover.ts
function buildLineMap(annotation, document) {
  const result = {};
  const walk = (s, f2) => {
    const result2 = f2(s);
    if (result2 === true) {
      return;
    }
    const { annotation: annotation2, path } = s;
    const isMapping = ["block_mapping", "flow_mapping", "mapping"].indexOf(annotation2.kind) !== -1;
    for (let i = 0; i < annotation2.components.length; ++i) {
      const child = annotation2.components[i];
      const keyOrValue = isMapping && (i & 1) === 0 ? "key" : "value";
      if (isMapping) {
        path.push(annotation2.components[i & ~1].result);
      } else {
        path.push(i);
      }
      walk({ annotation: child, position: keyOrValue, path }, f2);
      path.pop();
    }
  };
  const f = indexToLineCol(document.value);
  const state = {
    annotation,
    path: [],
    position: "value"
  };
  walk(state, (state2) => {
    const { annotation: a, position: kOrV } = state2;
    if (kOrV === "key") {
      state2 = { ...state2 };
      state2.path = state2.path.slice();
      const pos = f(a.start);
      result[pos.line] = state2;
    }
  });
  return result;
}
async function hover(context) {
  const foundCell = await locateCellWithCursor(context);
  if (!foundCell) {
    return null;
  }
  const { doc: vd, schema: schema2 } = await createVirtualDocument(context);
  if (schema2 === void 0) {
    return null;
  }
  const mappedVd = asMappedString(vd);
  const annotation = readAnnotatedYamlFromMappedString(
    mappedVd,
    true
  );
  if (annotation === null) {
    return null;
  }
  const mapping = buildLineMap(annotation, mappedVd);
  if (mapping[context.position.row] === void 0) {
    return null;
  }
  const { path: navigationPath } = mapping[context.position.row];
  const result = [];
  for (const matchingSchema of navigateSchemaByInstancePath(
    schema2,
    navigationPath
  )) {
    if (matchingSchema === false || matchingSchema === true) {
      continue;
    }
    const concreteSchema = resolveSchema(matchingSchema);
    if (concreteSchema.tags && concreteSchema.tags.description) {
      const desc = concreteSchema.tags.description;
      if (typeof desc === "string") {
        result.push(desc);
      } else {
        result.push(desc.long);
      }
    }
  }
  return {
    content: `**${navigationPath.slice(-1)[0]}**

` + result.join("\n\n"),
    range: {
      start: {
        line: context.position.row,
        character: 0
      },
      end: {
        line: context.position.row,
        character: lines(asMappedString(context.code).value)[context.position.row].length
      }
    }
  };
}
async function createVirtualDocument(context, replacement = " ") {
  if (context.filetype === "yaml") {
    return {
      doc: asMappedString(context.code).value,
      schema: await getProjectConfigSchema()
    };
  }
  const nonSpace = /[^\r\n]/g;
  const { cells } = await breakQuartoMd(asMappedString(context.code));
  const chunks = [];
  let schema2 = void 0;
  for (const cell of cells) {
    const cellLines = rangedLines(cell.sourceVerbatim.value, true);
    const size = cellLines.length;
    if (size + cell.cellStartLine > context.position.row) {
      if (cell.cell_type === "raw") {
        for (const { substring } of cellLines) {
          if (substring.trim() === "---") {
            chunks.push(substring.replace(nonSpace, replacement));
          } else {
            chunks.push(substring);
          }
        }
        schema2 = await getFrontMatterSchema();
      } else if (cell.cell_type === "markdown") {
        chunks.push(cell.sourceVerbatim.value.replace(/[^\r\n]/g, replacement));
      } else {
        schema2 = (await getEngineOptionsSchema())[context.engine || "markdown"];
        const commentPrefix = kLangCommentChars[cell.cell_type.language] + "| ";
        for (const { substring } of cellLines) {
          if (substring.startsWith(commentPrefix)) {
            chunks.push(
              substring.replace(
                commentPrefix,
                replacement.repeat(commentPrefix.length)
              )
            );
          } else {
            chunks.push(substring.replace(nonSpace, replacement));
          }
        }
      }
      break;
    } else {
      chunks.push(cell.sourceVerbatim.value.replace(/[^\r\n]/g, replacement));
    }
  }
  return {
    doc: chunks.join(""),
    schema: schema2
  };
}
async function locateCellWithCursor(context) {
  const result = await breakQuartoMd(asMappedString(context.code));
  let foundCell = void 0;
  for (const cell of result.cells) {
    const size = lines(cell.sourceVerbatim.value).length;
    if (size + cell.cellStartLine > context.position.row) {
      foundCell = cell;
      break;
    }
  }
  return foundCell;
}

// yaml-intelligence.ts
function getTagValue(schema2, tag) {
  if (schema2 === true || schema2 === false) {
    return void 0;
  }
  return schema2.tags && schema2.tags[tag];
}
function positionInTicks(context) {
  const code2 = asMappedString(context.code);
  const {
    position
  } = context;
  const trimCode = code2.value.trimEnd();
  const codeLines = lines(trimCode);
  return code2.value.startsWith("---") && position.row === 0 || trimCode.endsWith("---") && position.row === codeLines.length - 1;
}
function trimTicks(context) {
  let code2 = asMappedString(context.code);
  if (code2.value.startsWith("---")) {
    code2 = mappedString(code2, [{ start: 3, end: code2.value.length }]);
    context = { ...context, code: code2 };
  }
  if (code2.value.trimEnd().endsWith("---")) {
    code2 = mappedString(code2, [{
      start: 0,
      end: code2.value.lastIndexOf("---")
    }]);
    context = { ...context, code: code2 };
  }
  return context;
}
async function validationFromGoodParseYAML(context) {
  const code2 = asMappedString(context.code);
  const result = await withValidator(context.schema, async (validator) => {
    const parser = await getTreeSitter();
    for (const parseResult of attemptParsesAtLine(context, parser) || []) {
      const lints = [];
      const {
        parse: tree,
        code: mappedCode
      } = parseResult;
      const annotation = buildTreeSitterAnnotation(tree, mappedCode);
      if (annotation === null) {
        continue;
      }
      const validationResult = await validator.validateParse(code2, annotation);
      const errorsBySpan = {};
      const spanString = (e) => `${e.location.start.line}-${e.location.start.column}-${e.location.end.line}-${e.location.end.column}`;
      for (const error of validationResult.errors) {
        const key = spanString(error);
        if (errorsBySpan[key] === void 0) {
          errorsBySpan[key] = error;
        }
      }
      for (const [_key, error] of Object.entries(errorsBySpan)) {
        let text;
        if (error.niceError && error.niceError.heading) {
          text = error.niceError.heading;
          if (error.niceError.info["did-you-mean-key"]) {
            text = text + " (" + error.niceError.info["did-you-mean-key"] + ")";
          } else if (error.niceError.info["did-you-mean-value"]) {
            text = text + " (" + error.niceError.info["did-you-mean-value"] + ")";
          }
          if (error.niceError.info["suggestion-fix"]) {
            text = text + " (" + error.niceError.info["suggestion-fix"] + ")";
          }
        } else {
          text = error.message;
        }
        lints.push({
          "start.row": error.location.start.line,
          "start.column": error.location.start.column,
          "end.row": error.location.end.line,
          "end.column": error.location.end.column,
          "text": text,
          "type": "error"
        });
      }
      return lints;
    }
    return [];
  });
  if (code2.value === "") {
    return [];
  }
  const locF = mappedIndexToLineCol(code2);
  const ls = Array.from(lineOffsets(code2.value)).map((offset) => {
    try {
      return locF(offset).line;
    } catch (_e) {
      return void 0;
    }
  }).filter((x) => x !== void 0);
  const toOriginSourceLines = (targetSourceLine) => ls[targetSourceLine];
  const predecessors = getYamlPredecessors(
    code2.value,
    context.position.row - 1
  ).map(toOriginSourceLines);
  if (context.explicit === void 0) {
    return result;
  }
  if (!context.explicit) {
    return result.filter(
      (lint) => predecessors.indexOf(lint["start.row"]) === -1
    );
  } else {
    return result;
  }
}
async function completionsFromGoodParseYAML(context) {
  const {
    line,
    position,
    schema: schema2
  } = context;
  const positionKind = context.positionKind || "metadata";
  const commentPrefix = context.commentPrefix || "";
  const parser = await getTreeSitter();
  let word = "";
  if (line.slice(-1) !== ":") {
    word = line.split(" ").slice(-1)[0];
  }
  if (line.trim().length === 0) {
    const path = locateFromIndentation(context);
    const indent2 = line.length;
    const rawCompletions = completions({
      schema: schema2,
      path,
      word,
      indent: indent2,
      commentPrefix,
      context,
      completionPosition: "key",
      positionKind
    });
    return rawCompletions;
  }
  const indent = line.trimEnd().length - line.trim().length;
  const completeEmptyLineOnIndentation = (deletions, mappedCode) => {
    const path = locateFromIndentation({
      line: line.slice(0, -deletions),
      code: mappedCode.value,
      position: {
        row: position.row,
        column: position.column - deletions
      }
    });
    const rawCompletions = completions({
      schema: schema2,
      path,
      word,
      indent,
      commentPrefix,
      context,
      completionPosition: "key",
      positionKind
    });
    return rawCompletions;
  };
  for (const parseResult of attemptParsesAtLine(context, parser)) {
    const {
      parse: tree,
      code: mappedCode,
      deletions
    } = parseResult;
    const lineAfterDeletions = line.substring(0, line.length - deletions);
    if (lineAfterDeletions.trim().length === 0) {
      const result = completeEmptyLineOnIndentation(
        deletions,
        mappedCode
      );
      return result;
    } else {
      const doc = buildTreeSitterAnnotation(tree, mappedCode);
      if (doc === null) {
        continue;
      }
      const index = lineColToIndex(mappedCode.value)({
        line: position.row,
        column: position.column - deletions
      });
      let { withError: locateFailed, value: maybePath } = locateCursor(
        doc,
        index
      );
      if (locateFailed) {
        if (lineAfterDeletions.trim().length === 0) {
          const result = await completeEmptyLineOnIndentation(
            deletions,
            mappedCode
          );
          return result;
        }
        maybePath = locateFromIndentation({
          line: lineAfterDeletions,
          code: mappedCode.value,
          position: {
            row: position.row,
            column: position.column - deletions
          }
        });
      }
      const path = maybePath;
      if (path[path.length - 1] === word) {
        path.pop();
      }
      const completionOnValuePosition = line.indexOf(":") !== -1;
      const completionOnArraySequence = line.indexOf("-") === -1;
      const rawCompletions = completions({
        schema: schema2,
        path,
        word,
        indent,
        commentPrefix,
        context,
        completionPosition: completionOnValuePosition ? "value" : completionOnArraySequence ? "key" : void 0,
        positionKind
      });
      if (completionOnValuePosition) {
        rawCompletions.completions = rawCompletions.completions.map((c) => ({
          ...c,
          suggest_on_accept: false
        }));
      }
      return rawCompletions;
    }
  }
  return noCompletions;
}
var noCompletions = {
  token: "",
  completions: [],
  cacheable: false
};
function uniqBy(lst, keyFun) {
  const itemSet = /* @__PURE__ */ new Set();
  return lst.filter((item) => {
    const key = keyFun(item);
    if (key === void 0) {
      return true;
    }
    if (itemSet.has(key)) {
      return false;
    }
    itemSet.add(key);
    return true;
  });
}
function dropCompletionsFromSchema(obj, completion) {
  const matchingSchema = resolveSchema(completion.schema);
  const {
    path,
    positionKind
  } = obj;
  if (positionKind === "code-cell") {
    return false;
  }
  if (completion.type === "value") {
    return false;
  }
  const subPath = [completion.value.slice(0, -2)];
  const matchingSubSchemas = navigateSchemaByInstancePath(matchingSchema, subPath);
  if (matchingSubSchemas.length === 0) {
    return false;
  }
  const executeOnly = matchingSubSchemas.every(
    (s) => s !== false && s !== true && s.tags && s.tags["execute-only"]
  );
  if (path.length > 0 && path[0] === "execute") {
    return !executeOnly;
  } else {
    return executeOnly;
  }
}
function completions(obj) {
  const {
    schema: schema2,
    indent,
    commentPrefix,
    context,
    completionPosition
  } = obj;
  let word = obj.word;
  let path = obj.path;
  const maybeSchemaId = (schema3) => {
    if (schema3 === true || schema3 === false) {
      return "";
    } else {
      return schema3.$id;
    }
  };
  let matchingSchemas = uniqBy(
    navigateSchemaByInstancePath(schema2, path),
    maybeSchemaId
  );
  if (matchingSchemas.length === 0) {
    const candidateSchemas = uniqBy(
      navigateSchemaByInstancePath(schema2, path.slice(0, -1), word !== ""),
      maybeSchemaId
    );
    if (candidateSchemas.length === 0) {
      return {
        token: word,
        completions: [],
        cacheable: true
      };
    } else {
      matchingSchemas = candidateSchemas;
      word = String(path[path.length - 1]);
      path = path.slice(0, -1);
      obj = {
        ...obj,
        word,
        path
      };
    }
  }
  const aliases = getFormatAliases();
  const formats = [
    ...Array.from(context.formats),
    ...Array.from(context.project_formats)
  ].filter((x) => aliases["pandoc-all"].indexOf(x) !== -1);
  let completions2 = matchingSchemas.map((schema3) => {
    const result = schemaCompletions(schema3);
    const keptCompletions = result.filter((completion) => !dropCompletionsFromSchema(obj, completion));
    return keptCompletions.map((completion) => {
      if (!completion.suggest_on_accept || completion.type === "value" || !schemaAccepts(completion.schema, "object")) {
        return completion;
      }
      const key = completion.value.split(":")[0];
      const matchingSubSchemas = navigateSchemaByInstancePath(completion.schema, [key]);
      const canSuggestOnAccept = (ss) => {
        const matchingTypes = /* @__PURE__ */ new Set();
        walkSchema(ss, (s) => {
          const t = schemaType(s);
          switch (t) {
            case "object":
              matchingTypes.add("object");
              return true;
            case "array":
              matchingTypes.add("array");
              return true;
            case "anyOf":
            case "allOf":
              return false;
            default:
              matchingTypes.add("scalar");
          }
        });
        if (matchingTypes.size > 1) {
          return false;
        }
        const arraySubSchemas = [];
        walkSchema(ss, {
          "array": (s) => {
            arraySubSchemas.push(s);
            return true;
          },
          "object": (_) => true
        });
        return arraySubSchemas.every((s) => {
          if (s.items === void 0) {
            return true;
          } else {
            return canSuggestOnAccept(s.items);
          }
        });
      };
      if (!matchingSubSchemas.every((ss) => canSuggestOnAccept(ss))) {
        return {
          ...completion,
          suggest_on_accept: false,
          value: completion.value
        };
      }
      if (matchingSubSchemas.some(
        (subSchema) => schemaAccepts(subSchema, "object")
      )) {
        return {
          ...completion,
          value: completion.value + "\n" + commentPrefix + " ".repeat(indent + 2)
        };
      } else if (matchingSubSchemas.some(
        (subSchema) => schemaAccepts(subSchema, "array")
      )) {
        return {
          ...completion,
          value: completion.value + "\n" + commentPrefix + " ".repeat(indent + 2) + "- "
        };
      } else {
        return completion;
      }
    });
  }).flat();
  completions2 = completions2.filter((c) => c.value.startsWith(word));
  completions2 = completions2.filter((c) => {
    if (c.type === "value") {
      return !(c.schema && getTagValue(c.schema, "hidden"));
    } else if (c.type === "key") {
      const key = c.value.split(":")[0];
      const matchingSubSchemas = navigateSchemaByInstancePath(c.schema, [key]);
      if (matchingSubSchemas.length === 0) {
        return true;
      }
      return !matchingSubSchemas.every((s) => getTagValue(s, "hidden"));
    } else {
      return true;
    }
  });
  completions2 = completions2.filter((c) => {
    if (formats.length === 0) {
      return true;
    }
    let formatTags = [];
    if (c.type === "key") {
      const objSchema = c.schema;
      let value = objSchema.properties && objSchema.properties[c.display];
      if (value === void 0) {
        for (const key of Object.keys(objSchema.patternProperties || {})) {
          const regexp = new RegExp(key);
          if (c.display.match(regexp)) {
            value = objSchema.patternProperties[key];
            break;
          }
        }
      }
      if (value === void 0) {
        return true;
      }
      formatTags = getTagValue(value, "formats") || [];
    } else if (c.type === "value") {
      formatTags = c.schema && getTagValue(c.schema, "formats") || [];
    } else {
      return false;
    }
    const enabled2 = formatTags.filter((tag) => !tag.startsWith("!"));
    const enabledSet = /* @__PURE__ */ new Set();
    if (enabled2.length === 0) {
      for (const el of aliases["pandoc-all"]) {
        enabledSet.add(el);
      }
    } else {
      for (const tag of enabled2) {
        for (const el of expandAliasesFrom([tag], aliases)) {
          enabledSet.add(el);
        }
      }
    }
    for (let tag of formatTags.filter((tag2) => tag2.startsWith("!"))) {
      tag = tag.slice(1);
      for (const el of expandAliasesFrom([tag], aliases)) {
        enabledSet.delete(el);
      }
    }
    return formats.some((f) => enabledSet.has(f));
  });
  completions2 = completions2.map((c) => {
    if (c.documentation === "" || c.documentation === void 0) {
      return c;
    }
    if (c.description !== void 0 && c.description !== "") {
      return c;
    }
    return {
      ...c,
      description: c.documentation
    };
  });
  if (completionPosition) {
    completions2 = completions2.filter((c) => c.type === completionPosition);
  }
  completions2 = uniqBy(completions2, (completion) => completion.value);
  return {
    token: word,
    completions: completions2,
    cacheable: true
  };
}
async function automationFromGoodParseMarkdown(kind, context) {
  const {
    position,
    line
  } = context;
  const result = await breakQuartoMd(
    asMappedString(context.code),
    void 0,
    true
  );
  const adjustedCellSize = (cell) => {
    const cellLines = lines(cell.source.value);
    let size = cellLines.length;
    if (cell.cell_type !== "raw" && cell.cell_type !== "markdown") {
      size += 2;
    } else if (cellLines[size - 1].trim().length === 0) {
      size -= 1;
    }
    return size;
  };
  if (kind === "completions") {
    let foundCell = void 0;
    for (const cell of result.cells) {
      const size = lines((cell.sourceWithYaml || cell.source).value).length;
      if (size + cell.cellStartLine > position.row) {
        foundCell = cell;
        break;
      }
    }
    if (foundCell === void 0) {
      return noCompletions;
    }
    if (foundCell.cell_type === "raw") {
      const schema2 = await getFrontMatterSchema();
      context = {
        ...context,
        line,
        position,
        schema: schema2,
        code: foundCell.source,
        schemaName: "front-matter",
        positionKind: "metadata"
      };
      if (positionInTicks(context)) {
        return noCompletions;
      }
      context = trimTicks(context);
      return automationFromGoodParseYAML(kind, context);
    } else if (foundCell.cell_type === "markdown") {
      return noCompletions;
    } else if (foundCell.cell_type.language) {
      return automationFromGoodParseScript(kind, {
        ...context,
        language: foundCell.cell_type.language,
        code: foundCell.sourceWithYaml,
        position: {
          row: position.row - foundCell.cellStartLine,
          column: position.column
        },
        line,
        positionKind: "code-cell"
      });
    } else {
      return noCompletions;
    }
  } else {
    let linesSoFar = 0;
    const lints = [];
    for (const cell of result.cells) {
      if (cell.cell_type === "raw") {
        const innerLints = await automationFromGoodParseYAML(
          kind,
          trimTicks({
            ...context,
            filetype: "yaml",
            code: cell.source,
            schema: await getFrontMatterSchema(),
            schemaName: "front-matter",
            line,
            position,
            positionKind: "metadata"
          })
        );
        lints.push(...innerLints);
      } else if (cell.cell_type === "markdown") {
        continue;
      } else if (cell.cell_type.language) {
        if (cell.cell_type.language === "_directive") {
          return noIntelligence(kind);
        }
        const innerLints = await automationFromGoodParseScript(kind, {
          ...context,
          filetype: "script",
          code: cell.sourceWithYaml,
          language: cell.cell_type.language,
          line,
          position: {
            ...position,
            row: position.row - (linesSoFar + 1)
          },
          positionKind: "code-cell"
        });
        lints.push(...innerLints);
      }
      linesSoFar += adjustedCellSize(cell);
    }
    return lints;
  }
}
async function automationFromGoodParseYAML(kind, context) {
  if (kind === "completions" && positionInTicks(context)) {
    return noCompletions;
  }
  context = trimTicks(context);
  if (guessChunkOptionsFormat(asMappedString(context.code).value) === "knitr") {
    return noIntelligence(kind);
  }
  const func = kind === "completions" ? completionsFromGoodParseYAML : validationFromGoodParseYAML;
  return func(context);
}
async function automationFromGoodParseScript(kind, context) {
  if (context.language === "_directive") {
    return noIntelligence(kind);
  }
  const codeLines = rangedLines(asMappedString(context.code).value);
  let language;
  let codeStartLine;
  if (!context.language) {
    if (codeLines.length < 2) {
      return noIntelligence(kind);
    }
    const m = codeLines[0].substring.match(/.*{([a-z]+)}/);
    if (!m) {
      return noIntelligence(kind);
    }
    codeStartLine = 1;
    language = m[1];
  } else {
    codeStartLine = 0;
    language = context.language;
  }
  const mappedCode = mappedString(
    context.code,
    [{
      start: codeLines[codeStartLine].range.start,
      end: codeLines[codeLines.length - 1].range.end
    }]
  );
  const {
    yaml
  } = partitionCellOptionsText(language, mappedCode);
  if (yaml === void 0) {
    return noIntelligence(kind);
  }
  const engines = await getEngineOptionsSchema();
  const schema2 = engines[context.engine || "markdown"];
  const commentPrefix = kLangCommentChars[language] + "| ";
  context = {
    ...context,
    line: context.line.slice(commentPrefix.length),
    code: yaml,
    commentPrefix,
    position: {
      row: context.position.row - codeStartLine,
      column: context.position.column - commentPrefix.length
    },
    schema: schema2,
    schemaName: language
  };
  return automationFromGoodParseYAML(kind, context);
}
async function automationFileTypeDispatch(filetype, kind, context) {
  switch (filetype) {
    case "markdown":
      return automationFromGoodParseMarkdown(kind, context);
    case "yaml":
      return automationFromGoodParseYAML(kind, {
        ...context,
        positionKind: "metadata"
      });
    case "script":
      return automationFromGoodParseScript(kind, {
        ...context,
        positionKind: "code-cell"
      });
    default:
      return null;
  }
}
function exportSmokeTest(kind, context) {
  console.error(JSON.stringify({ kind, context }, null, 2));
}
var determineSchema = async (context) => {
  const extension = context.path === null ? "" : context.path.split(".").pop() || "";
  if (context.filetype !== "yaml") {
    return {
      schema: void 0,
      schemaName: void 0
    };
  }
  if (extension === "qmd") {
    const frontMatterSchema = await getFrontMatterSchema();
    return {
      schema: frontMatterSchema,
      schemaName: "front-matter"
    };
  }
  const extensionConfigNames = [
    "_extension.yml",
    "_extension.yaml"
  ];
  if (context.path && extensionConfigNames.some((name) => context.path.endsWith(name))) {
    const extensionConfigSchema = await getExtensionConfigSchema();
    return {
      schema: extensionConfigSchema,
      schemaName: "extension-config"
    };
  } else {
    const projectConfigSchema = await getProjectConfigSchema();
    return {
      schema: projectConfigSchema,
      schemaName: "project-config"
    };
  }
};
async function getAutomation(kind, context) {
  const {
    schema: schema2,
    schemaName
  } = await determineSchema(context);
  const result = await automationFileTypeDispatch(context.filetype, kind, {
    ...context,
    code: asMappedString(context.code),
    schema: schema2,
    schemaName
  });
  return result || null;
}
async function initYamlIntelligence(obj) {
  const {
    resourceModule,
    patchMarkdown
  } = obj;
  setYamlIntelligenceResources(resourceModule);
  await loadDefaultSchemaDefinitions();
  getFormatAliases();
  await getFrontMatterSchema();
  await getProjectConfigSchema();
  await getEngineOptionsSchema();
  for (const schema2 of getYamlIntelligenceResource(
    "schema/external-schemas.yml"
  )) {
    setSchemaDefinition(schema2);
  }
  try {
    const extendedLangCommentChars = getYamlIntelligenceResource(
      "handlers/lang-comment-chars.yml"
    );
    for (const [lang, comment] of Object.entries(extendedLangCommentChars)) {
      kLangCommentChars[lang] = comment;
    }
  } catch (_e) {
    console.warn(`"handlers/lang-comment-chars.yml" not found.
initialization does not contain language extensions`);
  }
  if (patchMarkdown === void 0 || patchMarkdown) {
    patchMarkdownDescriptions();
  }
}
var noIntelligence = (kind) => {
  if (kind === "completions") {
    return noCompletions;
  } else {
    return [];
  }
};
async function init(context) {
  const ideInit = async () => {
    const resourceModule = (await Promise.resolve().then(() => __toESM(require_yaml_intelligence_resources()))).default;
    await getTreeSitter();
    if (context.client && context.client === "lsp") {
      await initYamlIntelligence({ resourceModule, patchMarkdown: false });
    } else {
      await initYamlIntelligence({ resourceModule });
    }
  };
  setInitializer(ideInit);
  await initState();
}
async function getCompletions(context, _path) {
  try {
    await init(context);
    return await getAutomation("completions", context);
  } catch (e) {
    console.log("Error found during autocomplete", e);
    exportSmokeTest("completions", context);
    return null;
  }
}
async function getLint(context, _path) {
  try {
    await init(context);
    return await getAutomation("validation", context);
  } catch (e) {
    console.log("Error found during linting", e);
    exportSmokeTest("validation", context);
    return null;
  }
}
async function getHover(context, _path) {
  try {
    await init(context);
    return hover(context);
  } catch (e) {
    console.log("Error found during hover", e);
    exportSmokeTest("hover", context);
    return null;
  }
}
export {
  getCompletions,
  getHover,
  getLint
};
/*! @author Toru Nagashima <https://github.com/mysticatea> */
/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */
